What I Did Summer 2019

August 10, 2019

A What I Did is my intersection between what Julia Evans describes as a brag document and a Where I’m Going, applied to relatively short time frame.

This summer I worked with the Angular Team at Google in Sunnyvale, CA. I feel incredibly fortunate to have had such an experience, during which I

I felt these were interesting things to work on, and the people around me were even more interesting. The company’s work environment was one of the first I’ve been able to be my whole self in. I have many other thoughts about the experience and have been thinking about how I can share and give this experience to othersThis will be a future cc post. . In the meantime, please email me if you’d like to chat!


1: Angular Indexer

I designed, developed, and shipped an indexer for Angular source code. This was a fantastic project with unexpected complexity throughout, even in its very early stages. The indexer used the Kythe framework, which has a sample UI demonstrating the kinds of cross-references a Kythe indexer can generate.

The project was initially scoped out to provide indexing information about interpolated properties and methods in templates. For example, given an Angular template

and component

the indexer was to generate cross-references and usage information about the class property myProperty.

I showed this was reliably practicable in the first half of my internship, then spent the next quarter of my internship adding support for the rest of the Angular template syntax and rolling out the indexer to production on all of Google’s internal codebaseBrowsed by more than 45K developers, and consisting of more than 26K Angular modules! . The last quarter of my internship I fixed bugs, hacked on some Rust stuff, and worked with customers of TypeScript indexer plugins.

I gave a talk on developing the Angular indexer:

2: Angular Indexing API

As part of my work on the Angular indexer, I needed to extract semantic information about an Angular project. To enable this, I created a new semantic analysis API called the Angular indexing API on the Angular compiler.

The indexing API is fairly small, TypeScript-compiler-esque, and is very easy to use:

There are now some thoughts of using this API for an open-source Angular indexer and of using it in the Angular language service.

Near the end of my internship, I gave a talk on what I learned contributing to a large open source project like Angular:

3: TypeScript Indexer

I added many new features to the open-source Kythe TypeScript indexer, including

Like the Angular indexer, the TypeScript indexer runs on all of Google’s codebase, which consists of thousands of TypeScript projects and is browsed by more than 45K developers.

Collaboration ‘n’ Friends

My intern host was Keen Yee Liau, an incredible individual from whom I learned a tremendous amount (especially about philosophy and life). I consider us good friends now, and we will continue to keep collaborating.

I collaborated with Evan Martin, who built the Kythe TypeScript indexer and works on TypeScript at Google. I also worked extensively with Alex Rickabaugh, who is the code owner of the Angular compiler. I communicated quite often with the Kythe team and with two other individuals developing indexers with TypeScript indexer plugins.

The entirety of the Angular team was amazing. Each presented me with new ideas and helped create a diverse, accepting environment where I could literally let my hair down.

Finally, I lived in a “Hacker Home” with a healthy amount23? 24? It was a lot. of other individuals who offered me new perspectives and shared with me a joyful summer.

These names likely mean nothing to you, but the picture only missed Dino and Courtney :cry:

Mountain View Hacker Home, Summer 2019

What I learned

In no particular order,

Where I’m going: Next Goals

My internship is over, but my work isn’t. In no particular order, my goals for the next semester are:


If you got this far, you probably want to talk. Cool, I do too! The best way to contact me is via email.

<< All Posts   :link: