Recurse Center

Developing our position on AI

If you’re not familiar with us, RC is a 6 or 12 week retreat for programmers, with an integrated recruiting agency. Ours is a special kind of learning environment, where programmers of all stripes grow by following their curiosity and building things that are exciting and important to them. There are no teachers or curricula. We make money by recruiting for tech companies, primarily early-stage startups.

This post started as a question: How should RC respond to AI? Regardless of whether you think large language models present a big opportunity, a looming threat, or something in between, we can likely agree that AI is everywhere, especially in the world of programming, and almost impossible to ignore.

As operators of a programming retreat and recruiting agency, we’ve found ourselves grappling with many of the questions AI raises: What does the existence of code generation tools mean for the craft of programming? In what ways do language models help or harm our ability to learn? Which skills do these tools make less important, and which ones do they make more important? What impact has the proliferation of coding agents and other LLM-powered tools had on software engineering jobs today, and what impact might it have in the coming years?

Our interest in these questions is not academic; it’s practical. AI has popped up in every aspect of our work, from our admissions process (should we let applicants use Cursor?1) to our retreats (are AI tools helping or hindering people’s growth?) to our recruiting business (what should people focus on to be competitive candidates?) to community management (how do we support productive discussion when people have such strong feelings and divergent views?).

There are no simple answers to these questions. Nevertheless, I think it’s important that we at RC have a thoughtful perspective on AI; this post is about how we’ve tried to develop one.2

Our approach

We chose at the outset to limit our focus to the personal and professional implications of LLMs on Recursers, since that’s what we’re knowledgeable about. You won’t find positions or pontification in this post on energy usage, misinformation, industry disruption, centralization of power, existential risk, the potential for job displacement, or responsible training data.

That’s not because we don’t think discussion of any of these issues has merit (it does) but because we think it best to remain focused on the areas closest to our expertise and that are core to our business, and to avoid those that are more inherently political.3 While the broader societal questions are still being debated, every programmer here has to answer the question of whether and how best to use LLMs in their work during their time at RC.4

Our greatest asset is our community. With nearly 3,000 alums, we have easy and direct access to programmers of all stripes, with deep expertise and unique perspectives, from industry to academia. So we started this work by assembling an informal AI advisory group of alums who embody our most important educational values: curiosity, volition, rigor, kindness, learning by doing, and a growth mindset. We sought diversity among not only demographics (age, race, and gender), but also role type, industry, seniority, how recently they attended RC, and most importantly, their views on AI.5 For the latter, in several cases we were surprised to find people either more or less skeptical of AI than we had originally assumed. In all cases we were pleased to find people’s views thoughtful, nuanced, and more complex than the dominant discourse online.6

What we’ve learned from talking with our alums

Thoughtful, extremely capable programmers disagree on what models can do today, and whether or not they’re currently useful. On the same day we spoke with an experienced programmer who found existing LLMs to be fairly unhelpful and expected little to change about day-to-day software engineering in the next few years, we met with another who said that LLMs had already dramatically transformed his workflow, which now consisted primarily of reviewing pull requests from a combination of Claude Code agents and non-technical colleagues who were now using LLMs to build features for his company. A third alum we spoke with that day now largely programs by voice using Claude (for the curious, here’s a video of her process).

Still others described having tried the latest models only to find them “extremely confident and almost always wrong.” I expected to find vastly differing views of what future developments might look like, but I was surprised at just how much our alums differed in their assessment of where things are today.

We found at least three factors that help explain this discrepancy. First was the duration, depth, and recency of experience with LLMs; the less people had worked with them and the longer ago they had done so, the more likely they were to see little value in them (to be clear, “long ago” here may mean a matter of just a few months). But this certainly didn’t explain all of the discrepancy: The second factor was the type of programming work people cared about. By this we mean things like the ergonomics of your language, whether the task you’re doing is represented in model training data, and the amount of boilerplate involved. Programmers working on web apps, data visualization, and scripts in Python, TypeScript, and Go were much more likely to see significant value in LLMs, while others doing systems programming in C, working on carbon capture, or doing novel ML research were less likely to find them helpful. The third factor was whether people were doing smaller, more greenfield work (either alone or on small teams), or on large existing codebases (especially at large organizations). People were much more likely to see utility in today’s models for the former than the latter.

Recursers have mixed opinions about learning with AI. There was a little more consistency with how people thought about LLMs in the context of learning. Here, most people saw both real opportunities and pitfalls.

One idea we heard multiple times was that of turning off the LLM when people really wanted something to stick. One particularly enthusiastic user of LLMs described having two modes: “shipping mode” and “learning mode,” with the former relying heavily on models and the latter involving no LLMs, at least for code generation. Or, as another alum who’s very skeptical of LLMs put it:

I think a useful analogy would be to compare LLMs to e-bikes. If your goal is to get somewhere quickly, an e-bike is definitely advantageous compared to a bike with no e-assist. If your goal is to become a better / stronger cyclist, an e-bike isn’t really going to help you with that.

[It’s similar] with AI tools / LLMs. They can let you explore more at a faster pace and get you places faster. This can be really helpful for familiarizing yourself with topics or concepts or doing exploratory research. And if your goal is just to produce code, they will definitely speed that up. But if your goal is to engage with the work of programming on a deeper level, which I think is essential to become a better programmer, the more you rely on them the more you rob yourself of the benefits accrued through engaging with the process.

Or as an alum who helped launch ChatGPT put it:

LLMs can be the most amazing tool for learning humankind has ever created, or you can rely on it to do your work for you and then your learning will atrophy.

It’s a next token predictor, and you can use those next tokens to do your work and bypass the learning process, or you can use those tokens to empower you as a programmer and supercharge your learning. I use it to teach me stuff, so that I can go and do it.

Another alum who doesn’t use LLMs or AI tools pointed out that smoothing over all the difficulty of learning something probably isn’t desirable:

Some amount of friction in the process of learning is important to polishing the technique that you produce. But that doesn’t mean it has to be some kind of masochistic process.

How we use LLMs to learn still needs to be established — is it eliminating necessary or unnecessary friction?

For learning new things, alums were more likely to see LLMs as useful tutors or rubber ducks. One alum, who helped train foundational models and now works as a Research Scientist, shared that while she didn’t use LLMs much for writing code, she found them very helpful when exploring a new programming domain, so long as she was confident it was well represented in the training data. This is because LLMs allow her to ask as many “extremely dumb questions” as she wants without guilt to quickly bootstrap herself in a new area. Still, she said she keeps this tweet in mind as a check on over-reliance.

Another Recurser shared a similar use case. She had minored in CS before spending many years in data analytics, and returned to work as a software engineer two years ago. She was working remotely, hadn’t programmed recently, and didn’t have nearby teammates to rely on. So, she used ChatGPT essentially as a personalized tutor to get back up to speed. She described having it write code samples for her, and then asking it to explain each line and why it made different choices. She especially appreciated how it completely removed barriers to asking questions, and worries about looking “dumb” or taking up someone’s time. Her takeaway was that LLMs were a huge accelerant to her learning.

Nobody was confident about how people should use AI to learn their first programming language. The overwhelming majority of alums in our advisory group were capable programmers before ChatGPT became a household name, and were anywhere from a few years to a few decades into programming before “agentic coding” became a meme. As such, none had experience using LLMs to learn to program, but some still shared thoughts about the tradeoffs, opportunities, and challenges new programmers might face using LLMs.

The idea that new programmers should avoid using LLMs came up several times, but always with caveats and more questions than conclusions. One alum, who was thankful she already knew how to program before LLMs exploded and worried about new programmers’ over-reliance on AI, also saw its great value for learning, and made an analogy to Google:

I learned to program before Google existed, and so I was truly helpless then. I didn’t know any programmers, so all I could do was look in books and just feel confused. Google was a tremendous relief — it didn’t have everything, but at least more questions were answered. And so I guess I might feel the same way about AI as I did Google if I didn’t know that much about programming yet.

Several alums highlighted notable social implications and ways LLMs can impact collaboration at RC. One alum shared that she found LLMs made certain types of pairing much easier. In particular, they were helpful when pairing on languages or stacks she wasn’t familiar with, since the LLM could handle the syntax. This freed her and her pairing partner to focus on higher-level design questions.

Others worried that LLMs’ ability to patiently answer questions might discourage people from turning to other Recursers. At RC, where everyone is focused on learning rather than deadlines, asking questions often benefits both people involved. As one alum put it:

When interacting with another person at RC it’s likely the case that both people benefit from the time spent together, maybe not always equally, but I think the sum is greater than the parts. I think when interacting with an LLM, depending on how they’re used, one person can scratch some social itch, and they might benefit from it, but the energy goes kind of into a technological void, instead of into the community where it benefits others.

Many alums have changed their minds, and expect to change them again. We’ve all seen how tribal AI has become (especially online), with people quickly labeling each other as either AI boosters or haters. Given that, we were particularly heartened by how nuanced most of the RC alums we spoke with were in how they are thinking about AI. Many shared their views with significant humility, in part because they said they had already changed their minds on some aspects of AI, and expect to do so again. Several alums more skeptical of AI reported that they made a point of periodically testing new tools, to see how they had improved (or not).

The importance of being open to change was another notable point of agreement among alums with very different views on LLMs. One alum, who’s very much embraced programming with LLMs, said she thought her willingness to change and adopt new workflows was one of her biggest strengths. Another alum, who avoids LLMs and has been in the industry since the 90s, said bluntly:

No one survives being a professional programmer without being willing to learn a whole bunch of new things every couple of years. The people who don’t flee into management as soon as they can.

Everyone agreed that it’s still important to understand what you’re building. The most consistent theme we heard from our alums — regardless of their views on AI — was the importance of understanding and critically engaging with what you build and the systems you’re working with.

From one alum who now mostly programs at work using Claude Code:

I think that mental models of systems are as valuable as ever. Things like knowing how an operating system works, knowing how the Internet works, knowing about recommendation algorithms or audio codecs … having more of these [deep domains] in your head that you can understand and reason about is as important as it’s ever been and more.

Or as an extremely experienced systems programmer who does not use LLMs at all in his programming put it:

One of the fundamentals of programming is being able to shift back and forth between a bunch of different layers of abstraction and understand a system at [many] levels.

Everything I’ve seen about LLMs is that they are not able to do this yet, and may never be able to do this, at least not to the degree of fluidity of a really good programmer.

Even the alums with the deepest skepticism of LLMs saw the key factor being about how people who use models choose to use them:

I don’t worry about the people using these tools and challenging them, and as part of their process going into the code and confirming for themselves what is really happening. But I do worry about people who won’t expend that effort.

That ability to “expend effort” is an expression of will — an act of volition. Alums emphasized not only the importance of expressing our wills, regardless of the tools we use, but also the importance of our ability to make our own judgements:

I think one of the strongest signals [of who’s a good programmer now] is people who actually know how to say no, because AI will always allow you to have a yes, but the yes will often be a lie. And so somebody who will go, “these numbers seem off,” is really useful.

Whether you call this good judgement, discernment, or taste, we think it’s one of the most important abilities you can develop, not only as a programmer but as a person. How do you develop good judgement and taste? We think you start by learning to direct yourself, which brings us back to the purpose of RC.

Why we run RC

My cofounders and I started RC in 2011. Fourteen years later, I’m as dedicated to RC as ever because it is the ultimate reflection of my own values and beliefs. As a lifelong unschooler, I believe people learn best when given the freedom to explore their interests deeply, guided by their curiosity and powered by their intrinsic motivation. This is why RC is based firstly on self-direction, and why our mission is to transform lives by helping people direct themselves.

RC’s focus on programming reflects my own love of technology. Growing up in the 90s, I could lose myself in the computer for days. BASIC. HyperCard. NetBSD. C. The Internet. These and so many others presented new systems to understand, new worlds to explore. The potential felt, and still feels, limitless.

The greatest accelerant to my learning was finding kindred spirits. That is, other people who shared my interests and passions, who I could work alongside and with, and who could expose me to things I didn’t know existed. This is why RC is community-driven, and why we frequently say that the people are the most valuable part of RC.

Regardless of what the future brings, these things will remain true about RC.

Our position on AI

As I reflected on what our alums had shared, I found myself repeatedly coming back to the words of John Holt, the father of unschooling, which is the educational philosophy that RC is based on:

I doubt very much if it is possible to teach anyone to understand anything, that is to say, to see how various parts of it relate to all the other parts, to have a model of the structure in one’s mind. We can give other people names, and lists, but we cannot give them our mental structures; they must build their own. — John Holt

That is to say: tutorials and teachers can only get you so far. Ultimately, you must build your own mental structures. Stack Overflow can be a helpful resource, but blindly following or copy-pasting from it does little to help you learn. While you can get a lot farther mindlessly using LLMs than Stack Overflow, the same principle holds true.

Learning is not the product of teaching. Learning is the product of the activity of learners. — John Holt

You must be actively, intellectually engaged in your work and learning for it to represent real growth rather than regurgitation. You can no sooner learn a hard skill like programming by passively consuming LLM output than you can by merely listening to a teacher talk. As Holt put it: “We learn to do something by doing it. There is no other way.”

We hear these truths echoed in how Recursers talk about programming and learning with AI. And they’re the foundation of our three self-directives, our guiding principles for how people grow at RC. Together, they help us frame our view on how AI fits into learning and programming.

The first self-directive is to work at the edge of your abilities. Real growth happens at the boundary of what you can do and what you can almost do. Used well, LLMs can help you more quickly find or even expand your edge, but they risk creating a gap between the edge of what you can produce and what you can understand.

RC is a place for rigor. You should strive to be more rigorous, not less, when using AI-powered tools to learn, though exactly what you need to be rigorous about is likely different when using them.

You learn best and most effectively when you are learning something that you care about. Your work becomes meaningful and something you can be proud of only when you have chosen it for yourself. This is why our second self-directive is to build your volitional muscles. Your volition is your ability to make decisions and act on them. To set your own goals, choose your own path, and decide what matters to you. Like physical muscles, you build your volitional muscles by exercising them, and in doing so you can increase your sense of what’s possible.

LLMs are good at giving fast answers. They’re not good at knowing what questions you care about, or which answers are meaningful. Only you can do that. You should use AI-powered tools to complement or increase your agency, not replace it.

The primary value of RC is the people, which is why our third self-directive is to learn generously. Learning generously is what makes RC a community. We celebrate each other’s successes, support each other when we struggle, and benefit from each other’s knowledge.

Learning generously with AI means being open about what you’re trying, what’s worked, and what hasn’t. And it means making space for respectful disagreement and exploration, especially now, when people’s experiences with and views on these tools vary so widely, and when the discourse on AI in the rest of the world is so charged. Whether you’re experimenting with totally new workflows, avoiding AI, or somewhere in between, learning generously means being open to different perspectives, without judgement or dogma. RC has always been an opportunity to learn from others with different backgrounds, skills, and interests. We encourage everyone here to be curious about one another, and to work with someone whose tooling or usage differs from their own.

And remember, asking questions doesn’t just help you. At RC, it often helps the person you’re asking, too.

In short, whether you choose to embrace or avoid AI in your work at RC, you will need to build your own mental structures to grow as a programmer. When using AI, use it to amplify your ambitions, not to abdicate your agency. And regardless of what you do, be curious about and kind to the people around you.

Acknowledgments

Thank you to my colleagues (especially Emily Bernier and Rachel Petacat) for collaborating on this work, and to the more than a dozen alums who volunteered their time and shared their experience as part of our advisory group. Thanks also to the many other Recursers who shared their experiences through informal chats and writing.

  1. For more on this, see our recently updated guidance for our pairing interview.

  2. My colleagues Emily Bernier and Rachel Petacat and I collaborated on this work. When I write “we,” I’m referring to the work the three of us did and/or writing on behalf of RC. I use “I” here when writing about my own thoughts and experience, and to sound less like a corporate drone.

  3. We understand the argument that all technology is inherently political, but we do not think that is a useful definition of the word. While reasonable people may disagree, we don’t think grouping CPUs, encryption, and LLMs in the same category as abortion, immigration, and foreign policy makes sense, even though computer chips include precious metals, strong encryption was once classified as a munition, and LLMs were trained on copyrighted material.

  4. Even with that limited focus, the questions loom large, the facts are still changing, and reasonable people can disagree. Bluntly, we don’t think it’s practical or even desirable to seek a definitive set of answers to some of these questions, or to prescribe specific advice without nuanced understanding of individuals’ goals and circumstances. Instead, we seek to examine these questions through the lens of our educational values and mission. We hope to provide clarity wherever we can, and useful guideposts for further exploration, growth, and understanding where straightforward answers aren’t accessible today.

  5. In addition to the alums we asked to join our advisory group, we also had less structured discussions with dozens of current and recent Recursers about their own use (or lack thereof) of AI tools and their thoughts on them. Finally, we read voraciously, from blog posts to academic papers.

  6. While this is no doubt primarily a reflection of our wonderful community, I think it also reflects the benefits of face-to-face conversation compared to social media and online discussion forums. This could and may some day be a whole other blog post.

You can build something great

Everyone who’s ever done something great has at least two things in common: they started, and they didn’t quit when things got hard. This goes for any kind of work, including programming. If you want to build something great, you will also need to do those things. This sounds simple, but it’s far from easy.

What keeps people from starting? There are many reasons, but the biggest are not having an idea, not having time, and not believing they can do it.

Attending RC gives you time: For the six or 12 weeks you’re in batch, your life is reoriented around your own programming and growth. Working at the edge of your abilities while immersed in a group of other curious people doing the same helps generate ideas (it’s more common for people to have too many ideas than too few) and helps you see that you can do more than you think you can.

Why do people give up? There are a million reasons; when you’re doing something hard, giving up is the default outcome. It is easier to return to your status quo than to keep working when the outcome is uncertain – to say you gave it a try, and leave it there. A more useful question is, why do people ever persist? Here, there are fewer answers.

You keep working hard on things when you care about them: When the work is work that you’ve chosen for yourself and is personally meaningful. When the product or project or idea you’re trying to realize is one you desperately want to exist. This is one of the reasons why everyone at RC chooses for themselves what they want to build and learn.

You persist through challenges when you have small wins and get positive feedback along the way. This is why RC encourages learning generously by giving presentations and half-baked demos, writing checkins, pair programming, and otherwise sharing your work with the rest of your batch.

So, if you want to build something great, you need to give yourself time to do it, surround yourself with the right people, and pick something you care about.

You need to start, and then not give up.

If you’re ready to build something great, consider applying to RC.

A new kind of retreat

As of July 18, 2023, our Brooklyn hub is open to Recursers for the foreseeable future! You can attend your retreat at our Brooklyn hub, online, or any combination of the two.

We’re excited to announce that from June 26th - September 15th, we’ll be reopening our hub at 397 Bridge in Brooklyn so that you can drop in and spend as much or little of your retreat time there as you’d like.

That means that if you attend a batch happening during those dates, you’ll have the option to do your retreat online, at the hub, or any combination of the two. Apply here!

If you want to work at the hub every day of your retreat that it’s open, you can. If you’d like to drop in for a week to work with people on something specific or just check it out, that’s great, too. And if you want to attend every day online, that’s wonderful.

The hub is full of possibility, and it’s here for you to use it how you see fit. Coordinate with your study group, host mock interviews for one another, have lunch, play with the pen plotter, pair program.

A self-directed retreat, wherever you want it

397 Bridge has been closed since March of 2020 (even though, like the rest of the world, we thought we’d be open again in a few weeks). Since then all retreats have happened online, which has meant we’ve been able to welcome hundreds of Recursers who otherwise wouldn’t have been able to join us for a retreat.

Beyond making RC more accessible to more people, going online-only led to lots of other positive changes to the retreat over the last three years, including adding the self-directives, hiring Liz as an online facilitator, and being able to have a more flexible alumni attendance policy.

But there are some things that are more difficult online, and we know that while many people prefer it, it doesn’t serve everyone. Before 2020, you had to be in New York City to attend a retreat. This was better for serendipity: you could overhear people talking about an interesting project, or peek over someone’s shoulder while they worked and get involved. Socializing was spontaneous, and easier. And we had lots of cool stuff to tinker with, from pen plotters to vintage computers to Arduinos. But it is also expensive to move to New York for months to attend a retreat, and that made attending logistically impossible for some people.

As we realized it was safe to reopen 397 Bridge, and started thinking and talking to alums about how to do that well, we wanted to figure out how to offer the best of both worlds. We didn’t want to design a hybrid retreat, where we were forcing people to interact in ways that didn’t make sense. We see this as an opportunity to make the retreat work for more people than ever before.

How it will work

Retreats will still be one cohesive experience. Events that are important to the arc of the retreat (onboarding, presentations, the end of batch ceremony) will happen online so that everyone can participate.

Onboarding — our welcome talks and first-week workshops — will be condensed to two days, and will happen online. Our hub won’t be open on those first two days of the batch. This is so that everyone has the same shared experience of onboarding and getting to know each other. Friday presentations will also happen on Zoom, and there will be a dedicated space to present from in the hub if you happen to be there while they’re happening.

We’ll also have a way to register where you plan to be and check who will be where on a given day.

Schedule

Our core hours will remain the same: Monday-Friday, 11 am - 5 pm EST. And the commitment you make to the retreat remains the same, too: you should plan to attend during those hours for the duration of your batch, and RC should be your primary commitment while you’re doing a retreat.

Our hub will be open to people attending a batch starting on June 26th and ending on September 15th. Onboarding for Summer 2 will happen online on June 26th and June 27th, and onboarding for Fall 1 will happen online August 7th and 8th, and the hub won’t be open those days.

Otherwise, the hub will be open to you 24/7, as it always was to current Recursers. We’ll have facilitated hours at the hub on Tuesday-Thursday, from 11 am - 5 pm EST. Facilitated hours are when Mai and Sydney will be available to help you navigate 397 Bridge Street, find other Recursers to work with and talk to, have office hours chats, organize events, and more. When you’re at the hub you’ll also be able to attend events happening on Zoom, and use our pairing stations and equipment for hardware projects. Online, our facilitators Liz and Caroline will be around Monday-Friday hosting events, helping you find resources and collaborators, and chatting with you about your plans for your retreat.

When you confirm for Summer 2 or Fall 1, we’ll ask how much of your time you plan to spend at the hub and online — this will help us plan capacity! If you’re already confirmed for one of these batches, or are confirmed for the Summer 1 batch, we’ll reach out in the next few weeks to check in about your plans.

If you’re an alum and would like to visit the hub, we’ll have more information about alum hours soon, when we have a better sense of demand for space. We’re going to prioritize current Recursers, so we may not be as open to alums as we were pre-2020 (Virtual RC will remain open to you 24/7).

What to expect

This is an experiment for us, so we can’t say for sure what it will look like. Much of that will be determined by you, and what you decide to do at RC!

Here are a few things we do know:

  • You’ll be joining a group of self-directed, generous, kind programmers to do the work you’ve always wanted to do and have a transformative six or 12 weeks
  • The self-directives and the social rules will still guide everyone’s experience
  • You’ll have more flexibility than ever to determine how you show up for your retreat
  • RC faculty will be here to help you get the most out of your time
  • As always, you’ll be able to make RC your own by creating events and choosing what you work on each day

We’re only committing to running our retreats this way through September 15th, but we’ll be making a decision on whether to keep our hub open for future retreats in mid-July.

If having the flexibility to do so in Brooklyn and online appeals to you, apply. We hope to meet you this summer!

If you’d like to learn more about how our hub will work regarding access and safety, check out our Physical Space page. If you’d like to learn more about the online experience, read our Virtual RC page.

Nurturing a learner’s mindset: A day at RC with David Balatero

Sydney Lefevre

What do you do when you want to explore new areas of programming and deepen your knowledge, but your job takes up most of your time and energy? After working as a programmer for a decade – including stints as the first engineering hire at a startup and later as a Team Lead at Stripe – David Balatero decided to take a break to explore his music and programming interests.

He wanted to take advantage of the first break he’d had in a while to dig deeper into CS concepts, as well as to build his confidence and explore new areas of programming – things he hadn’t been able to do when he had a demanding full-time job.

We chatted at the mid-point of David’s batch about how he’s balancing music and study, and how RC provides the space and lightweight structure to help him get the most from his time off.

(as told to Sydney by David)

8:00 am: I wake up at 8 o’clock every day. Ideally, I try to exercise and practice the piano in the morning. Those are the hardest things for me to make sure I do. I use a stationary bike at home and when it’s nicer out, I bike around a lot for transport and commuting. I spend about an hour a day practicing piano, and I supplement my weekly piano lessons with YouTube videos.

I eat breakfast sometimes, but I’m more of a coffee person. I love and hate the weird feeling of drinking coffee on an empty stomach. My friend owns a coffee shop nearby and sometimes I start the day over there. Ritually, I love to go for a little walk to get a coffee and talk to the barista, but I’m trying to curb my spending habits by training myself to cook more and make coffee at home. Many days I make a French press.

10:00 am: I catch up on messages, check email, and read Zulip. I’m also in a few Slacks, so I start by clearing out the inbox a little bit before I sit down and start doing anything.

There are two things I’m doing right now at the Recurse Center. Sometimes I think man, maybe I should be doing 5 things! But I’m more of a depth person — I’m not into buffet-style learning. There are pros and cons to that, and I know I might miss something that I don’t know that I’ll love.

The first thing is that I’m pretty heavily working on data structures, algorithms, LeetCode and that kind of stuff, which is something that I’ve basically put off my entire life. Before, I would just apply for jobs that didn’t require it as part of the interview process.

The other thing I’ve been working through is a Three.js 3D graphics course called Three.js Journey. I’m still getting through the basics of shadows, lighting, shapes, meshes, and textures. I was attracted to it because I was thinking about what I know literally nothing about, and this is one of the topics that jumped out. I’ve done a lot of frontend web programming in the past, and the JavaScript piece I already knew.

I was ambiently aware of RC because I would read blog posts and the authors would mention RC in the bio on their blog or they’d talk about it in the post. I thought it was pretty cool, and it kept coming up in my vision, but before I didn’t have the time because I was working. I ran into my friend Sara, who’s in an orchestra with me and is also an alum, and she encouraged me to apply. This was the first time I’ve had time off in 10 years, so I did!

12:00 pm: I eat lunch around noon-ish since the LeetCode meetup is at 1 pm. Sometimes I go out, but usually I cook a real dinner and for lunch I’ll scrounge. Yesterday I had leftover bolognese sauce on a piece of sourdough with butter and two fried eggs, with chocolate milk.

1:00 pm: There’s a meet-up every day at 1pm ET to do LeetCode problems together and another once a week to check up on NeetCode, which I’ve been working through on my own. We’ve also been pairing up on doing mock interviews. I try to do some problems by myself so I can go at my own speed, but I also like to work with others. It’s particularly helpful on problems I’ve already done, because then I can explain as I go, which is like reinforcement learning for me. I generally try to make the LeetCode meet-up, unless I have a coffee chat or mock interview at that time.

I’m having a good time being in the zone and learning. I have goals with the stuff I chose to do here: the real goal with the interview stuff is to challenge my imposter syndrome. Once I’m in a job, I perform well, but sometimes in interviews I wish I had more confidence, and I’m excited to take on the next job search that I do with the newfound confidence that comes from preparation. I’m very optimistic about how that will go.

2:00 pm: The next lesson in Three.js Journey I’m going to do is called Haunted House, and I’m going to build some sort of haunted house scene. I haven’t had much to show for it up ‘til now because it’s been a little more conceptual (for example: how to make a cube) and now I’m getting into the fun-to-show section.

Ultimately I’ll get to make swirling galaxies, particles, and stars that you can zoom in and out on, and 3D models in Blender that are hyper realistic that you can drop into a website. I like building for the web, so this would be nice to have in my toolbox. I’d like to make my own portfolio site in 3D, like an apartment you can walk around with tons of stuff that you can interact with: a keyboard that you can play, a projector that shows videos, a window you can look out of. It’s a different medium than I usually work in when I’m doing more artistic things, and maybe I can combine it in the future with music projects I have and make weird 3D interactive experiences.

3:00 pm: When I see something I feel I can help with on Zulip, I’ll try and volunteer to pair program. Or, when someone at the Leetcode meetup mentions that they want to pair up on a problem, I’ll do that too. Yesterday I paired with someone who’s getting ready for a job interview and talked through some open questions she had.

5:00 pm: I kind of treat RC like a 9-5 job, so I usually sign off around 5pm. I have rehearsals in the evening once or twice a week and I try to cook dinner often, or go out with my partner. I’ll also work on music a bit after RC – being in bands or projects is a forcing function to get something together for a concert or a recording.

The hardest part is staying on and engaged for eight hours a day. I’ll take breaks and walk around – because I’m in my home, I can get distracted or lose focus. But, that’s how I am at work too if I’m honest!

The most surprising thing about coming to RC was remembering what unstructuredness feels like. I’d forgotten what that was like to have all day! When I last took a break in 2012, I didn’t have a plan for my time and I flopped around for a while. Being here at RC, there’s no homework, no one expecting you to turn something in, and you can do whatever you want. But, there is the expectation that you are doing something, and it’s helpful to have that framework. When I took a break before, I didn’t have that, and I got kind of lost. I didn’t want to make the same mistakes this time, and I feel like I’ve done well: I’ve been able to show up every day and do my thing.

Late night: I’ve been pretty bad about winding down, and I’ve been getting to bed pretty late. I screw around on the computer, read, or watch TV. I naturally like to stay up late, so it takes a lot of energy to change my approach even though I know it’s better for me. I like to sleep and it’s something to work on because it would make the quality of the things I do during the day better — I’d probably learn more effectively and have better recovery after exercise.

I really recommend doing a retreat at RC if you can. If you think you can’t right now, think about what you would need to have to be able to do it down the road: whether that’s time off from work or something else. RC is the perfect thing if you have a learner’s mindset. Before, I had that mindset, but after work I’d feel tired and I wouldn’t want to work on more programming, so exploration was harder. Pay attention to yourself when you’re like, “I want to learn that thing but I can’t right now!” RC being remote-friendly really reduces the barriers to attending.

RC Down Under: A day in the life of Sam Uong

Sydney Lefevre

How do you participate in RC when you’re in Australia? It’s not easy, and different Recursers have taken different approaches to it. Sam Uong lives in Melbourne and started his batch at RC in January. We spoke about halfway through his batch about what he’s working on, and how he’s shaped his days to collaborate with other Recursers as much as possible.

(as told to Sydney by Sam)

2:45 am: Before I joined RC, I committed to being awake during core hours, which start at 11am New York time. That’s 3am here in Melbourne, so I have my alarm set for 2:45 every day. I quickly get ready – wash up, brush my teeth, make a coffee, and try to be at my desk at 3.

The first week was pretty rough — it’s like flying to another city and having jet lag, except I’m at home. My approach to travel is to immediately switch to the local timezone and stick to it, so that’s what I did here, but it took somewhere about two weeks to fully adjust. Another Australian Recurser told me he had the same experience.

3:00 am: It’s still a bit too early to head right into coding, but there are a lot of messages on Zulip to catch up with. I read through everything, and I’ll ping whoever I’ve been matched up with for coffee chats and for pairing. That’s the first couple of messages I’ll send to get organized for the day.

It’s really useful to share what you’re doing with people. I try to make everyone aware of what I’m working on during daily check ins, pairing sessions with other Recursers, and through presentations and other meetings. When I have presented to others (which admittedly I don’t do often enough) I get people come to me afterwards to learn more about what I’m doing, and this also gives them some extra context for pair programming.

3:30 am: For the next hour I work on writing an assembler, which is a program that translates a list of human-readable text instructions into binary machine language that can be executed on a CPU. I just started working on this yesterday, and it’s one part of a compiler toolchain that I’m writing for “nand2tetris”, which is a project to build a functioning computer (that can run a game like Tetris) from the ground up (from NAND logic gates).

4:30 am: I have a coffee chat at 4:30. This is something that is organized automatically by the chat bot, which randomly pairs me up with other Recursers. I’ve been doing coffee chats every day since my first week, and it’s a great way to meet people and get a sense of what they’re working on and what their interests are. Today I met another person in my batch, and we talked about the game engine that he’s writing in C++.

5:30 am: Time for breakfast. Today I’m having soaked oats with blueberries and a mix of nuts and seeds – and another coffee.

6:00 am: Today is one of the more meeting-heavy days of the week, and the next meeting is with a group of other Recursers who are learning Rust. This is the programming language that I’m using for my main projects – both the assembler that I mentioned earlier, as well as a language server that I’m building for a language called Octave (the Language Server Protocol is what allows code editors like VSCode or Vim to do things like jump between functions or perform auto-completion).

This is a fairly unstructured session, and people come to show what they’ve built using Rust, share what they’ve learned, or ask questions. Today we took a look at the various string types in Rust, benchmarked the performance of each of them, and also did some experiments to measure how much overhead would be incurred with a copy-on-write string. I also had a question around some advice about efficiency in the Rust documentation, and after some benchmarking and investigation we found out that this was due to a bug in the documentation! (A pull request to fix this was sent later.)

7:00 am: For the next hour, I pair with another Recurser on a Linux kernel module. We’d spent a bit of time the other day figuring out the kernel’s build system, and during this session we’re writing some code to inspect the kernel’s page table entries. One of the things I really enjoy about RC is being able to scratch the surface of the software we use every day, and see how things are implemented underneath. I learned a lot about how page table lookups happen, and how virtual memory addresses are mapped to physical memory.

8:00 am: The last meeting of the day on Friday is the weekly presentations, where people come to demo what they’ve been working on. I had just done a presentation for my language server project a few days ago, so today I’m just going to see what others are working on.

9:00 am: 9am in Melbourne is 5pm in New York, and this is when people in US Eastern Time start to drop off. So this is usually around the time that my day shifts away from group collaboration towards doing my own thing. Today I’m working on my Octave language server for the rest of the morning.

Before I started my batch, I tried to pick a single project to focus on: this language server. But one thing that surprised me after I joined was the breadth of things to work on and learn! I’ve ended up spending time on nand2tetris, machine learning (mostly learning about Stable Diffusion and other generative AI), frontend web development, and a bit of kernel hacking. I try to be careful with how much time I dedicate to each of these areas, so there are a number of things that I’ve decided to put away and pick up again some time after I finish up my batch.

The other thing that really surprised me is the number of alums who stay engaged with the RC community after their batch is complete. In my first week, I was paired with people who did RC a year ago, and it’s incredible to have that community be an ongoing thing.

11:30 am: My wife and I go out for brunch at a local cafe, before heading off to the beach. It’s summer in the southern hemisphere at the moment and it’s going to be a warm day – about 30C/90F, so perfect beach weather. The beaches in Melbourne are inside Port Phillip Bay so it’s very calm, not huge waves. The ocean beaches are about an hour’s drive away, but the local beaches are a nice place to relax and go for a swim.

Port Phillip Bay in Melbourne

7:00 pm: It’s about 8 hours before I have to wake up again, so it’s time for bed! The sun won’t set for more than another hour, but luckily I’ve got really good curtains in my bedroom to block out the light.

The time difference has obviously been difficult, and it’s taken some effort to manage my time and stay focused. Another challenge that I’ve had is that I haven’t really been coding day-to-day for most of the last 5 or 6 years. I studied computer science at uni and worked professionally as a software engineer for a number of years, but like a lot of people I moved into more of a Tech Lead role and then into a management role. So I’m a little rusty and there are things that I haven’t kept up with, such as advances in distributed systems and machine learning, as well as languages like Rust that have recently gained in popularity.

RC has been a great way to get back up-to-speed on a lot of that. I’ve taken three months off of work to attend, so this gives me the time to focus that I didn’t have while I was busy with my day job. And it’s given me access to a lot of very talented people who have a lot of knowledge in these areas, and are motivated to keep developing as programmers, which I think is incredibly valuable.

Patricia in Paris: A day in the life of a Recurser

How do I participate in RC from a non-American timezone? This is a really common question, and the answer is: everyone approaches it a little differently. Patricia Boh lives in Paris and finished her batch at RC in early February 2023. Patricia had been working as a programmer for over a decade when she came to RC as part of a sabbatical to work on a UI component library. She spoke with me about what her typical days were like, how she used the structure of RC to support her goals, and her advice if you’re thinking of applying.

(as told to Sydney by Patricia)

7:30 am: I live in a noisy neighborhood, and the sun hits my face in the morning – and I like the sun! – so I naturally wake up early. RC activities start at the end of the afternoon for me, so mornings are a good time in my day to do solo coding.

Going into my batch, I had one big project in mind with a clear idea of where I wanted to go with it, so I focused heads down on that in the mornings.

8:30 am: I’m at my desk by 8:30 or 9, where I have coffee and check my emails. On Mondays I’ll use the morning as a focused time to read through people’s experiences, blogs, and check-ins on Zulip. Zulip (the open source chat system RC uses) has a lot of interesting content so I like to set aside time for it.

There are a lot of different projects going on at RC. Some people do very short, quick projects, and if I were to do another batch of RC I might do more small projects than I did during this batch. However, I did see other people who were hacking at one big project. Seeing other people doing that long-term work or getting one thing to a polished state was very motivating.

10:30 am: Around 10:30 I get hungry. In France, butter and ham baguette sandwiches are a staple snack, so I’ll have that or cream cheese on toast. And more coffee!

2:00 pm: At 2pm I go to UTC+-friendly check-ins. These were very important for me throughout my whole batch, and I rarely missed them. There were between 2 and 8 people who attended regularly. The Eastern time zone check-in group tends to be much bigger, so they do breakout rooms to talk. This means that you speak to different groups every day, whereas at UTC check-ins we talk in roughly the same group throughout the batch.

Either right before or right after check-ins, I have lunch. I prefer home cooking, but there are a lot of Indian restaurants nearby and so sometimes I’ll go pick up a meal which usually lasts me a couple of days. Some of my favorites are bonda, which are potato and spinach balls, dal soup, and rose lassis.

2:30 pm: I tend to go out after check-ins. RC’s Eastern Time activities start around 5pm for me, so if there’s anything else I need to do during the day I do it before then. I make myself leave the house; otherwise it’s easy for me to remain indoors, since I’m not going to work or school. It’s important that I get out in the fresh air and see people, and then get ready for the buzz of RC’s core hours starting on Zoom and in the Virtual RC space.

4:00 pm: In the afternoon, I did more social activities, like coffee chats, pairing, and attending various group meetings: Rust and Rainbows, WebGL study group, and a women’s group about tracking our cycles. Although in some groups we prepared by reading or doing exercises, these self-directed studies weren’t loaded with the performance implications of typical homework. Focusing on group topics on the days the group met helped me get into the right mindset before attending each meeting.

The flexibility to join or leave groups mid-batch was precious. I did a lot of chatting and groups in the first few weeks and this diminished a little later on as I got deeper into my project, but I tried to do at least two pairing sessions and two coffee chats every week.

I paired a lot with another Recurser named Caleb on a hardware project. I’m a total beginner on this but he’s really experienced. I was programming a small computer on my side, and he was in Australia on the other side of the planet! We made a small LED rainbow together! It’s a basic thing to do, but was exciting to me because I was totally new to it. That was part of the great pleasure: to be totally new to something and to have mentors and people who can help with it. When we’d pair around 4-5 pm my time, it was very late for him – like midnight or 1am! He switched his whole life around to do RC.

5:30 pm - 9:00 pm: The Recursers joining from the US usually eat lunch after the Eastern Time check-ins, so I’d take that opportunity to get my dinner ready. Then I’d chat with people around 7-8pm my time, and eat dinner after that.

My ideal time to pair is before 8 at night because after that I get too tired. It’s better to have enough energy for pairing since you’re with another person. I think there was once I tried to pair when I was really tired, and it wasn’t as good of an experience.

I hadn’t paired that much before I came to RC, so I struggled with my first pairing session. At work, I had developed a habit of defending my work — “defend” is the best word I can think of – and I didn’t have to do that at RC. People at work can be well-meaning, but at RC all the pressure goes away. It doesn’t have to be perfect, and we’re not trying to deliver something for a client, so the context is really different. That switch wasn’t immediate for me, and it took me a little while to adjust. I had to not be the driver at first. I saw how other people were so calm about pairing — there were other Recursers who were such natural pair programmers – and I learned a lot from them. I feel a lot more comfortable with pair programming now than I did at the beginning of the batch.

10:00 pm: One of the most compelling parts of the week is Friday presentations, since almost everyone attends. They’re from 10 - 11pm at night for me, but because it’s Friday, I still have some time to go out with my friends afterwards. The biggest shift for me is that because I was busy with RC in the evenings, my outside social life was pretty non-existent. Saturdays and Sundays were more or less the only days that I would go out.

I usually log off around 10pm every day. I almost always read in bed — I think it’s good when you leave your computer to read things on paper. I tend to read fiction, although since 2020 I’ve been reading more non-fiction related to the Black Lives Matter movement. Lately I’ve been reading How to be an Anti-Racist and The Color of Law.

There were times, especially towards the last weeks of the batch, where I wouldn’t get to sleep until 2 o’clock in the morning because I wanted to get so many things done. I don’t recommend that!

I do recommend taking advantage of all the resources RC has to offer. The retreat is self-directed, but you’re not just left alone. In the third or fourth week of the batch I hadn’t been feeling very well, and I would see what everyone else was posting about what they’d accomplished. I had to remember to be kind to myself — the facilitators reminded me to be kind to myself and not to put undue pressure on myself but instead to keep working to the best of my abilities.

If you’re thinking of applying, do it — it’s worth it! My advice is to be open to and take an interest in what other people are doing. You’re going to be working on your projects, but you’re going to be in the company of interesting people with interesting ideas and you have everything to gain from being open to or at least curious about that.

You can do more than you think: Practical principles for self-directed growth

Mai Schwartz

Our mission at the Recurse Center is to transform lives by helping people direct themselves. Becoming a better programmer is the shared purpose that structures the retreat at RC, but the idea of self-direction is broadly applicable to many pursuits in life. It’s about where your motivations come from: directing yourself means doing things that are motivated by your joy and curiosity, instead of by external pressures and fear.

It’s also really hard to do. Most of us have years of conditioning through school and work to ignore our intrinsic motivations in order to meet the expectations of others, and flipping this switch takes time and effort. A year ago, we introduced a set of guiding principles to help people with this process. They’re called the self-directives and they’re meant to help everyone who comes to RC learn a lot, build meaningful relationships, and have a transformative experience. They are:

  • Work at the edge of your abilities
  • Build your volitional muscles
  • Learn generously

This post is going to share a bit about where the self-directives came from and why, how they’ve become integrated into the retreat, their impact on RC, and some suggestions for how to put them into practice even if you’re not a programmer!

Why self-direction?

RC is built around self-direction because we believe it’s effective. When you have the freedom to explore things you’re interested in, and to explore them in the ways that make sense to you, you learn them more deeply and retain them for longer. When someone forces you to learn something that you’re not interested in, it doesn’t stick nearly as well.

More importantly, self-direction is life-affirming. When you pursue things you care about and are genuinely interested in, your work will be meaningful, fulfilling, and sometimes even transformative. And when you do meaningful work that comes from listening to and acting on your inner motivations, you start to expand your sense of possibility: of what choices are available for you to make, of what you can accomplish, and of who you can become. Often, you open up this sense of possibility for others around you too.

At RC, the shared goal of getting better at programming means that people can work together and share knowledge directly, but you could apply these principles to anything you want to do to learn and grow. Even if you’re working on your own, there are many ways for you to work at the edge of your abilities, build your volitional muscles, and learn generously.

Creating the self-directives

One of our main priorities for 2022 was to improve the quality of the retreat. Our goal was easy to state and hard in every other way: to make it so every person who comes to RC has a transformative experience.

Some percentage of people have always had life-changing experiences at RC, which we know because they tell us – either directly or in public-facing content like blogs, YouTube videos, and social media (here are just a few recent examples). We wanted to increase that percentage to 100%. Obviously, that’s ambitious. If it’s possible, it’s not exactly knowable, and certainly not on a definite time frame (for one thing, because the true value of an experience isn’t always clear until years later). But we felt confident that with some work we could dramatically increase the chances of people having transformative experiences at RC.

To do that, we looked at Recursers who by their own accounts had the most transformative experiences during their retreats. Though success at RC looks different for everyone, we looked for common threads in what those Recursers did: not the specific projects they worked on, but how they approached their batches, the challenges they confronted, and, most importantly, the strategies they used to move through those struggles. Because the retreat has always been self-directed and community driven, what we tried to do is crystallize as succinctly and evocatively as possible ideas that were already implicit at RC.

Fun fact

‘Work at the edge of your abilities’ was inspired by my experience powerlifting using RPE, or rate of perceived exertion. It’s a way of subjectively measuring the intensity of the work you’re doing (for example, a weight that felt easy last week might feel hard this week if you haven’t slept or eaten as well). Importantly, it requires you to really listen to your body and learn to accurately assess your own capacity, both when to dial back and when to reach for more. We thought this was a generative metaphor for intellectual and creative work as well: on a low day, it’s better to do what you can than to beat yourself up for failing to meet some hypothetical level of productivity that was never actually in reach, and on good days you can push yourself and really get to know the difference between what is impossible and what is just really, really hard.

We felt that we’d know the self-directives were a success if and when Recursers started reflecting them back to us. That happened almost immediately, which was surprising; people started incorporating reflections on how well they were practicing the self-directives into their check-ins, and booked office hours with us to talk about how to do them more. Today the self-directives feel like an organic and inevitable part of RC, but if they feel like they’ve always been there, it’s because they were. They resonate with Recursers because we drew them out of RC. We just named them, and have put a lot of work over the past year into weaving them into the retreat in ways that will help people put them into practice.

Fun fact

We weren’t that happy with the phrase ‘build your volitional muscles.’ We thought it was less intuitive than ‘work at the edge of your abilities’ and less evocative than ‘learn generously.’ We wanted to capture something like Marie Kondo’s ‘spark joy,’ but after trying on a bunch of alternatives (‘swol mind,’ anyone?), we decided to put a pin in it while we kept thinking. We’re still thinking but it seems to have stuck! The original inspiration for the phrase ‘build your volitional muscles’ was a post by RC alum Michael Nielsen, where he describes this as a process of ‘growing one’s sense of choice, and of responsibility for choice.’

Integrating the self-directives into the retreat

Once we settled on those three self-directives, we had to figure out how to integrate them into the day-to-day experience of RC. We wanted to avoid falling into the trap of trying to codify culture, where principles – no matter how genuinely held – in practice end up as little more than posters on the wall.

The first changes we made were to admissions and on-boarding, because those are unique opportunities we have to prime people’s expectations before they even come through the door (or Zoom room). We changed one of our admissions criteria from ’wants to get dramatically better’ to ‘ready to work at the edge of their abilities’ and had generative feedback sessions with our alumni interviewers about what that means and how to evaluate it in interviews.

We rewrote our welcome talks for the first day of the batch to focus on the self-directives, and then redesigned the whole on-boarding process to help Recursers start putting them into practice right away. We now host events in each of the first three weeks of the batch to support this goal: a pairing workshop, a building your volitional muscles reflection event aimed at prioritizing projects based on your intrinsic motivations, and an Impossible Stuff Day, where the idea is to find the edge of your abilities by grossly overshooting it.

But we also wanted to help people with the challenges that come up later in the retreat, when the first week shine has worn off and they’re facing deeper challenges in their work. Over the summer, one of our goals was to come up with a list of concrete practices we could recommend to any Recurser to help them do the self-directives. At that point, one could still reasonably read our material about the self-directives and think, yes, I’d like to do that, but how? We wanted to identify things people could decide to do on any given day at RC that would move them in that direction.

We’ve always strongly recommended pair programming, and we wanted other concrete activities we could recommend with the level of confidence we’ve gained from a decade of witnessing the impact of pairing. To do that, we looked at data we already had (for example, time spent in the RC Zoom rooms that are dedicated to pairing) and interviewed Recursers about what did and didn’t work for them in their batches. The recommendations we came up with were:

  • Choose a public accountability mechanism and commit to it.
  • Do one challenging thing, then do another.
  • Create the context you need to do good work.
  • Say no to something.

As you can tell, none of these is specific to programming. If the self-directives are a distillation of the educational philosophy of RC, these recommendations are more concrete but they still require self-direction to work. They’re ‘universal’ in the sense that each person has to figure out how to practice them in their own way, in service of their particular goals, at whatever level of experience they currently have.

Your public accountability mechanism could be a blog, a group you check in with IRL or online, or just regularly talking to a friend about what you’re working on. The context you need to do good work could be a dedicated workspace, a more comfortable chair, one extra afternoon of childcare per week. Reflect on what’s been instrumental to your growth in the past and what you need right now, and then experiment with different approaches. This will naturally shift over time, so it’s helpful to check in with yourself regularly as your goals and needs change.

Fun fact

Another thing we did over the summer is give ourselves a taste of our own medicine by each doing a retreat week and trying a couple of the recommendations we came up with to see how they impacted our experiences. Every RC faculty working on the retreat at that time participated: Rachel practiced oil painting, James composed electronic music, Dave made programming sketches, and I made a pair of shorts, my first time sewing a real garment.

I was so anxious to finish the shorts during that week that I found myself getting to work early and staying late, even though I kept reminding myself that the point was to learn and I could always complete them after the retreat week was over. This is something I often say to Recursers who are stressing about getting their projects to some final, presentable state. While I stand by the value of not holding yourself to arbitrary deadlines, I felt that I learned something new about the emotional experience of really wanting to do a specific thing and struggling to catch your abilities up to your vision.

oil painting of clouds by Rachel Petacat paginated UI with color gradient by Dave Albert turquoise linen shorts by Mai Schwartz

We later discovered that the three self-directives align with the three basic psychological needs described by self-determination theory: autonomy (build your volitional muscles), competence (work at the edge of your abilities), and relatedness (learn generously). These principles help us have deeper conversations with Recursers from the very beginning of their time in batch, because we now have a shared vocabulary for the bigger questions and struggles that people confront at RC.

These are questions and struggles that people face in many areas of their lives, and there’s something powerful about naming that explicitly, in a space where everyone is actively working to do this and to support each other in it as well. There’s a momentum that’s created by people trusting their own ideas enough to give them the time and energy they need to develop, being vulnerable and taking risks in their work without the expectation of being ‘productive’ in the traditional sense.

It can also be incredibly challenging, and the self-directives are meant to help you face these challenges with a little more depth than an injunction to knuckle down and write more lines of code. They’re not a rubric or a checklist, and no one can do them for you. We’re still learning about how to put these principles into practice, as an institution and as individuals, and the past year has been a rich one for experimenting together. We hope these reflections can be useful to you in the areas of your life where you feel that desire to learn and grow!

Surprise and self-discovery: Victoria and Jordan’s sabbaticals at RC

Sydney Lefevre

Having established that you don’t need to abscond to a faraway beach to take a break to explore your interests, you might wonder: Who really comes to RC on a sabbatical? What do they do when they’re here? And, what happens after: how do you keep growing when you already have years of experience under your belt? I spoke with two alums who came to RC for a professional break about what they wanted out of RC, how their batch actually unfolded, and the impact it’s had on their lives since then.

Applying to RC: How it started

Victoria Kirst came to RC in 2017. She‘d been teaching at Stanford after working as an engineer at Google for a few years, and she wasn’t sure if she wanted to keep teaching or go back to programming full-time. The school year kept her too busy to take time to think and explore her options, so her summer break was an opportunity to step back and reflect. When she applied to RC, she wrote:

“I would love to spend my summer learning and growing as a programmer. I love coding and building things, but in the past, I’ve limited the scope of my projects (outside of work) to simple projects that I can code quickly. This summer, I’d love to tackle something more ambitious using tech I’ve never used before. The Recurse Center seems like an ideal environment in which I could push myself to create cool things and stretch my technical skills.”

Jordan Killpack came to RC in early 2022. At the time, she was working as a Staff Engineer at Mailchimp and was feeling adrift. She knew she wanted to have a bigger impact at work, which didn’t seem feasible after Mailchimp was acquired by a much larger company. After taking a couple of months off on her own, she realized she needed more structure. She’d heard about RC through her network, but it never made sense to uproot her life to move to New York for three months. Since RC started offering remote batches, she said, “the stars aligned for me.” In her application, she explained:

“I want to rekindle my love of programming. My most recent job involved a massive, creaky code base that struck fear in the hearts of many of my coworkers. Working on it greatly sapped my enthusiasm. (That said, I did find joy in solving mysteries in the code base– What is this doing? How long has it been doing that? Did we mean for it do this at all?– and in deleting vast swaths of superstitious code.)
I want to take some time to learn things just for the heck of it, in ways I can’t when I have a problem someone’s paying me to solve. I think the combination of this and being around other ravenously curious people will help reignite my spark.

Coming to RC: Space to explore your interests

I caught up with Victoria and Jordan recently to chat about how their time at RC impacted their lives. They walked me through what they did during their batches, and what they learned from the experience.

When Jordan came to RC, she thought she might work with Elixir, and “had some ideas about doing things to facilitate whatever vague career move I wanted to make.” But she said she changed direction quickly. “The first week, the faculty were like, ‘do what is exciting to you instead of what you think you should be doing!’”

Jordan took this advice to heart and applied it over the course of her time at RC. “I started by trying to connect other interests I had that were not related to computers — for example, I thought it would be cool to make a tool to help me plan weaving projects. I dropped that pretty quickly when it became more of a design problem than a technology problem and it felt like I’d gotten as much juice as I wanted out of that.”

She worked on security hacking challenges, which felt like fun puzzles, and later built an operating system in Rust since she didn’t have experience with operating systems and wanted to tackle a meaty project. Everything she worked on was new to her, and none of it was what she expected to do coming in.

Victoria also found RC to be a time of surprise and self-discovery. She said she had a “classic” RC experience: “I did have something specific in mind and then completely changed what I actually did. Originally I thought I should learn about machine learning and AI. But one of the things I got the most out of at RC is that when I was in that space of choosing what I wanted to do, I found myself being drawn to very different things.” During her batch, Victoria ended up exploring generative art and building a multiplayer game, which helped her learn more about real-time communication and exposed her to technologies she hadn’t used before.

In addition to new technical challenges, Victoria shared that “the entire summer was a surprise. With more space, a lot of things became clear. I assumed that I wasn’t that interested in building stuff when I became a teacher, but at RC I realized it was other factors that had gotten me super down. Microaggressions and sexism affected me and made me think I didn’t like the field. But, in a supportive environment where I was able to build things that were fulfilling to me, I realized I really loved building stuff in a really wonderful way.

After RC: How it’s going

The time and space to follow their interests at RC and make decisions about their own work further empowered Victoria and Jordan to make positive changes in their careers. After their batches, both of them found new jobs: Jordan joined a much smaller company where she could have the impact she wanted, and Victoria left her job at Stanford to return to software engineering full-time.

Victoria said, “I’d done so much reflection in a supportive environment. I didn’t know I needed it, and I didn’t realize this environment would be so conducive to that.” She realized something at RC that has helped her build her career with more intention. “One of the main theses that I have is that I care a lot about what I’m doing and why. If I am in an environment or project that’s not a fit for me, that hugely affects my happiness. My career arc has been an iterative process of trying to find what I want to do with my career, life, and technology.

Since her time at RC, she’s worked at Google on a virtual reality project and in a leadership role at Glitch, and she now works at The Browser Company as an engineer. She decided to shift to an IC role because “in some ways, I wanted an ‘RC moment’ to take a step back again and try working on something engaging while also giving myself space to do self-discovery and make time for creative outlets.”

Jordan took a job at Oso, an authorization-as-a-service platform. She said that her time at RC helped her think about the kind of role and environment she wanted to be in next. “Paying attention to what it is that you want, versus what you think you should want — or what somebody else wants you to do — led me to the company I’m working for now. Upon reflection, I wanted a place that was small, where I could have a big direct impact and get my hands dirty doing a bunch of different kinds of things. And that’s definitely been the case. Remembering that I have agency in the world was a big takeaway from RC.”

Victoria and Jordan came to RC years apart, but walked away with something similar: a renewed and powerful sense of agency. Giving yourself the space the follow your curiosity and investigate the how and why of your work can positively impact every aspect of your life.

Thank you to both Victoria and Jordan for taking the time to share their experiences! If you enjoyed reading about their journeys, and want to take some time at RC to explore your own interests, I hope you consider applying to one of our upcoming batches.

Sabbaticals for the rest of us

Mai Schwartz

The word “sabbatical” often evokes either a professor deep in a distant dusty archive or someone relaxing on a beautiful beach. But while in theory you could throw your phone in the trash, get bangs, and move to Bali, most of us can’t just walk away from our lives. Dropping everything to do self-exploration isn’t realistic, affordable, or even attractive to most people, but you don’t need to sever ties or renounce society to take a sabbatical. You don’t even necessarily have to leave your house.

A sabbatical is really just a period of time you set aside to explore new ideas without being beholden to a specific outcome. It’s not a vacation or a cure for burnout (although it can help you clarify why you’re burned out), and you don’t need to have an existential crisis to qualify. Maybe you’ve maxed out the learning and growing you can do at your job, or maybe a side project is outgrowing the free time you have for it. Maybe you lost your job in a reorg or layoff, and you’re not quite ready to look for another one. A sabbatical can be a time to explore at your own pace and think about what you’d like to do going forward.

This post is about how to think through whether a sabbatical is right for you, when you should take one, and what taking your sabbatical at RC can offer you.

To state our biases upfront: we think that anyone can benefit from a sabbatical and that if you’re a programmer RC is a particularly good place to do it.

Why would you take a sabbatical?

You might associate sabbaticals with tenured professors or senior executives, but anyone can take one and there’s no minimum level of experience or salary at which you suddenly deserve it. You also don’t need to have a world-changing idea. A sabbatical is a chance for you take the time for yourself to explore what’s fun and interesting to you. Give yourself permission to follow your curiosity, even if it’s not clear where it will lead.

Taking a break from paid work to take a sabbatical may seem like a luxury, but it’s actually an investment: in yourself and your knowledge and skills, and also in your very capacity to learn on your own. At RC, we call your ability to direct yourself your volitional muscles and we think growing them is one of the most valuable things you can do.

Building your volitional muscles means following your own intrinsic motivations, rather than external pressures or fears. It means doing the work that excites you, rather than the work you must force yourself to do. It means asking yourself what do I really want to do? and then doing that. Making those decisions for yourself is a skill that gets easier with practice.

Taking a break to do this kind of intentional reflection is valuable not just for programming, but also for thinking about your life more broadly. A sabbatical can help you rediscover what you deeply care about, independent of what your family, financial necessity, or society at large might pressure you to do. A sabbatical can expand your idea of what’s possible and of what choices are in your power to make.

When and how should you take a sabbatical?

You can take a sabbatical wherever you are, whenever you’re ready. Maybe you’re an IC with a passion project, or a manager who wants to dive back into the nitty gritty. Maybe your job has sapped your enthusiasm, and you’re ready to reignite your love of programming and learn things that no one wants to pay you for. It might be time to take a sabbatical if:

  • you’ve taken advantage of all the opportunities to learn and grow in your current role, and you’re still hungry for more challenges
  • you want to write software where the architecture, language, tradeoffs, and more are determined by your curiosity, not their business value
  • you want to learn or build things for the fun of it
  • you have a side project you’re so excited about that it keeps taking up more of your time and attention, and your loved ones have been complaining that you spend too much of your spare time programming…

There’s no one way to take a sabbatical. Logistical considerations vary a lot and are addressed in our FAQ and User’s Manual. If you’re ready to take a sabbatical but you’re not sure what exactly your sabbatical should look like, that’s okay! Start thinking about something you’re interested in learning or building, and don’t discount the importance of it. You can act as though your ideas matter before you fully believe it.

When I first started working as a facilitator at RC, I thought most people needed help going easier on themselves. I’ve come to believe it’s the opposite: people underestimate themselves and need encouragement to take their own work and ideas seriously. I still regularly remind Recursers to be kind to themselves, but now I also say that one of the most important ways to be kind to yourself is to not sell yourself short.

Think about what conditions your ideas need to grow, and cultivate those conditions around you. This generally means devoting some combination of time, energy, and attention to them. It can also mean changing your environment to support your work or investing money in relevant tools, but it doesn’t have to. And at some point, it’ll likely mean sharing your work with other people.

Why sabbatical at RC?

As RC alum Allie Jones said: “The thing RC kind of teaches you is that you can figure anything out, given enough time.” At RC, you have the time, space, and support not only to dive deep into concepts you thought were beyond you, but also the freedom to figure out what you actually care about and what you can say no to in order to focus on it. It’s an open invitation to do the best work of your life, in a community of others doing the same thing.

RC provides lightweight structure and dedicated time and space to work on your projects without external pressures or deadlines. Doing your sabbatical at RC also means you’re not alone. You’ll be surrounded by kind, curious programmers who are all choosing to push themselves to grow, and you’ll have the support of a community with a high degree of intellectual ambition and a high degree of psychological safety — many environments have one or the other, but not both.

What’s your biggest programming dream? What’s the project that’s been itching at the back of your mind and won’t let you go? What’s the most ambitious thing you would learn or build if you really had time to focus on it? Tell us about it when you’re ready to apply!

Jimmy Li: Law School to Software Engineering to Tech Lead

Sydney Lefevre

This is a continuation of our series exploring the paths that Recursers take to RC, what they do during their batch, and what happens after.

Jimmy came to RC for the first time in 2011, and for a second time in 2013. He currently works as a Technical Lead Manager at Google.

Jimmy Li

Here is Jimmy’s story:

Before RC

I took one programming class in college - I enjoyed it, but for various reasons was discouraged from doing any more than just one class. I don’t really count that as the beginning though; the beginning was in the summer of 2011, right when I was in between the first and second years of law school. My law school classmate and I had a start-up idea that we got overly excited about, and we couldn’t find anyone who was willing to help us code a prototype. I remembered enjoying programming back in college, so I said, “Let me see if I can learn enough to cobble something together,” and so I started coding that summer.

Pretty soon, I became less interested in the start-up idea and more interested in the coding itself. I was on a legal internship that summer and I found that most of the day I would just spend coding rather than doing my job. I went back to law school for the Fall of my second year, and I continued to ignore what I was supposed to do and instead coded on stuff, and I guess a small part of my brain was thinking, “Maybe I should do this for a living,” but I wasn’t sure how that would work out.

Very serendipitously, I went to a YCombinator event in New York, and Hacker School (as RC was then called) was there. I went to that event to ostensibly pitch the idea that my friend and I had. But, I was already giving up on that idea so instead I went around asking if folks needed volunteer coding help. I realized I could only go so far programming by myself in the law school library, surrounded by people who had no interest in this stuff. I needed some sort of community, I needed to be in a group that cared about programming. So, my thought was to try and be a volunteer coder because I wasn’t good enough to be paid. Eventually, a couple of different folks asked if I’d spoken to the people from Hacker School.

I still remember the conversation really well. Nick and Dave were like, “Wow, you seem really enthusiastic” — and I was. They were, in a very generous way, willing to give me a chance even though I hadn’t gone through the application and interview process. This was the day before the second batch was about to start. They said, “Come to the Spotify office tomorrow, and if there’s a physical seat for you, you’re in!”

During RC

It was a whirlwind three months because I was in law school at Yale at the same time, and I ended up taking Metro North three days a week. At the time, RC was Monday, Tuesday, Thursday, and Saturday, so I’d take the train up Monday, crash on a friend’s couch in NYC Monday night, come back Thursday, and come back Saturday. I took that train a lot — two hours both ways. It was definitely one of the most thrilling three month periods of my life, without question. I’d continue coding or reading books like The Little Schemer on the train.

In addition to the amazing amount of programming that I learned from people in this atmosphere of curiosity and passion, this desire to learn and this inquisitiveness was ignited in me in a way that it never had been before.

In my first batch, I focused on one project for 80% of my time there. The project was an improved course selection site for my law school classmates. Basically, when students at my law school picked classes it was very painful, and if you wanted to figure out what classes would fit into an open block on a Thursday, you had to do CTRL-F for capital T, lowercase h for Thursday. This was a problem I could help fix, so I learned how to scrape the data, put it into a database, set up the frontend with the ability to search and sort and filter – basically I built this full-stack web application. One of the many things that got me into programming professionally, in addition to loving the actual practice of programming, was that I picked this nice starter project: I was able to launch this to my classmates and they loved it! It was awesome to sit in a law school classroom and see my classmates using it on their laptops in the desks in front of me. I’d never felt like I’d provided value for people in such a clear manner, and that was pretty exhilarating.

Talking to all the other Recursers and people like Nick and Sonali, I realized that it wasn’t too late for me to try to get into programming. At that time, I didn’t have many examples of folks who were self-taught and didn’t have a CS degree, and talking with the folks at RC was definitely eye-opening. I also changed my overall philosophy about learning. Before that, I’d given way too much weight to learning in a formal classroom setting.

I feel like there are so many advantages to learning on your own — not only is it possible, but in many ways it’s better. I think this helped set off a lifelong practice of learning.

After his first batch

After my first batch, I did the interview circuit guided by RC, and also did some interviews outside of what RC set up for me, and I ended up taking an apprenticeship with Pivotal Labs that converted into a full-time job. I went to SF to do that, and then I got a job offer from Codecademy, and decided to take that since I was a big believer in people learning how to code. I worked at Codecademy as one of the early engineers for a little over a year, and then right after that I went back to RC.

I was at another transition point in my life where I decided I was going to finish my last year of law school, and I wanted to tap into that feeling of why I love coding. Working as a coder brought to my attention that there are aspects of the professional practice that don’t quite have the Disneyland quality of RC. Something that continued to be hard for me as a coder was the aspect of coding that involves reading the manual and figuring out how some of the details work. I enjoy thinking about stuff at a conceptual level and problem solving, but I hate setting up IKEA furniture. That didn’t really get much better for me — it continued to be a problem!

During his second batch at RC

When I went back to RC, it was a bigger group. It was like 40 or 50 people instead of 10 or 12 people; it was harder to get to know everyone, but it was a nice group and I was able to forge great connections as well, despite the size.

I also approached it differently in terms of what I spent my time on. I spent my time learning a broader array of things instead of working on one large project. I did a handful of smaller things - I built a JavaScript game, I built a simulation of Conway’s Game of Life and worked through SICP. My mindset was also different: the first time around I had such a clear goal of getting decent at programming, and the second time around I wasn’t sure what I wanted out of it. But, I did succeed at reigniting some of that love of learning.

After his second batch

After that, I went back to law school to finish my last year. I kept programming and I ended up taking a job in DC working for an analytics company called Blue Labs that helps Democrats. It occurred to me that programming is about a lot of things in addition to the things I love. The things I love are problem solving and learning how things work — the kind of things you get in classrooms and you talk a lot about at RC. When you’re a professional, it also involves meetings, and again, reading the manual on some other person’s code and learning how to use it. I was thinking, do I have the temperament, the patience, the attention to detail to be a programmer for the next 40 years? I started to doubt that, and I thought being a product manager would be a sweet spot for me where I’d still be in tech and get to talk to programmers, and help solve problems. I gave that a try, and was a product manager in a medium-sized company, but there wasn’t as much problem solving as I thought.

I decided I’d have the courage to go back into programming, get better at the aspects I didn’t think I was good at, and understand that as a whole, programming is still the best job given my interests and skills. I recommitted, with my wife’s help, and we decided to move to California. I did the interview circuit, and decided to work at Google and have been there since 2017. I started working as a frontend engineer on the Chat team, and then two years in I switched to the Health part of Google. I worked full-stack, and then in the last year and a half I’ve been a Technical Lead Manager, and I lead a small team and have a small number of people report to me.

To keep learning, I read, I watch YouTube videos, and talk with coworkers, and we have a weekly meeting where we share something that we learned recently that we think is cool. I occasionally do a Coursera course, or follow resources from Bradfield School of Computer Science.

RC is such a special place of learning and curiosity. It’s better than most of the formal educational institutions I was a part of. In those places, even with the quality of instructors and the research caliber, that spirit of wanting to learn and figuring stuff out on your own, and taking your learning by the horns, I never found that anywhere else. It’s a very intoxicating feeling and group to be a part of, and I’ve tried to chase some version of that ever since.

View older blog posts...