Reflecting on my time at Recurse Center

I spent the last twelve weeks at the Recurse Center: a self-directed educational retreat for programmers. Recurse Center, or “RC” for short, offers curious programmers an environment where they can recharge and grow, by pursuing whatever projects ignite their curiosity.

I learned about Recurse Center the same way a lot of folks do: by reading a blog post about it from an alum, like the one you’re reading now. I thought the program sounded interesting, so I bookmarked the link. Afterwards I kept thinking about it, wondering if it was something I should pursue.

Participating in RC doesn’t cost you anything except for your time. The program is funded by companies that pay to recruit from RC’s pool of graduates. But you do need to apply and be accepted to the program.

It was a few months later, after a particularly hard day at a job that had been trending downwards for a while, that I filled out the application form. A couple weeks and a couple video interviews later, I got an email that I’d been admitted to the Spring 1 2024 batch. My start date would be February 12th.

RC is structured in batches: every six weeks, a few dozen new Recursers start together on the same day. Most people do a twelve week (full-length) batch, which means that when you start there’s a bunch of other folks who are halfway through their batch and can help you figure out how everything works. The people I met were all friendly, welcoming, and supportive. I felt comfortable almost immediately.

As part of the interview process, you’ll be asked what you think you might work on during your batch. People come in with all different goals, and almost everyone ends up doing something at least a bit different from what they planned. I had been thinking a lot about what I wanted to accomplish, and I had come up with two goals:

  1. To build and release some open-source tools for working with OpenStreetMap data. OpenStreetMap is a free map of the world that anyone can edit. It’s sort of like if Wikipedia were a road atlas. I’ve been involved in the project for a while and had lots of ideas for software that could improve the experience of contributing to the project or using the data that comes out of it.
  2. To practice some skills that I hoped would help me tackle bigger, more ambitious projects as a solo developer. I’m often impressed by what just one or a handful of programmers can accomplish when they are smart, motivated, and equipped with just the right tools for the tasks at hand. I’d like to be able to do those kinds of things myself some day. I think that certain skills are especially powerful levers to achieve remarkable results with limited resources, and I wanted the chance to sharpen those skills.

During the first week, there were a couple of events designed to help you refine your plans for your batch. In one instance, we gathered on a video call and everyone wrote down things about what they wanted to get out of their RC experience, and then there were breakout sessions to talk about it. The session focused on building your volitional muscles by examining what you most want to do, and then unpacking why you want to do it, in order to more clearly understand what motivates you.

I found these sessions extremely helpful, and I’m grateful to the RC faculty who did a fantastic job of structuring them. At the end of my first week I had gained a lot of clarity about what excited me and what I wanted to work on, both at RC and beyond.

Over the next few weeks, I dove into the projects I had chosen. I also explored the various meetups and interest groups that happen at RC around different topics. I ended up enjoying the graphics programming weekly meetup so much that I devoted several weeks of my batch to building a raymarching renderer for volumetric clouds, even though that wasn’t part of my initial plan.

Meetups were also a great way to connect with other people in my batch and hear about the projects they were working on, which were diverse and inspiring. People were building audio synthesizers and database engines. They were implementing KD trees and Prolly trees and Forth interpreters. They were making generative art with pen plotters and laser cutting music box tracks from MIDI files. It was energizing to be surrounded by such creative and talented people.

Recurse Center puts a big emphasis on learning generously: sharing what you are learning so that others can benefit from it too. Initially I tried to do this by pair programming, which the RC staff and many alums encourage. But I found it really challenging. I had paired before in school and at various jobs, but this was a new context. Pairing with someone I was just getting to know, on a project that one of us was not up to speed on at all, was exhausting to me. I enjoyed the chance to meet people but I kept coming away from mid-morning pairing sessions with almost no mental energy left for the rest of the day.

In the end, I decided that pairing wasn’t working for me, and I stopped doing it. I tried my best to find other ways to learn generously instead. I gave a talk about my volumetric cloud renderer to some people who were interested in how it worked, and I spent a fair amount of time in the RC chatrooms offering help to people asking about technical topics that I was familiar with. I still felt some guilt about not pairing, since “pair as often as you can” is such common advice at RC. But I think it’s important to accept yourself and find ways to participate that work for you.

My single favorite day of Recurse Center was Impossible Stuff Day. This is a hackathon where for one day you work on something that seems hopelessly, foolishly ambitious to you, and see how far you can get with it. As one of the RC faculty put it: “RC asks you to work at the edge of your abilities, and sometimes the best way to find that edge is to leap beyond it and see where you land.” I spent the day trying to add a significant new feature to an open-source real-time rendering engine, and failed. I’m proud of that, because I think it means I chose something suitably impossible for me to finish. But I was also surprised by how much progress I made. It was impossible (for me), but it wasn’t quite as impossible as I’d thought.

At the end of your batch at RC, you “nevergraduate”. RC doesn’t give out any kind of certificate. People just post their final project updates, and send each other nice notes about experiences they shared together. It’s very wholesome. As an alum, you still have access to the community, and I do plan to pop into the virtual space occasionally. Several alumni were very helpful to me when I was figuring out aspects of my projects and I’d like the opportunity to pay that kindness forward.

When I applied to RC, I was feeling burnt out and a bit uncertain about what to do next. The experience gave me the space to recharge, rekindle my love of programming, and discover where I wanted to do with the next chapter of my career. And I met some kind, creative and talented people along the way. If that sounds like something you’re looking for, maybe you should apply.