5 minute read

Daily dispatches from my 12 weeks at the Recurse Center in Summer 2023

Today was a day where I had some important, unplanned conversations, which prompted reflection and introspection about what I’ve been doing these past 5 weeks at RC and how to use the next 7. It’s a reckoning that I’d planned on instigating in approximately one week at the formal halfway point of my batch, but that, like my son, came a week earlier than expected.

My thinking goes like this. In the past five weeks, I’ve focused consciously on three “projects” as part of my homemade CS curriculum: nand2tetris, SICP, and a study of C which morphed somewhat from a focus on Build Your Own Lisp to K&R. Side quests, meanwhile, include: pairing as much as possible, taking my LeetCode medicine, and meeting folks and hearing what they’re up to.

What I didn’t really intend to focus on but what the cold, hard numbers nevertheless tell me that I have focused on, rather much in fact, is writing these blog entries. However, I am happy to be devoting the energy to this since, hastily-written as they are, these dispatches have become my main way of producing something in a public way and pushing things out into the world. And that feels good and motivating and builds momentum and all that good stuff.

Back of the envelope, the ratios of time spent on these various endeavors looks, at this point, like this:

Writing 17.5%
nand2tetris 15.7%
SICP 10.8%
BYOL/K&R 10.8%
LeetCode/DSA 10.3%
TOTAL 65.1%

On Monday, in a fit of buoyant confidence, I sketched out a rough path forward that would result in 100% completing nand2tetris, SICP, and K&R by the time my batch at RC wraps up. Nand2Tetris works out well since it consists of 12 chapters, so there it’s just a matter of keeping up the chapter-a-week pace that I’m on. But distributing what remains of SICP (much) and K&R/BOYL (more) over the next 7 weeks involved some rather optimistic curriculum-building. In theory doubling or tripling my weekly assignments from SICP and K&R seemed possible a few days ago, but confronting how much time I’ve needed to maintain my current, much slower pace is suggesting something else.

Meanwhile, I had a number of conversations today where the subject kept returning to this reckoning I alluded to (I think universal amongst recursers at around this point) with the limited and increasingly scarce time we have here. My plan all along had been to begin prioritizing a large project come Week 6 or 7, but I guess I thought I would be farther along with my rogue CS curriculum by now so that that pivot would feel perhaps less fraught – fraught because prioritizing new things will mean deprioritizing other, unfinished business. So, far from ramping up the pace on K&R and SICP (my bulletproof plan as of Monday), it’s starting to look like I’ll have to do the opposite, which among other things means not meeting the goals I initially set.

There’s one other ingredient in this wicked brew, which is that, as much as I am legitimately and truthfully enjoying the thorough, first-principles, bottom-up approaches of K&R and SICP, this compulsion I have to follow (and sometimes suffer through) a book from start to finish, no shortcuts allowed, often has been my downfall, since it can come at the expense of doing what always reveals itself to be the real work of building a thing, running into walls, learning on the go, and growing in rapid spurts as a result. The illusion is that the linear path promised by the book or the course or the curriculum is the only path, the correct path, the shorter path, the comprehensive path, the path that leads to mastery. The truth, however, is that the messier and more convoluted and thoroughly bushwhack-y path of the project turns out, counterintuitively, to be more efficient (and more fun). This is a lesson I have had to learn over and over again, and here I am learning it again, apparently.

So with that said, it’s time to begin the pivot. That does not mean abandoning SICP and K&R, and it certainly does not mean abandoning nand2tetris. Never! What it does mean is scaling back my ambitions. This is a case, actually, where I think scaling back ambitions by trying to craft a syllabus, however seemingly modest, is not the correct move. Instead, my approach will be to determine a reasonable amount of time to devote to these things, and then try to limit myself to that.

I’m not sure what that allocation looks like yet. Nand2tetris is important to me and feels like a legitimate project in the sense that it involves groping about in the dark and bumping into walls in the service of building a thing, so I’m not concerned about that. But SICP and K&R, I think, should be capped at around 4 or 5 hours a week each.

Someone said something profound in a meeting today which I wish I could remember. The sentiment was that RC is less about what you finish than what you start, or perhaps what you open up for yourself. It’s in that spirit that I hereby give myself permission to study less and do more.

But do what? That’s the next phase of the reckoning. I got some good inspiration from the various impromptu meetings I had today, which I’m combining with some older thoughts I unearthed.

Spelunking to do next week:

  • Implement DNS in a weekend (or actually over the course of a day or two next week). This is a short project and one that I imagine will be on the hand-hold-y side, but one that nevertheless I want to do in the spirit of opening doors to new domains.
  • Look through Beej’s Guide to Network Programming – possibly will lead to a C project?
  • Also look through Beej’s Guide to C Programming as a potential compliment to K&R
  • Play around with Protohackers to see if there’s a project lurking in there
  • have a look at Linux Device Drivers as yet another potential project to tackle in C
  • Play around with implementing some simple data structures in C to see if building a data structures library would be a worthwhile and fun thing to work on

A lot of these still-in-formation thoughts are the result of a rich day:

  • checked in at checkins, where I encountered some unfamiliar faces and which led to one of the day’s unplanned meetings
  • worked on a SICP related blog entry
  • had an excellent and gratifying pairing session on K&R problems
  • did three coffee chats/catch-ups/brainstorming sessions, met new folks, caught up with others, got the reset I didn’t know I needed