Exhausted, Exhilarated, Excellent!
I mentioned that I’d be attending the Recurse Center (RC), a retreat for programmers to work at the edge of their abilities. I applied 2.5 weeks before my batch started (after learning about it a week or so prior) and having just four days between acceptance and the first day amplified the whirlwind effect of the first week!
Intentions for the Journey Link to heading
My growth objectives for RC can be split into two categories: technical and personal.
On the technical front, I’m interested in writing software that makes hardware do things. It would be cool to build a mini-CPU and flash it to a PCB, or build a robot and write code and use TinyML to make it move and react. I’m also interested in writing a small language or a compiler, and learning Rust and maybe Haskell.
In terms of personal growth, I want to become more confident in working with other engineers. I have always been a solo developer, and while there are benefits to this (I can teach myself anything and have built systems on my own), there are some gaps in my skill set. I’m going to learn to be comfortable pairing and thinking out loud. I’ll also write about what I’m learning on this blog.
An Openness to Everything Link to heading
One thing I both expected and hoped for was that fellow Recursers would expose me to a lot of tasty topics that would interest and excite me. For the first (and maybe second) week, my orientation is to be open to different projects and technology than I’d planned to work on before RC.
The First Week Link to heading
After the First Day Talks and meeting several people, I felt both energized and overwhelmed. I spent the rest of the day orienting to RC, reading about topics that others had mentioned, and set goals for the week.
Week 1 Goals Link to heading
- Pair at least twice
- Write 2+ blog entries and publish at least one
- Complete Nand2Tetris Module 1
- Write code in a direction I didn’t even know about last week
- Attend events every day
Pair at least twice Link to heading
By the end of Tuesday I already completed this goal! In total, I paired around 5-7 times in the first week. Some highlights:
During the Pairing Workshop we were tasked with coding Mastermind and paired based on language preference. I worked with Kevan Hollbach on a Go implementation in the terminal. The experience was surprisingly laid-back: I drove for the first half, then Kevan took over, and by the end of the session we had a working game! [note: we didn’t have time to add input validation or randomize the game’s secret code]
On Tuesday I paired with Ben Elam on a video filter he was working on in Python. It had been awhile since I’d worked in Python and I hadn’t set it up on my machine since switching to EndeavourOS last fall. Ben drove first, and when it was my turn to drive he helped me set up the tools I needed to work on the project (including venv and OpenCV). We refactored the channel delay to use a ring buffer and added a simple trackbar that allows the user to adjust how short or long the delay was for one of the channels. The results were pretty satisfying! Ben has since added more trackbars to the code, which you can check out for yourself.
Write 2+ blog entries and publish at least one Link to heading
This didn’t pan out. I wrote the beginnings of several posts, but I didn’t block out time for myself to focus – on writing blog entries or code. About halfway through the week I realized that I was putting too much energy into my daily check-ins. While I intended these to be quick summaries of the days, I felt the need to edit them before posting. By Wednesday morning I neither wanted to blog nor share the check-in post I had written, so instead I drew:
Coding in Novel Directions Link to heading
I ended up coding in new directions several times during the week and plan to keep this as a weekly goal for at least the first half of batch. One instance was creative coding: I knew of generative art and producing music through live coding performance, but I had never heard of “creative coding” until I started RC. Without knowing what it was, the name and conjured for me the idea of code that is utterly feral in its shape, the purpose less important than the form. Intrigued, I attended the Creative Coding group on Thursday.
It turns out I was partially correct: the concept is open-ended. Many Recursers practice creative coding as a means of creating visual works, to seriously delightful effect. I separated off to pursue my strange notion of the concept with an open invitations for others to collaborate, and Steve Yang and Ben Ang joined me. We ended up taking the prompt to create a game about instructing a monkey to close or turn the King’s many eyes so the player could sneak into the King’s massage parlor. I’ve never worked on an open file with others as we simultaneously edit separate parts of the code – the experience was chaotic and fun!
Nand2Tetris and Attending Events Link to heading
Like with blogging, I didn’t hit my Nand2Tetris goal, but the group met up to work through some of the exercises in parallel. It’s a short module, so I’ll be able to complete it and the second module during week 2. I prioritized connecting with people and getting exposed to newness this week, so I ended up going to several events every day. I met more people in the past week than I have in the past month and it’s been thrilling hearing about and discussing everyone’s ideas, including a long conversation on creating a global graph of online and offline spaces and the importance of being able to find community. I also started on Rustlings after consistently hearing others’ enthusiasm for learning the language, and have completed 31/94 exercises.
Side Effects Link to heading
After sharing my game and its code with many Recursers, I decided to finally share it in the Ebitengine community. I’d been hesitant because of the endless list of features to implement, bugs to fix, and polish to add, but the enthusiastic responses from my fellow Recursers helped me to see past what isn’t there yet. The reception in the Ebitengine community was similarly encouraging!
What’s Happening Next Week? Link to heading
I expect the coming week to feel less chaotic, but still be a period of acclimation. Last weekend my sleep schedule inverted due to a disruptive event beyond my control, so I’m looking forward to being well-rested for week 2. This also means I’ll be able to engage in other parts of my regular routine, such as daily exercise.
- Make space for emergent activities, meetings, and block out time for solo study
- Continue meeting people and pairing (pair 5+ times), attend events daily (including returning to Creative Coding and Game Dev Interest Group and checking out Astronaut Horse Club)
- Complete 2+ Modules of Nand2Tetris
- Write code in a direction I didn’t know about last week
- Learn more Rust! Maybe also some Haskell?
- Write and publish 2+ blog entries