Recurse Center Return Statement
I recently wrapped up a 12-week batch at the Recurse Center (RC) in Brooklyn, NY, and I can safely say that attending RC was one of the best decisions I have ever made. This was the most creative period of my life, and the amount I learned rivaled my time in college with the added bonus that I was able to learn what I wanted to learn. I had a few bigger projects that I worked on while at RC that I think are worth discussing.
What I worked on
Poker library
The first project I worked on was a poker library called casino that is designed to perform hand-ranking in games such as Texas hold 'em as well as provide a terminal-based way to play poker games. I began working on this as a project for fun because I enjoy playing Texas hold 'em but wanted a better way to practice in a more realistic setting without having to bet money. I also pursued this as an exercise in improving my Rust code as well as shipping an actual product with real users.
I ended up publishing three crates related to the project that have collected thousands of downloads. I wrote dozens of tests and feel pretty good about my backend for hand-ranking. I still haven't finished the gameplay implementation yet, but the core pieces to do that are there. Eventually, I want to vastly improve the computer AI to provide more realistic opponents, but I'm not very close to that point yet. Overall, I'm happy with the state of the project and am still working on it post-batch.
Plight of the Wizard
My next project was a game for the Playdate titled Plight of the Wizard. This game was initially created during a four-day game jam. I enjoyed my work on the game and learned so much that I ended up pursuing this project deeply in the following weeks. I went on to publish the game, and it has received hundreds of downloads as well as multiple donations.
Plight of the Wizard was my highlight during my time at RC. I first began programming when I was a kid to mod games, and I eventually made the career switch from accounting to software engineering in 2020 because I began picking up programming again to create a game. For one reason or another, I never got around to creating a complete game while I worked on my career switch. RC finally provided me with the space to work on a game while also providing immediate feedback from others that followed my progress.
This ended up being one of the more demanding projects that I worked on, which surprised me. Performance optimizations required me to significantly expand my expertise in data structures and algorithms because the Playdate's limited CPU and memory didn't allow for poorly optimized code to run at my particular standards. Perhaps even tougher than writing optimized code was nailing the feeling of "fun". Strongly optimized code means nothing if the player doesn't even play the game long enough for it to matter. I think that I was able to make the game fun. I still play it daily on my subway rides, so I know there's at least one person enjoying it. The game also got strong feedback from strangers that tried it out, which was really exciting to experience.
Delivering weekly technical presentations on features that I implemented and publishing blog posts on my progress were enjoyable and helped expand my skills beyond simply writing code. This was a project I always wanted to pursue, and I'm extremely satisfied with the outcome.
Chip-8 emulator
Another project I worked on was a Chip-8 emulator. This project was for a day at RC called "impossible day" where you try to work on something that pushes your abilities to the limit. I've always deeply enjoyed playing emulators and have been interested in the technical details around their implementations. After talking with a few recursers who had worked on similar projects, I settled upon starting my journey into emudev with the Chip-8 since it was more approachable than more complex systems such as the Game Boy or NES.
I ended up writing the emulator with SDL integration in a day, which was a surprise to me. I wasn't expecting to be able to parse the required info to implement it so quickly, but a combination of helpful blog posts as well as previously studying the underlying concept of how emulators and virtual machines work helped me greatly. The next day, I added WebAssembly support to execute my Rust code in the browser. This was a cool project, and I learned a lot while doing it.
Rotation-Based Compression
My final project at RC was a bit of an accident. I wrote a blog
post that went into more details on my rotation-based compression
algorithm, named strawberry,
but the quick summary is that I discovered rotating an image using Mac's
sips tool resulted in smaller file sizes than directly compressing the
image to the same quality without a perceivable difference to the human
eye.
This began as an observation that made me do a quick double take, turned into a fun evening of experimentation, and ended with me taking the idea way too far because I was having so much fun with it. I gave my favorite presentation during my time at RC on it, and I think I left quite a few of the more technically impressive members baffled. Even after the post (barely) hit the front page of Hacker News, I still don't have a conclusive answer on what's going on here. I'd love some insight if anyone thinks they have an answer!
The social side
Beyond working on cool technical projects, RC was a very fun social experience. After spending over a year at my last software engineering job working remotely, I forgot how great being in person with other talented individuals is. The space that RC provides attracts a lot of intelligent, kind, and curious people. It's the perfect combo for having a great time working on seriously cool projects and pair programming with others. But it also provided a fun atmosphere to be social and experience non-programming topics.
To that end, I ended up hosting the weekly Non-Programming Talks, which are a longstanding tradition to discuss anything people are excited to share that are explicitly not programming related. I gave a talk myself on an adaption of my blog post A Basic Introduction to Accounting. Hosting these helped me improve as a public speaker, get pretty good at convincing shier people to present on cool topics, and meet a lot more people than I would have otherwise.
I also took it upon myself to host a couple of happy hours to bring people together in a non-programming context. I think these were pretty successful given the high turnout rate. I ended up forming stronger bonds with other recursers and was also able to find people to pair on future projects who I might not have talked with as much if I only ever saw them at the hub.
Finally, I hosted the weekly game dev group. This was fun to engage in as I worked on my game. I received a lot of amazing feedback from more experienced game devs, and I got to see the progress on their games as well. This ended up being my favorite meeting of the week, and it was really fun to interact with other people facing specific issues that non-game devs didn't have as much insight into. I also hosted a game jam for the batch after mine where I set the theme for the jam to be claustrophobia. Everyone absolutely nailed it! I was really impressed with what they created in such a short period of time, and it was rewarding to pass the torch to such a talented set of individuals.
Outside of RC, it was a great experience living in New York. I already had a number of friends in the area, but moving to a new city—even for a short period of time—can be a daunting task. Having a naturally large community at RC really helped fill in the gaps while I experienced the city. Being in person at RC to experience NYC was a major highlight of the entire experience, and I'm really happy that I did it.
Why RC was successful for me
Looking back on my time, I think there were a few reasons I was able to thrive during my time at RC.
First, I am a strong self-learner. Having spent 8 months camped in a library while studying the CPA exam, 5 years studying computer science on the side with 1 year of dedicated study, as well teaching myself how to speak Greek were all indicators that I excel when learning on my own but also all contributed to developing that muscle. I'm not sure if that style of learning is the best for everyone, but I believe it's a hard requirement for anyone that wants to do well at RC.
Further, I couldn't have passed the four sections of the CPA exam on my first attempt, made the switch into software engineering, or learned how to speak Greek without a community of incredibly talented and supportive people around me. People often don't consider that side of things when they look at those achievements, but there are always dozens of people that are part of my journey that deserve significant praise. Understanding this was a major reason I ended up deciding to attend RC. Fortunately, it did indeed provide a supportive community that helped me improve as a software engineer. I believe that in addition to being a strong self-learner you have to be able to work well with others in various capacities to be successful while at RC.
Next, I tried very hard to push the edge of my abilities. This began with working on programming challenges that were hard. There were so many times while working on my game where the frame rate dropped to a sluggish 5 FPS, and I was completely stumped. But I never gave up on difficult challenges. If I was at a complete standstill, I'd reach out to someone here for help and pickup another task while I waited to hear back. Inevitably, a solution would be found, and I would overcome the issue. When presenting on that issue the following week, it would always seem so trivial, which was because I had grown as a developer. There's a Greek saying, «Πρέπει να παθάνει για να μάθαίνει», which translates more bluntly in English as, "You must suffer to learn." I find this to be quite true. The hardest challenges resulted in the largest growth for me.
I also grew from my experience pair programming with others. There were a few times where I hit a wall with a particularly Rust-specific issue that wasn't very intuitive. Sitting down with Rust experts that were able to clarify my problems helped me a lot. On the other side of things, sitting down with someone else to debug an issue in their code was also valuable. Working alongside others can be a lot of fun to see how they think and approach their code, and I was able to grow from practicing that skill.
Beyond pushing the edge of my technical abilities, I pushed many other abilities. I forced myself to deliver weekly presentations, host non-programming talks, and organize social events and the game dev group. I felt that I went from a pretty average presenter to a much more capable and confident one. I've long had experience organizing events, having done so for my friend group as well as a fantasy football league for well over a decade, but I also grew in that area by having to do that for people I wasn't as close with. I deliberately made myself be more social and take on larger responsibilities than I normally do, and I found that to be one of the better decisions I made while at RC.
What I would do differently
I honestly can't think of anything I would have changed about my experience. I pursued a vibes-based decision process where I let what capture my curiosity lead my path for the day. Early on, I heard an RC faculty say that the people who wrote the most code tended to grow the most during their time at RC, so I decided to write a lot of code. I think that advice was spot on. Rather than excessively deliberate over what to work on or spend time thinking of how to maximize my efficiency, I focused on simply creating things every day. I spent my weekdays coding features on my todo list and Fridays experimenting on fun ideas. Fridays are where all of the most fun gameplay elements in my game came from, and I'm glad I followed that structure. I was able to deliver a game in a timely manner with a lot of unique and clever aspects.
Final thoughts
If you couldn't tell, I'm very happy with my time at RC. It was one of the best decisions I have ever made, and I'm glad taking time off from working for income paid off in a greater way than money ever could. I have been doing a lot of studying and interview prep recently, so I didn't have to completely sacrifice that side of things. I made multiple new friends from countries all over the world and greatly expanded my professional network too. I'm impressed by every individual I met at RC, which is not something I can say about most other organizations I've participated in outside of my high school. I didn't find a single disappointing person here. That's an incredible feat by the founders and the current faculty. RC sounded too good to be true before I attended, and it still feels that way now. I am beyond impressed with my overall experience, and it feels bittersweet to wrap up my time here.
If any of this sounds interesting to you, I strongly suggest clicking the link below to learn more!
Want to become a better programmer? Join the Recurse Center!