Weeks 2 and 3 at RC

It has been a great 3 weeks at RC, so far. Not especially proud that I stopped writing for ~2 weeks, but it has been quite a whirlwind.

The most concrete thing that I've been working on is a project I'm calling Brainlove which is basically just random exploration of Brainfuck tooling. It's been really cool to see how mature the compile-to-wasm ecosystem has become. I still don't think that it would be my first choice for a professional setting, but the developer experience is much better than I was expecting. Deploying the debugger to Netlify as a static bundle was a breeze.

Beyond that, I've probably been spreading myself a little bit too thin in terms of what I'm working on:

  • Paired a lot with Andrew. Learning a lot about effective communication in these sessions. I've also really enjoyed reading Andrew's website and blog.
    • We reached a reasonable conclusion on the 2048 strategy project. We attempted a low-level implementation of board operations that turned out to be slower than the naiive list-based implementation. Really interesting exercise.
    • Wrote a "compiler" for compiling a very small expression language to Brainfuck. This was a mind bender. We both avoided seeking out external resources so it was a lot of fun to solve these problems from scratch.
  • Paired on a bunch of other things (ranging from Leetcode to an Octave LSP).
    • I think pairing has been the biggest benefit of being at RC so far. There are so many things I could explore, but I really want to make the most of being at RC right now, so I hope to continue emphasizing pairing.
  • I put together a small python script for generating LICENSE files. There are already a bunch of implementations of this, but I thought it would be a fun way to learn about how to package python libraries and scripts. There are a lot of outdated resources for python packaging, so this was surprisingly painful.
  • I hobbled together a URL shortener that runs on fly.io but is only accessible within my tailscale network. I used an existing Flask URL shortener that I had worked on with Rana (my wife) a while ago. Once I had a reasonable understanding of how everything fit together, this wasn't too bad. But my mental model of networking could probably use some work.
    • repo for the router code (I didn't write this)
    • repo for the URL shortener
    • post discussing go links on tailscale blog
  • Thought a lot about how to set up an election website that enables users to choose the voting system they use.
  • Made some progress on Crafting Interpreters in C++.
    • repo
    • Most of garbage collection is in place
    • Spent a good amount of time comparing performance with clox across both x86-64 and Apple silicon
  • Read a few chapters of DDIA
    • There's a small reading group for the book at RC where we've had some great discussion, so far. Planning to coordinate reading some papers as well!
  • Finished the available Protohackers problems in Python. These are a blast. I've really been enjoying Amos' series covering Advent of Code in Rust. I think it would be fun to put together a similar style series for Protohackers describing my approach to building out solutions (first in Python, then translating to Rust).

Not a ton of structure to this post, but I want to get back into the swing of writing regularly, so I'm lowering the bar a little bit. If you've made it this far, thanks for reading!

Day 4 at RC

What a week! RC has been a huge mental (and emotional) shift for me. I still feel anxious about making rapid progress; I hope as I settle on a more concrete direction that I'll be able to manage some of those feelings a little bit better. I feel like I'm shifting more toward a relaxed "let's just write some code" mindset. That feels good.

Self Reflection

I think back to some of the early performance discussions that I had with my managers as I was starting my career. At the time, I think I was reasonably satisfied with my own work. I was solving interesting problems and had a good dynamic with my teammates. It was satisfying to hear that others on the team were also satisfied with the work that I was doing.

Over time, the expectations that I've set for myself have grown. In some ways, I think those expectations may have stunted my growth as an engineer. With each new project or endeavor, it became more and more difficult to be satisfied with my own work. I think this is something I've struggled with since I was young. The first few times that I solved a particular type of math problem were satisfying. After that, I expected myself to be able to solve that kind of problem. There was no joy to be had in demonstrating again that I could solve that kind of problem. I would seek out progressively harder problems to solve while procrastinating on the exercises that I already knew I should be able to solve.

Software engineering is mostly working on things that you are already familiar with in some capacity. Understanding how to structure a particular abstraction or what kind of approach to take while solving a problem is mostly a consequence of experience. With enough time in the saddle, you get to see which decisions have the most significant consequences. When I feel like I am struggling to make good decisions easily, I quickly get frustrated with myself.

In that sense, being at RC feels great. I don't have to justify making a salary. I can convince myself that there are no external expecations which helps me to take it easy on myself.

More about day 4

2048

The little 2048 project that I've been pairing on is shaping up really well. It's a lot of fun to see how different strategies compare with one another. It reminds me a little bit of looking at some of the wordle solvers from the beginning of 2022. I'm excited to pair more on this on Monday.

LeetCode

I paired on a LeetCode problem again. I think I did a really bad job of driving and felt pretty bad in the moment. I was really impatient and didn't take the time to make sure I was on the same page as my navigator. My partner handled the situation really well and asked if we could take a step back to get on the same page.

I think this was a great experience for me. It was a chance to see how I can improve the way that I collaborate, which was awesome. I feel badly that I maybe didn't create the best experience for my partner, but I'm glad that I am getting better.

Crafting Interpreters

I finally dusted off my in-progress C++ implementation of a Lox bytecode interpreter. I think I'm going to forge toward the end with the hopes of thinking more about how to express some of the idioms in Rust.

One of the ideas I've been mulling over: I'd like to write a two-pass Lox compiler in Rust and implement an interactive debugger. If the debugger runtime is sufficiently modular, it should be feasible to get something up and running in wasm with a Rust-based front-end (maybe Leptos?). I think this would be a fun way to build on top of what I've learned while working through Crafting Interpreters while getting a better understanding of the compile-to-wasm space (with some web development thrown in there). We'll see how I'm feeling as I wrap up my C++ implementation.

Databases

I had a great coffee chat with an RC alum mostly discussing databases. I think I definitely want to pursue something in this space. I think I'm a bit anxious about building a toy database but maybe it's worth just trying.

Presentations

The presentations were awesome. It's a lot of fun to see the sheer variety of things that people are working on.

That's all for now

Thanks for reading. These posts will probably continue to lose structure over time. It's a lot of fun to write about random thoughts that I've been having even if they're not quite fully baked.