Project ideas coming into Recurse Center (RC)
Or, "how many things can this guy start and not finish?"
One week left until I join the Recurse Center.
After a bit over four years of professional experience, I’ve decided to spent some time on myself and rediscover why I started programming in the first place: because it was fun. There’s just so many things I am interested in, and many of them are appealing enough to try surfacing at least a little bit. But there is a problem: even though something might sound interesting to try, I never actually dedicate enough time to try it out (1)Maybe this is just an attention span problem. . These mostly involve writing huge and complex software from scratch, like databases, search engines, game engines, etc., to understand how they work, but some range from simulations to PS1 programming to making music with code. So, I figured, if I’m focusing on personal growth for a while, why not use that time to try lots of things and see what happens? I often have a hard time describing what I really like doing, or, what my “passion” is, although I may have an idea.
While thinking of getting into RC, I was planning to work on a big project (2)A compiler backend, like LLVM, QBE or Cranelift written from scratch in Rust, except it only targets RISC-V. for the entire duration of my batch (Fall 1 ‘26), but after lots of free time and shower thoughts, I concluded that may not be exactly what I really want. Maybe what I want is to trigger my curiosity in the form of different projects. Play around, program whatever I find most interesting. Interested in learning how distributed systems stay reliable? Give it a shot by implementing an algorithm like Raft. Or, for something a bit less “abstract”, I find the flocking behavior of birds specially interesting, why not try simulating it? And so many other ideas. If the idea of going broad instead of deep ends up being boring, of course, I can always go back to the original project.
The purpose is to have fun and learn, either way. None of these things have to turn to a “big project” that I can “ship”. I got used to interpreting the phrase “shipping” as some marketing-ish slang, or something you have to do in order to get the big money, so I prefer not to use it. Hence the quotes.
Projects #
Following is a list of things that are of interest and I may be able to tackle in a few days during my time at RC. If unsure, pick one at random!
Programming languages #
I’ve tried many languages in the past, some of them quite unknown and some quite popular. But I never really loved one language, and often find myself thinking “why do I have to check for an error every single time?”, or “I wish I could use * for pointers instead of ^”.
Writing programming languages is fun, and I’ve done so in the past, but never wrote one from start to finish.
Project: write a small (interpreted) scripting language with my desired syntax.
Compilers #
Similar to the programming languages section, except I am most interested in compiler backends, i.e., the code generation part.
Project: start from simple IR, and work my way through generating code for one target platform (like RISC-V).
Database management systems (DBMS) #
I worked professionally in databases for a while, but never wrote one myself. One downside, DBMSs are pretty big and often involve lots of tiny subsystems working together, but it’s not hard to write a toy one.
Project: write a small DBMS capable of storing data on disk and query them. For example, a KV-store inspired by Bitcask.
Game development #
This one is probably the most important and interesting area to me. I’ve always loved playing videogames (3)I have a tattoo of Celeste’s iconic strawberry below my right wrist. and have tried making them in the past. One caveat: I don’t like using game engines. (4)I am aware of engines like Unity, Unreal or Godot (just to name a few), but I prefer using frameworks/libraries such as SDL, Raylib or Monogame simply because I love writing things from scratch.
I am not sure what (if anything) I’ll do within game development. Maybe participate in a game jam, or write small prototypes, but nothing concrete. But, one thing for sure, I want to understand how games work. And for that, we have…
Computer graphics #
Nowadays, most videogames (and movies) use some form of GPU-accelerated graphics, either powered by APIs like OpenGL, Vulkan or Direct3D for rendering (5)There are more, such as WebGPU, WebGL or Metal, but these three are the most common ones. . These are known to be quite complex but allow for high-performance graphics. I am really drawn to graphics APIs (and general game-graphics-kind-of-stuff) as it requires quite a bit of performance optimization knowledge to do it right. It is the perfect crossover for my interests.
While GPU acceleration allows for high-performance gaming, is not mandatory, and graphics can be accomplished purely with CPU rendering as well, or software rendering. (6)Although slower performance compared to GPU acceleration, CPUs have evolved quite a lot over the past few years and are more than capable of rendering simple games. (7)In 1998, the game Thief launched, and it used pure software-rendered graphics.
Projects
- write a software renderer capable of manipulating 3D objects in real-time
- write a raytracer
- learn the basics of OpenGL
Physics/ecosystem simulations #
Quite an overlap with game development, I find simulations really interesting. Animals, cells, whole ecosystems interacting together. In fact, one of my first programming projects ever was a cellular automata visualizer. I remember seeing a Twitter thread (8)Nikita Lisita’s about building a 3D physics solver in C++, and that made me want to learn C++.
Take a look at simulating ants and slimes, for example (video by Sebastian Lague):
Projects
- implement some animal behaviour like ants or bird simulations (like Boids)
- implement a small 2D physics engine capable of solving simple box, triangle and circle collisions
Distributed systems #
While I’m not particularly excited about multiple computers working together, I really liked working with things like Kubernetes and the alike in the past. I don’t know how these things work under the hood, and it won’t hurt to try implementing something from scratch.
Project: implement Raft and/or Paxos from scratch. (9)I have a feeling this will be harder than I think, but worth a try.
CTFs #
Honestly? CTFs sound pretty darn amazing and fun. Cybersecurity isn’t really something I enjoy studying, but I do enjoy hacking things and seeing lots of binary code. I did some reverse engineering in the past, when I got to fix a possible bug in a propietary data format by looking at a file’s bytes (10)As it turns out, it wasn’t a bug, but I wrote a full document explaining why it wasn’t. , and I had a blast. I feel like CTFs are some sort of Codeforces or Project Euler problems but with a Mr. Robot vibe. I’m down.
Project: participate on CTFs challenges, solve cybersecurity exercises (for example, play Wargames)
There’s just so many things we can do #
I’m attending the full batch (12 weeks), so I have plenty of time to try both short (1-4 day) and big projects (4+ days). Potentially with different programming languages. That will give me some time to think about what I like and what I don’t, and go with the flow.
Having said that, not everything has to be made a project, though, and certainly not everything has to get finished if I don’t feel like it’s worth the time. RC is really about learning together with other recursers – there’s a high chance I’ll get interested in a topic someone else might be working on and that might shift priorities.
Hopefully this record will be a helpful guide during my time there, and a good memento for my future self.