Recurse Center Return Statement

I’ve just finished three months at the Recurse Center in the S2’25 batch. This is my return statement, the reflection that Recursers traditionally write at the end of their time there.
What even is the Recurse Center?
RC is a self-directed programming retreat in NYC. There are no classes or grades, and you choose what to work on. You can join remotely or spend time at the Brooklyn space, where other programmers are working on their own projects and are often happy to talk or pair.
A batch lasts 6 or 12 weeks. People might be writing an operating system, learning functional programming, building a Game Boy emulator, or working through a theorem prover. Being around that range of interests was one of the things I enjoyed most.
I met quant traders, creative coders, engineers from large tech companies, researchers, engineering directors, and high schoolers. They had different reasons for being there, but a shared interest in spending time on programming.
RC’s social rules help make it easier to ask questions and work together:
- No well-actually’s: don’t be pedantic when someone makes a minor mistake.
- No feigned surprise: don’t act shocked when someone doesn’t know something.
- No backseat driving: don’t interrupt pair programmers with drive-by suggestions.
- No subtle -isms: no racism, sexism, homophobia, or transphobia, even subtle or “joking” versions.
People followed these rules in everyday conversations. I could ask a basic question without having to explain why I didn’t already know the answer, which made it much easier to learn from others.
The self-directives describe how RC encourages people to approach their time:
- Work at the edge of your abilities. Push yourself past what’s already comfortable.
- Build your volitional muscles. Work on what you actually want to work on, not what you “should.”
- Learn generously. Share what you know and help others.
Why I joined
I applied because I felt I was losing some of my confidence as a programmer. I wanted time to work on problems that stretched me again.
During my last year or so at Apple, much of my time had gone into project management and coordinating work across teams. That work was necessary, but it left less room for the programming I wanted to do. I missed spending long stretches working through a difficult technical problem.
I considered taking a vacation or finding more room for a side project at work. Then my mentor at Apple left for RC for similar reasons. Seeing someone I respected make that choice helped me decide to apply. Three months spent building things with other programmers sounded like what I needed.
What I worked on
I expected to spend time on lots of different topics. I did explore a few, but two projects ended up taking most of my attention.
Distributed training on heterogeneous hardware. I wanted to see whether I could train a model using different kinds of accelerators together. At RC, that meant finding a way for NVIDIA GPUs and my MacBook’s Apple Silicon to contribute to the same training run. I wrote about the experiment here.
Alternative architectures for LLM pre-training. In the second half of the batch, I spent most of my time on language model architectures and training performance under a limited compute budget. I built a hybrid U-Net Transformer and wrote up the experiments. A few researchers who are now at Anthropic helped me think through the design, and I’m grateful for their time.
Pairing also gave me a chance to work on things outside those two projects.
Automatic theorem proving. An RC alum who had recently defended her PhD in geometric group theory worked through the Natural Number Game with me in Lean. Congratulations again on the PhD! It was a different way of thinking about proofs from what I was used to.
Other pairing sessions. These included a Game Boy emulator in C, figuring out when Manhattanhenge happens, and several AI/ML applications. One person was building what they described as “Spotlight on steroids” for their local filesystem.
I wish I’d paired more. Watching someone else work through a problem often showed me an approach I wouldn’t have thought to try on my own.
The non-coding parts
Outside programming, I spent a lot of time playing chess, Love Letter, and Decrypto. The game nights are some of my favorite memories of the batch, and many of my conversations with people happened over cards.
I also started Film Night in response to Movie Night. Movie Night had high-brow films and long discussions afterwards, so Film Night was for things that were fun and dumb. Our discussions were more along the lines of “I liked the explosions” and “the main character was hot.” I was quite happy with this contribution to RC’s cultural life.
What I got out of it
I left RC feeling more confident in my programming and machine learning work than I had in a long time. Having the time to follow a question through to an implementation made a real difference.
The facilitators helped me use the time well. Their advice gave me enough direction to keep making progress while leaving the choice of projects to me.
I also enjoyed programming in a way I hadn’t for a while. I could spend a day understanding something difficult, ask someone nearby for help, and see where the conversation led. That was the kind of work I’d been missing when I applied.
If that sounds appealing, take a look at RC. I’m glad I made time for it, both for the projects and for the people I met.
Never graduate! 🌱