Skip to content

Latest commit

 

History

History
107 lines (74 loc) · 4.79 KB

about.md

File metadata and controls

107 lines (74 loc) · 4.79 KB
layout title permalink
page
About
/about/

Contents

{:.no_toc}

  • This will be replaced by the table of contents {:toc}

GitHub (2021 - present)

I am a Principal Researcher at GitHub. My interests are in developer tools, programming languages, and software engineering. My work is at the border between research and practice -- applying cutting-edge research to build tools that help developers be more productive and write better code.

Google (2011-2021)

Previously, I was a Tech Lead/Manager at Google on the Java Team. I led a team of 9 engineers and worked on a number of tools for Java developers:

Error Prone

Error Prone is Google's static analysis framework for Java. It is used as a bug detector, a large-scale refactoring tool, and a large-scale code analysis tool. Error Prone is integrated into Google's build system and code analysis platform and is thus used by every Java engineer at Google.

Error Prone is used by many other companies, including Uber and Square. Uber built their null checker, NullAway, on Error Prone.

Bazel

Bazel is Google's build system. My team owned the Java compiler(s) used in Bazel and the Java rules implementation. We disentangled the Java compiler from Bazel itself, took ownership, and made many improvements to build speed via tools like Turbine, a header compiler for Java.

google-java-format

google-java-format is Google's Java formatter. Before google-java-format, there was no formatter which correctly implemented Google's Java Style Guide. We built one which grew organically to be used by ~all Google Java developers.

Notably, google-java-format is not configurable, which enabled us to deliver excellent formatting results with reduced engineering effort.

Java 8+ Support for Android

Older Android devices do not support Java 8+ language features (e.g., lambdas) or APIs. We built a tool, Desugar, that rewrites Java 8+ bytecode into Java 7 bytecode and repackages Java 8+ libraries so that they can be used on these older devices.

Initially Desugar was supported only for internal Google developers, but we worked with Android Studio to bring desugaring to all Android developers.


I also worked on two machine learning for code efforts:

DeepDelta

DeepDelta was our first attempt to automatically repair broken builds. We collected a giant dataset of all Java builds at Google and the diffs between them. We processed these into "resolution sessions," sequences of builds that went from failed to successful, and extracted the AST diffs that caused them to succeed. We then trained a neural machine translation model to predict these diffs with 50% accuracy.

This was joint work among my team and two visiting researchers, Ali Mesbah from UBC and Andrew Rice from Cambridge.

Please see our FSE paper for details.

Graph2Diff

Graph2Diff is an extension of our prior DeepDelta work. DeepDelta's diff DSL did not provide sufficient information to turn the model output back into source code in all cases. Graph2Diff improved the DSL, enab