Last Monday was my first day at the Recurse Center, a programming retreat in New York City where I’ll be spending the next three months. It’s been an exciting week, and this seems like a good time to jot down some thoughts about how things have gone so far. In a follow-up post I’ll talk about what my goals are for my time here.
Monday was taken up by panels, introductions, and socializing with the other people in my batch – I talked to a lot of interesting people, but didn’t write any code. A couple Recursers did come to the AlphaGo watch party at my coworking space that night. Maybe I’ll get in a couple games of go amid all the programming here.
Tuesday was the first real day of the retreat. I got to the center a little before 10, found a desk, and started in on the project I’d planned to work on, a simplified database inspired by Datomic. Though I’d done some research and planning before arriving at RC, I wasn’t sure yet what the scope of the project would be or how I would go about doing it. I started working on a parser for a simple query language, figuring that I’d need that regardless of whether the database ended up being in-memory or persistent, local or distributed.
Fortunately, almost everyone I talked to about the project was either interested in helping me with it or knew of someone else who might be. I had several discussions over the course of the day that helped clarify my ideas about the project, and a couple of people expressed interest in pairing with me at some point. I also found some books in the library that promise to fill in gaps I have in my computer science databases knowledge (of which there are many).
On Wednesday, I spent all day pairing with Josh on a query engine. He knows Rust well, so he was able to help me both with the design, types and structure of the query engine and with the Rust ecosystem. By the end of the day we had a working backtracking constraint solver for Datalog-style queries, including handling implicit joins. By following Josh’s advice on the Rust library ecosystem, I was able to rewrite the query parser on Thursday morning so that it was much easier to work with and extend. (I replaced a parser generated by LALRPOP with the parser combinatori libary Combine, which fits in better with my Rust development workflow because the parser is just Rust code, not a separate file with its own syntax to learn and errors to diagnose.)
After that period of productivity I felt pretty good about how my project was going, so I decided to take a little break and work with people on other things Thursday afternoon. Of course I ended up getting nerd-sniped by the first meeting I attended, a kick-off for working on Capture the Flag (CTF) challenges together. We used a challenge set up by Stripe a few years ago in which you have to exploit successively more difficult vulnerabilities in order to escalate your privileges. I thought it’d be a fun thing to watch other people work on for an hour, but I ended up spending the bulk of the next two days learning enough about assembly programming and
gdb to coax a C program into executing a function it didn’t mean to. I’m not all the way through the challenge yet, and I’m excited to keep working on it – I’ve never had to do programming before that relied on precise knowledge of what exactly the stack is and how it’s laid out in memory, and it feels magical. (I am also shocked, having done this, that computers work at all, ever.)
Now it’s a three-day holiday weekend, but in spite of that I’ve been doing some work on both the CTF and on my database project. I was worried that I’d feel aimless or like I was wasting time, given RC’s lack of official structure and focus on self-directed work, but in fact I felt more satisfied and productive this week than I’ve felt in a long time. I’m also a little worried about burning out on programming over the course of the retreat, which is something I’ll need to keep an eye on; it’ll probably help to be mindful about how I spend my days off. For now, I’m optimistic that the summer is going to be an incredible experience and I’ll come out of it a much better programmer.
Next up: what do I want to accomplish while I’m here?