Jake Donham > Technical Difficulties > Recurse Center Retro
Recurse Center Retro
2021-07-30
A few months ago I did a 12-week "batch" at the Recurse Center, a "self-directed, community-driven educational retreat for programmers". Briefly, you work on whatever you want (toward improving as a programmer) with a bunch of other people pursuing similar goals. It was totally great, I highly recommend it! I want to reflect a little on my time there:
How did I spend my time?
I did a whole bunch of stuff! From my daily checkins on the internal message board I see that I
paired with 20 people for about 58 hours total. At first I signed up for daily random pairing (working on my / their personal project); toward the end of the batch I paired with specific people on joint projects.
chatted with 50 people about all kinds of stuff: programming, ethics of machine learning, analyzing political contribution data, cooking, music, bikes, community building, life choices, jaywalking, etc. etc.
gave 6 presentations: on Programmable Matter (twice), on Slate Explorer, on Star Battle Puzzle Party, on the proof assistant Twelf, and on my family's electric cargo bike.
participated in 3 regular groups: on type systems (following Programming Language Foundations in Agda), on machine learning (following Practical Deep Learning for Coders), and a weekly "creative coding" group (more on this below).
I worked on several larger projects:
my main thing, Programmable Matter: I did a bunch of work on the type system and code generation to support building and publishing dynamic documents.
Slate Explorer, a tool for understanding the Slate API (I use Slate in Programmable Matter).
Star Battle Puzzle Party, an app for solving Star Battle puzzles cooperatively (built with React and socket.io); it's a joint project with several other people
untitled multiplayer music-maker, an (unfinished) app for making music cooperatively (built with React, Tone.js, and socket.io); it's a joint project with Daniel Manesh
And I did a bunch of small projects in the weekly creative coding group. At each meeting the leader announces a "prompt" (an idea or topic to stimulate creative thought); then you have an hour and 45 minutes or so to code something with the prompt in mind; then the group reconvenes to show off what we made. It's a good way to experiment with new ideas / technologies: there's some pressure to complete something to show off, but the stakes and time commitment are low.
think small: cuts up your webcam stream into small tiles and displays them randomly—I like the way it takes fragments out of context and arranges them in surprising juxtapositions.
infinity, the Library of Babel: a text editor that shows previous versions of the text—the Borges story The Library of Babel describes a library containing all possible texts; I was also thinking of another Borges story, Funes the Memorious, about a person who remembers everything.
hygge: a soothing (?) bit of background music made with the Web Audio API—this is a pretty low-level API and I spent a lot of time just trying to figure out how to make notes.
mysterious (look away / don't look away): uses the ML5 pose estimator to detect when you're looking at the camera (or have your thumb over the camera), then does something mysterious with that information.
replication: a text editor that permits only one text; if you change it, it mutates back to the original—my first attempt didn't really work and I spent several more hours figuring out how to compute edit distance and use it to mutate the text.
you can only make one dot at a time: experiments with making fragment shaders, but implemented on a
<canvas>
—I had recently paired with someone on their WebGL project, but I didn't want to spend time figuring out the mechanics.emphasize repetition: simple step sequencer using React and Tone.js—someone had recently demo'd a Tone.js project and I wanted to try it. The timing is not very good because I didn't use the API correctly.
fluidity: first experiment with React and socket.io—the beginnings of a security trading platform I guess? (fluidity === liquidity ha ha get it?)
use filters: I got overambitious and didn't get very far—my idea was some kind of ambient presence thing using the webcam and socket.io.
distorting time: felt pretty uninspired, iterated on the earlier Tone.js step sequencer project—got the timing working correctly, and played with different synths a little.
organic machinery: this article about crab computation was going around and I wanted to make a crab world—I had just learned that React and SVG work really well together, it's easy to make cool UIs out of SVGs.
is it finished?: a minimalist chat app (using React, socket.io, and SVG) where the only message you can send is a color—I think I ignored the prompt on this one?
What was good?
Even though I spent at least half my time on other things, I made good progress on Programmable Matter, maybe more than I would have done had I been working on it full-time outside of RC. I felt motivated and energized to get up early every morning and work, because I had other people to work with, a structure of checking in with other people about my progress, and the opportunity to present my work and get feedback.
I really enjoyed meeting a bunch of new people, discovering shared interests, and collaborating—mid-pandemic that was something I badly needed. It felt really good to join a welcoming and supportive community. (After you've done a batch, you "never graduate", and can continue to participate in the community.)
There is something special about the RC community—people are more welcoming, supportive, and helpful than in most other places on the internet. I think this is in large part because there are explicit social rules guiding behavior; and also because the staff "gardens" the community: helps enforce the social rules, connects people who might like to be connected, supports people who want to organize events, etc.
RC sustains itself by recruiting for software companies, and I used their recruiting services after my batch. While my job search didn't pan out the way I'd hoped, the experience of working with RC on it was great and I would do it again. The RC staff is in a good position (from interacting with you in the community) to understand what you're looking for and what your strengths are; and they're trying to build long-term relationships, not just earn a fee.
What was not so good?
I wrote an earlier post about how I planned to spend my batch. Aside from working on Programmable Matter, and collaborating with lots of interesting new people, I did not do much on the list! But that is OK—I liked the feeling of being receptive to ideas and projects as they arose.
I'd planned to write a blog post a week during my batch, but I ended up getting caught up in various projects and groups, and didn't make time for it after the first couple weeks. I feel like I have a backlog of bloggable material (mostly about various aspects of Programmable Matter) and I hope to write it up in the coming months.
The "retreat" part of RC is important (even though it's not a physical retreat right now): it's an opportunity to set aside some expectations and responsibilities in order to pursue something with a pure intention, purpose, and commitment. This is very fun and rewarding, but contains a little sadness—I felt a background anxiety around making good use of the time, and about having to reenter the "real world" when it was over. On the other hand, this feeling has made me want to try harder to find ongoing work that brings a similar sense of reward.
You should be part of the Recurse Center!
If you're interested in improving as a programmer, I highly recommend doing an RC batch and joining the community—you can apply here.
Please email me with comments, criticisms, or corrections.