It's been a while since I've made a post. I will start posting more regularly for sure. But for now, let's get into the updates because there is a lot to get through!
In my post two years ago, I mentioned feeling invigorated to learn as much and create as much as I could. I spent that summer doing the Nand2Tetris course. In the fall, I started getting it in my head that I wanted to write lower level code at a company like Google. I started preparing by doing tons of Leetcode problems, mock interviews, etc. The following spring I interviewed at Amazon AWS, Splice, and Google. I was fortunate enough to get offers from Amazon and Google, and I chose Google.
In September 2022 I sold my house, packed up my things, and for the second time in my life left Missouri to go live in California. (The first time was when I lived in LA for 8 months after graduating college to pursue a career in film music.) This time I had a job!
Fast forward almost a year and I've been writing C++ code every day for the webspam team. It's been enjoyable and I'm learning a lot. It's so different than the years of web dev work I did at Carfax and EquipmentShare -- but I like it! My manager and teammates are also great. The problems are pretty interesting as well, and the scale is huge! We have to deal with TB/PB scale data frequently. That's easily 1000x-100000x the scale I've dealt with in the past.
It hasn't been all roses, however. The climate around Google has been all over the place in the last year. Days after I was hired, the company went on a hiring freeze. Immediately upon moving, there were talks of layoffs amid economic uncertainty. Fortunately I survived the inevitable layoffs for now (helps to be on a team that's close to what makes Google money), and the climate has improved greatly in the last few months.
All in all, I'm stoked to be working at Google. I go to the office every day. I play on the campus pianos and drums. I eat every free meal and snack there I can. I sleep in the nap pods occasionally. I do my laundry there on the weekends. It's such a great lifestyle!
One of my favorite parts about engineering at Google is the monorepo. Pretty much all the files that tens of thousands of engineers work on daily are in one logical folder. There are no versioned dependencies. You can click into any piece of code. It's great. I also really like Blaze, the build system that ties everything together. Its API is so simple and elegant.
I could go on and on about that, but one last point is that the Google Monorepo just feels gratifying to contribute to. The code quality is so high and consistent. It's very well documented (compared to most codebases I've worked in). The history is well-preserved, and no one makes fluff commits. Every CL I get reviewed and submitted feels like an accomplishment, and it feels like I'm contributing to some great work of art.
With that in mind, I've decided to create my own monorepo!
I want to create something with the same gravity but for myself. So I've decided that I'll be working on what I call the Joseph Monorepo (JMR) for the rest of my life. I want this repo to represent everything I've done, am doing, and am going to do!
I've spent the last two months merging all my old git repos into this one. I've also been slowly adding music projects, journals, blogs, memos, finances, pictures, etc. When I say everything, I mean everything!
I'm also trying to limit the amount of dependencies I have in this repo. I merged in a few small open-source codebases into a folder called third_party/. I also use some external python/golang libraries (via Bazel mechanisms, i.e. they aren't vendored). And obviously stuff like Bazel itself, compilers, linkers, etc. are pre-installed on the host machine and not built from scratch. But I suspect I will be authoring a lot of my own libraries and tools from scratch. I want to solve my own problems in my own way and not rely on others' solutions all the time. But I don't have any hard and fast rules around this -- it's just whatever I feel like or don't feel like doing.
For now, my efforts in the repo are to support the repo itself, create this site and other older sites, and organize 10 years of music projects. I haven't worked on any new serious dev projects, and it's unlikely that I will while I work here since Google -- like most companies -- discourages working on side projects. I'm probably pushing the rules they have a bit, but I've just decided that this is my life's work and I'm going to work on it no matter what. It's as simple as that. I work on it in my own time with my own resources, I don't write code that competes with Google, and I dare not reference internal Google code. And I'm very strict about it.
I use Bazel (open-source Blaze) as my build system. But it doesn't just build binaries, it builds so much more -- this site for example. And in time it could build everything, including my music. It's commonly called a build tool but I think of it more generically as a tool that orchestrates work performed on source files to create outputs. And even music can be modeled as such; audio/code/etc. source files are transformed one way or another into a final audio file. So I'm excited to play with it more and see where it goes!
Here are some stats so far!
At this point I'm leaning on not open-sourcing the repo; there's a lot of private stuff in this repo that I'd rather not share at this point. But while I won't share the sources, I will share the outputs (binaries, sites, music, blogs, etc.) very liberally. I could also see myself mirroring some parts of the repo to a public repo at some point.
Another life commitment I've made is to learn the Alkan Concerto for Solo Piano. It's a nearly hour-long piece that is way beyond my level. But I've been listening to it for most of my life and think it's one of the greatest pieces of music ever written. Currently, I've got about 10 of the 60 minutes in some playable state (not Hamelin tempos of course). But the real hard parts are just beginning.
Despite working at Google, I've been really enjoying using ChatGPT by OpenAI. I love its ability to generate code, especially trivial bash and python scripts. I also love its ability to compress and expand text.
Overall I look forward to the role AI will play in building, maintaining, and understanding my monorepo. And I look forward to the day when the context length of AI models will be large enough that I can feed my entire monorepo and its history into some model to be a better assistant.
Finally, I have around 10 other blog post ideas that I want to write about at some point. I'll likely be working on those in the coming months.
Until then, See ya!