RC return statement

Thu 20 October 2016

There's these one-day hackathons I go to once in a while. They're called BLT for Build, Learn, Teach. They're not like traditional hackathons with a theme or specific things to build. People come in in the morning and we have a group meeting where everyone shares what they're interested in or want to work on, then we form groups and pair or work on our own stuff. At the end of the day, people share what they did. Sometimes they built something cool, sometimes they just spent their day talking random programming stuff or learning about one thing or the other, and that's cool as well.

When I applied to the Recurse Center, this is how I pictured it. The same kind of experience, but over 3 months instead of a single day.

The premise of RC is pretty simple: you devote 3 months to becoming a better programmer—whatever that entails is entirely up to you. You don't have to be an experienced programmer to attend. In my batch, some people hadn't finished college. Others had 5-10 years of industry experience. Some were people reconverting from law, finance or arts.

I first heard of the program in an Hacker News headline, 18 months or so ago (the Recurse Center was still known as Hacker School back then). Though the concept immediately appealed to me (3 months to finally finish all of the projects I'm always putting off, right?), it took a year (and a complete burn out) for me to finally apply. Why so long? A mix of brain crack and impostor syndrome. The latter isn't uncommon among Recursers—it even gets mentioned in RC's user manual.

During the application process, I talked about spending my batch contributing to open source software, and geeking around with Haskell and Rust or whatnot. Turns out this was superceded by (or maybe just related to?) a bigger goal, unbeknownst to me: self-healing.

I've started programming when I was in high school (coding games in TI-BASIC on my calculator) and when it came time to choose a career, I thought that if I was going to spend 8 hours a day getting paid to do something, I might as well be enjoying it. Makes sense, right? Except it turns out when you're not careful, full-time jobs have a tendency to suck the fun out of anything, even what you thought was your passion.

So here I was: after finally applying, and being accepted into a program dedicated to making myself a better programmer, one of the first questions I had to answer when joining RC was whether I still enjoyed being a programmer.

(Spoiler alert: I do)

For me, the Recurse Center meant having the time and freedom to code for myself, with no constraints whatsoever. But also (after 5 years as a full-time engineer) the freedom to not code when I didn't want to.

This meant I spent most of my first week helping people and pairing on their own projects, or on Hackerrank or Project Euler problems (people pair a lot at RC). I didn't write code on my own, and it felt good.

And then I attended some workshops, and I got some ideas for things I could build. I started a silly project combining some Javascript rendering with a Flask backend to generate random drawings using a genetic algorithm. I started organising weekly code dojos, where people paired on katas using any language they felt like trying. I got curious about Elm, and ended up building a game with it. And then paired on another one. And yet another one. By the end of my batch, I gave a workshop on building web applications and games in Elm, a language I barely knew before.

So, when people ask me what I did at the Recurse Center, I can point them to those projects. But while there's something gratifying about having built some tangible things I can show, I don't want to reduce my experience to just those. Doing so would not only diminish but also run counter to some of the lessons I learnt at RC.

I learnt there's tremendous value in reinventing the wheel. That not everything you build needs to have a purpose other than "I thought this would be fun to do". Building your own Bittorent client, or web server, or OS, or database, might be the best way to really understand how those things work.

I also learnt I have things to teach, and that I love doing so. I realised that past a stage, there's no fixed hierarchy of teaching: everyone has things to teach and things to learn. Admittedly, this is especially true in an environment such as RC, where there aren't really teachers or students, and where you learn from your peers.

I learnt that there are just too many things I want to learn, and I can't pursue them all, even when I can dedicate 100% of my time to do so. This doesn't mean I can't enjoy learning the things I want to. It does mean I don't have to feel guilty about not spending my time learning all the things I'd like to. I shouldn't punish myself for being overly curious.

Most importantly I learnt that programmers come in all shapes and forms. Some of us like to understand how computers work in their inner details, others like higher-level abstractions. Some of us like code as a craft, others like to use code to get shit done. Some are great at building things, others are great at teaching. And that's awesome. Because there's a need for all of us. And none of us can be all of those things at the same time. We all have out strengths and weaknesses, and pockets of knowledge, with gaps here and there.

This might sound obvious, but it's so easy to idealise and extrapolate from the few famous programmers who seem to know everything and get so many things done, and compare yourself to them. What's invisible is all the things they fail at or don't know about, like any of us, or the times they're frustrated and want to give up or don't feel like programming anymore.

So don't guilt yourself if you're not the best at systems programming, data structures, or if you don't know FP or Haskell when all the cool kids are talking about it. Or if you don't have a blog when you're not the kind of person who wants to share their thoughts to the entire world. Or if you don't feel like coding on your free time. Don't guilt yourself if you're struggling to become a better programmer, because it's tough. Or even if you don't want to become a better programmer and want to pursue other passions. That's perfectly fine. Do whatever makes you happy.

(I'm writing all of those lessons down because I know I'll forget about them from time to time)

If there's one thing I underestimated, it's how much the Recurse Center was (at least for me) a social experience.

My best moments were all spent sharing my passion for coding with other people. All the pair programming sessions. The workshops spontaneously organised by Recursers. The time we spent hacking hardware or organising group pomodoros. Or that time Justin organised non-technical lightning talks were everyone could present on a topic they were passionate about as long as it wasn't programming—and people talked about bird watching, genetics, how to cook the perfect tortilla, typography, or even how to flirt!

Being immersed in an environment where everyone around you is having fun building and learning things is an incredible motivational boost. On top of that, RC is one of the few places in the tech community where negativity and toxicity are absent. RCers are always encouraging and enthusiastic about what you're doing, and showing genuine interest. Mistakes are seen not as flaws but as opportunities to learn and grow. People see the best version of yourself, and in return, you want to be that person.

So yeah. Those three months have been amazing. I've built friendships. I've learnt a ton, about programming, about other things, about myself. So long Recurse Center, and see you soon. Never graduate!