Batch no. 2 return statement
Aug 06, 2022My Recurse center half-batch ended yesterday. This is my reflections post. We used to call these "return statements," because that's what happens at the end of a function, and also I guess it's like a return to normalcy. So this is my return statement.
Six weeks is really not a very long time, and I was conscious of that going in. Going to RC and being surrounded by interesting ideas and interesting people and also, crucially, by interesting people pursuing interesting ideas... feels like being plugged into a wall socket. Suddenly all the lights shoot on and someone yells "Go!" and you're running around trying to grab everything off all the shelves all at the same time like supermarket sweep.
I have always found it difficult to finish things at RC. There are so many new shinies that its tough to get all the way in and through a substantial project, especially in the alloted time. This was also my experience from my first batch, that in retrospect I saw a lot of little projects or attempts at projects or half done things, but in aggregate they added up to something more important to my development than a polished product would have.
Anyway that's just to say that I figured it'd be similar this time, and so I went in with that expectation. Sure enough, I don't have a single thing to point to and say "this is what I spent my time on." I have a few things that almost fit that definition, but not really. And anyway, that's not really the point of it for me.
So what did I do?
- I wrote my own static site generator
...and I've been using it to publish this site. This is probably the closest I came to producing a Useful Thing, as it has certainly been very useful to me, but truth be told it was functional even before I started my batch. This was important to me since I wanted to blog a lot. I kept feeling sniped to add features to it, or polish it up more, but I knew that if I let that eat my time I would regret it, and it works fine as it is, albeit a bit bare-bones.
- I wrote a lot of zig.
I came in expecting to split my time between typescript (via deno) and zig, and I did use quite a bit of deno especially while experimenting with parser combinators, but zig really stole the show for me. I've been tangentially involved with zig for years, and if you know me irl you've probably heard me talk about it already, but it's really gaining some steam and, tbqhwy, rightfully so. It's really invigorating to use such a low level language with a modern tooling approach, and the C interop is chef's kiss. The community is really growing quickly, too, and the discord has been super helpful and active (shout out to InKryption, who answered at least a half dozen of my questions within minutes).
I published two posts about zig:
I would have liked to write more but got a little subsumed over the last few weeks.
Zig projects dominated my hands on keyboard time, and though I didn't really finish either of them, I spent good focused periods on both a real time audio synthesis program and a complete rewrite of Sild. The latter has been especially rewarding as it's really highlighted to me the niceties that zig provides over C. I do plan to keep working on both of those things, although without any intention of release.
- I finally grokked parser combinators
I have spent a few years sporadically trying to learn about parser combinators, and it's never quite clicked. The reason is that they are very haskelly, and so translating them to a non-lazy, non-functional language presents friction, not least of which is the fact that most quality resources and talks and posts about them are Haskell or F#. Now it's not as if I'm afraid of Haskell or something, but I just had the feeling that implementing them in a language I'm already familiar with would do more for my understanding. I was right, but it took a lot of thinky time to get over the combination of weird little nuances that were tripping me up. It did result in my most substantial blog post though, so that was a positive. Really, it just feels really good to have finally cracked that nut. I'd like to sit down and write a JSON parser or something with them now, or maybe swap out the zig sild parser for a combinator implementation in the future...
- I blogged a lot
I didn't write quite as much as I was hoping to, and definitely fell off the wagon with my weekly update posts, but that's alright. I have been struggling against my prediliction towards writing giant-ass posts, and I haven't exactly won that war, but I'm getting better, I think. Blog posts are cheap to create, they don't all have to be canonical. On the plus side, I do have my tools set up now, so publishing is very easy. The writing is still hard, though...
Ultimately that's why I didn't write more than I did. It takes time to write. I mean, of course it does and I know that already, but the reality of having limited time to spend in-batch made the writing time more expensive in context. I do have some more drafts to work through now!
- I paired a lot
This was one of the best parts of the batch and I'm very happy that it was so seamless even though it was all on zoom. I paired on all sorts of stuff with all sorts of people, and it was always fun and interesting. One of the great benefits of RC being so unstructured is just the sheer variety of things people are into. I would go from pairing on someone's web app to code spelunking in zig zone with a few people to getting compiler flag tips while talking about shaders... there's just so much going on all the time!
The people really are what make the Recurse Center so special, and I have a lot of gratitude for my batch mates who were uniformly awesome.
- I spent a lot more time than I expected doing leetcode
I'm not planning to interview soon, so I didn't have a real reason to do this, other than my desire to shiv my latent imposter syndrome. I have some good news though: it worked! Leetcode like problems went from a source of shame for me to just another area of study that is super interesting and fun. Data structures and algorithms, in my mind, went from "the entirety of computer science including cutting edge research" to something a lot more tractable, more literal. When people say "data structures and algorithms" in this context they're not usually talking about more than a dozen common data structures, and the algorithms that flow from them. That's useful and interesting, not a bogeyman!
Anyway, I likely have a longer post on what that process felt like (spoiler alert, really good!) but for now I'll just leave it at the fact that this constellation of realizations might very well be the most impactful take-away for me.
In the end
This was a fantastic experience and I am so happy I was able to make the time for it. RC has been a very positive force in my life and I didn't take the opportunity to be more involved for a little while for granted. I have three more weeks of leave before going back to work and I'm going to use most of that time for music and for video games and also maybe, maybe I'll read a book. That's something that I used to do...
So until next time...
return self;