Blog – alanza.xyz

ROBBIE LYMAN

return "Robbie";

Previous: For completeness: real numbers
Up

This summer I spent twelve weeks at The Recurse Center, a self-directed program that describes itself as “like a writer’s retreat, but for programmers”. Many participants write a “return statement” describing and reflecting on their time with the program. The name is a cute little pun: many functions in a computer program finish with a “return statement”, which allows the function to yield a bit of data as a result of the function’s execution. Anyway, this is mine.

  • What is the Recurse Center like?
    • Overview
    • Applying
    • The Retreat
  • Some Statistics
  • Other Reflections

What is the Recurse Center like?

Overview

The Recurse Center is the retreat where curious programmers recharge and grow.” It was founded in 2011 as “Hacker School”, and operated under that name until 2015. During my retreat, attendees could be in-person, virtual or a mix of both. I opted to treat RC as if it were a job, commuting every day to downtown Brooklyn to attend in person during the hours of 11–5. I continued to have my standing math research meetings, but I asked that we meet outside of those hours, since I did want to devote a good amount of focus to RC.

As opposed to a coding bootcamp, RC expects that you already know how to program. Granted, what this means looks different for everyone. You’ll see in the statistics below, for example, that before RC I had never written any meaningful amount of JavaScript, which is arguably the most popular programming language today. (It is true that I had opened JavaScript files in a text editor, and written a tiny scriptlet to hide and show divs in a previous iteration of this website.)

Applying

To apply, there is a written application (really a web form) with a few questions aimed at understanding your background. This includes asking you to submit code for a simple program in a language of your choosing, as well as providing a link to a larger program you’ve written from scratch.

If your application looks good, there are two interview stages, one more conversational, and one for pair programming. The pair programming interview was the first time I had pair programmed. For that stage of the interview process, there were a few suggested projects to work on and bring to the interview, and the goal of the interview was to add a little feature to the project. I chose to write a teeny tiny little Lisp parser; for the pairing interview, we implemented addition. I loved this project, because it immediately told me what is super cool about Lisp: the code really is the syntax tree, so evaluating Lisp can be as simple as replacing one syntax tree with another; this is more or less what my addition function did.

I ended up becoming pretty fascinated with the idea of creating a programming language. I didn’t fully commit to chasing this idea down during my “batch” (i.e. my time at the retreat), but I did do a little bit, mostly actually between being accepted and the start of batch, I implemented the Uxn virtual stack-machine as a little Zig program. (A next step on that program would be to begin implementing more of the “standard” aspects of the Varvara system, which includes video and audio output.) I also wrote a little Forth-inspired programming language called Hither.

The Retreat

The retreat is really mostly what you make it. RC has several “Faculty” (which is I think an accurate term for what they do; I just put the word in quotes to have an excuse to point out here that RC is not accredited and grants no degrees or diplomas or certificates), some of whom ran workshops spaced throughout the retreat as an opportunity to reflect and recenter on what it is I wanted to do with my time there. Most of the time, though, is deliberately unstructured. RC maintains a calendar that anyone can edit—this really is an invitation, and I made good on it by starting a weekly “Audio Hang” every Tuesday. The goal of Audio Hang was to provide a low-stakes space to chat about synthesis, audio programming, music, DSP, etc. I made a lot of friends through Audio Hang, even though I spent relatively little of my batch writing samples to a file or a DAC.

Audio Hang joined a number of self-organized recurring events that were fixtures of my week. Others for me included a yoga session (which I missed about as often as I attended, due to research meetings), a meeting focused on game development, another on programming language design, and another on graphics (which inspired Audio Hang).

As a physical space, during my batch RC occupied the 4th and 5th floows of an office building in downtown Brooklyn. The 5th floor tended to be quieter (actually very quiet), with desk spaces for people to work, as well as where the faculty sat, and a little library. The 4th floor was more social; still places to work, but also couches, a collection of old computers, a few conference rooms, and a kitchen. I decided almost immediately that I would spend all my time on the 4th floor. I tended to arrive earlier than most people (although I committed to 11–5, I usually found myself ready to go a little earlier), spend the quiet hours working on my own, which let me feel good about focussing on other people when the arrived.

Some Statistics

According to my GitHub activity log, I created approximately 100 commits and 9 new repositories. By volume, I almost certainly wrote the most code in seamstress and my solutions repository for Advent of Code 2022. Eyeballing the former I count easily over 15,000 lines of code added and/or deleted; for the latter my final solutions add up to about 7,000 lines of code.

I wrote 60 checkins, one for each weekday I was in the program (I didn’t manage to always write one during the day it was about, but I did manage to write all 60). I ran a weekly “Audio Hang” as a space to chat informally about audio programming, synthesis, DSP and music. I put JavaScript and Rust to serious use for the first time, served a webpage to localhost for the first time, made a game in the browser with friends, a game of solitaire in the terminal by myself, a toy programming language (and started working through Crafting Interpreters, which will eventually result in a second toy programming language), pair programmed for the first (and second and third and and and) time, gave two programming-focused presentations and one “non-programming talk” about some of the math behind implementing digital filters.

I made sweeping changes to my work-in-progress version 2.0.0 of seamstress repeatedly, aimed at improving the quality of my design and clarifying my vision for the project in the process.

I made many new friends, whom I dearly hope to stay in touch with for years to come. I performed livecoded music sets twice. I was in more spaces that included a pronoun checkin than I had gone to since college. I iterated on myself with the same vigor that I iterated on code, ultimately readopting the name Robbie after almost a decade of disuse. (Hence the title of this blog post.)

Other Reflections

About a week or two into the retreat, I texted several of my friends “oh, I think I’m not actually an introvert” and was bemused to hear back replies mostly to the effect of “yeah, we knew that one already”.

I do a lot of good work on my own, (cf. a solo-authored paper totalling more than 100 letter-sized pages single spaced at the moment) but I noticed that I had been lonely for a long time, and that this space offered a powerful antidote: a group of peers, all uncommonly interested in making connection, talking about our shared nerdy interests, and helping each other improve. There really was something very special about the community during my batch; I don’t think I’ve experienced something quite like it in a long time, if ever. The collegiality of my grad school department or some of my favorite conference memories come closest.

I’m not really formally trained in programming at all. I got started by discovering the C and C++ books my dad had in our study growing up. As a little boy I remember being excited to upgrade our first family computer from Windows 95 to Windows 98. When I discovered those books (much later) I read them as if they were novels, and then checked out several similar books from the library to read the same way. I did attempt an implementation of RSA encryption in Java, but it didn’t immediately work when it compiled; I didn’t really know how to go about fixing it, so I did not. Anyway, it’s been really fun to see how much I’ve leveled up as a programmer over the past several years.

Onward!