Home

About

Blog

Projects

Recurse Center: Return Statement

There is a tradition wherein Recurse Center (RC) alumni write what is called a "Return Statement" to capture their thoughts and feelings on their time in batch at RC. I've been struggling to write this, partially because my thoughts are a bit scattered and the feels are all over the place of late. So with a strong coffee at hand and a rainy afternoon we'll finally take a stab at it.

Over 12 weeks, I discovered that the best learning happens when you're comfortable with being uncomfortable, whether that's diving deep into systems programming, wrestling with C for the first time on a complex project, or pivoting completely to creative coding when you need a mental reset. My journey at RC taught me that rigid plans matter less than staying curious, following what energizes you, and having a supportive group of folks around you. My batch became less about checking off a predetermined list of goals and more about following curiosity wherever it led, surrounded by incredibly kind and brilliant people who made challenges feel conquerable.

---

When I started RC[1], I had many ideas[2] about what I wanted to work on during my 12 week batch. This starting list of goals didn't hold up that well in reality. Those were things like:

- **Write more on this blog:** I didn't end up blogging more, like I wanted, but that was mostly due to feeling too mentally tired to write more after full days of working on code/projects.

- **Build a mini-operating system:** I made it through almost the whole book of OS in 1000 Lines. It was a great experience with writing code and understanding how the OS works!

- **Algorithm problems with CSES:** I started an Algorithms Appreciators group with a few other fellow RCers. We'd meet weekly to discuss the algorithm picked (by my Hare CSES random picker[3]). It was a great exercise and I was amazed at how my fellow batchmates could think through and approach programming problems. I ended up doing that for about 6 weeks before letting go to focus on other things.

- **Performance Engineering (MIT 6.172):** Lastly, the Performance Engineering course was super interesting and challenging and yielded a better understanding of C program profiling, memory leak detection, and optimization. I dropped this after a few weeks because I wanted to spend my time in batch writing more code and working on projects, rather than watching lectures and doing exercises.

Cool Shit I Worked On

Learned New Language

The Algorithms Appreciators group I had started needed a way to pick a new algorithm problem from the CSES Problemset, at random, to work on each week. I decided on the spur of the moment to use this as an opportunity to quickly learn a new language for this simple programming task. I ended up choosing the Hare programming language after learning that Drew DeVault had created it with the desire to make it into a 100 year language. It was a fun couple days grokking the language and throwing together a picker in time for the first weekly meeting.

UwU

Every few weeks there's a batch event called "Impossible Day" wherein you're supposed to try and work on something that's far outside your current abilities. I chose to try and make a simple text editor for this. My thinking was that it would be a great way to understand how text editors work, how the terminal/pseudoterminals interact, and how UI display worked. It seemed (correctly!) like a pretty impossible task. It was also the first project in C that I'd ever attempted that was larger and more complex. By the end of Impossible Day, I only had a program that partially painted a few lines of the screen with a with `:3` (I still hadn't figured out a good way to get screen row counts yet) and could be exited with `ctrl-q`.

I was hooked though and would keep working on this little editor, code name "uwu", for the rest of the batch. The breakthrough moment with handling all the terminal's rows, came when I finally figured out how to interact with ioctl and to use ANSI escape sequences. Suddenly my little editor could paint all the rows of the screen. 🔥 With this project, I got to wrestle with concepts like terminal escapes, screen refreshing, multiple file buffers, reading real-time user input, and efficient undo/redo capabilities. It's my hope to turn this cute, little editor into my daily driver.

Cellular Particle Life

Towards the 9th week of my batch I was in a bit of a rut. The first half of the batch had been largely occupied by working on solving algorithm problems, building a mini-OS in C/RISC-V, and working on UwU. I was feeling a bit burned out and struggling to figure out what to work on next. On a whim I popped into the "Creative Coding" group's weekly meeting. The idea of creative coding was a prompt and code up something fun, creative, in line with the prompt. I ended up pairing with an RCer who showed me p5.js[4]. It was a JavaScript library that let you build shapes, art, and has some basic physics capabilities as well. The perfect platform to let your creativity run free!

I ended up taking inspiration from the concept of "Particle Life" and expanding upon it to become a petri dish with biological cells. I attempted to capture how the cells grow, divide, die, and interact with one another and their environment. It evolved to different cellular organisms co-existing and competing for consumption of glucose for their "fuel". Cells could become cancerous and certain cells (like the Macrophages) could consume other cells (Bacterium).

This project was exactly the creative reset I needed. After weeks of wrestling with low-level systems programming, there was something deeply satisfying about watching colorful cells wriggle around and chase each other across the screen, each following simple rules that created emergent complexity. It reminded me why I fell in love with programming in the first place, from the joy of creating something from just code.

Some Thoughts & Feelings

RC challenged me in the best possible way. Working at the edge of your abilities is always a challenge! I remember one particular afternoon, working on debugging a particularly stubborn bug in my text editor with deleting and backspacing character. I was frustrated and ready to give up on it for that day to switch to something else. I ended up pairing with another RCer. Not only did we solve the bug together, but they reminded me about using gdb to more effectively debug my C code (something I always seem to forget to do). That moment captured what made RC special for me, being surrounded by people who genuinely wanted to see you succeed and grow.

It was the first time I was able to be around so many kind and smart people who were all there to become better at their craft. It was a wonderful environment with a set of social rules[5] that make it a great place. RC was one of the few times I've felt comfortable just being myself without fear of discrimination, of asking "dumb" questions, admitting when I was confused, celebrating small victories, and getting to explore without judgment. I could geek out about operating systems with one person, then switch to discussing programming languages with another, all while feeling genuinely heard and valued.

Coming back to the "real world" again after RC makes me realize what I lost. It makes me want to find a job in NYC just to be closer to the Hub and all the great people and events. ☺️ It's been a life-changing experience for me having the time and space to explore things that I found interesting. I hope to be back for another batch or as an alumni for an event.

What I'd Tell Future RCers

If you're considering applying, here are three things I wish I'd known going in:

1. **Expect to change your mind.** Your initial goals may change completely, and that's not just okay, it's the point. RC is a place where the cool stuff others are working on will inspire and push you to learn about things you'd never have considered otherwise. Some of my most meaningful learning came from projects I never planned to work on.

2. **Say yes to pairing.** Even when you think you want to work alone. Especially when you're stuck. The new perspectives and techniques you'll learn from other RCers are invaluable!

3. **Don't optimize for impressive.** My little text editor that barely works, taught me more than a polished project following a tutorial ever could have. RC rewards curiosity and effort over results. Heck, we have a day of presentations for "Half-Baked" projects.

The biggest hesitations I had was "Am I good enough?" (I'm a self-taught dev!) or "Will I fit in?" (I'm a shy, introverted person). The truth is, RC isn't about being the smartest person in the room and it's not a networking event or interview situation where you're "performing". It's about genuinely trying to becoming better and doing so as a group (learning generously). If you're a kind person who is curious about programming and committed to growth, you'll be at home here.

RC is free to attend, though sadly living in NYC is not and certainly isn't cheap. That said, if you can save up and make the finances work, and are at all interested in becoming a better programmer, I would highly highly recommend you apply to do a batch at RC[6]. It might just change how you think about learning, programming, and yourself. It certainly did for me! ❤️

---

I started RC

many ideas

CSES random picker

p5.js

social rules

apply to do a batch at RC

© 2024-present by Katie Keller.

Content of this website is licensed under CC BY-NC-SA 4.0.

Crafted with 💖. Built with gempost.