3 minute read

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

Currently musing about learning style. I’ve been making my way through in BYOL (Build Your Own Lisp), but something about it isn’t working for me. I think this is because the author asks that you take a fair amount for granted in the service of making progress on a Lisp parser early on – the “you don’t need to worry about this thing/concept/library now” model. What this looks like in practice is integrating some of the author’s parsing libraries almost immediately, which has the benefit of facilitating quick progress towards a working parser but which comes at the cost of understanding what’s happening under the hood.

Generally I think this approach is fine and allows us to focus on higher-level problems rather than getting bogged down in C fundamentals – especially for those who already have those C fundamentals, which very well may be the intended audience. But if you’re missing or curious about those fundamentals, or if you want the satisfaction of really doing it yourself from the ground up, then this approach can feel frustrating and coddling. Not because it’s hand-hold-y, but almost the opposite: it doesn’t give the reader enough responsibility.

That’s why I’ve opted to supplement BOYL with CPL (Kernighan and Ritchie’s The C Programming Language), which takes more of a bottom-up approach. I’m finding that this combination – of a project-oriented resource with some abstractions to move us along (BYOL) and the OG first-principles approach (CPL) – works well for my learning style in general, since they create an effective feedback loop: The higher-order BYOL sends me back down to CPL to understand how things work at a more fundamental level, and the lower-order CPL jettisons me back up to BYOL where the fundamentals can be applied to do cool stuff besides writing “Hello, World” or a Celsius-Fahrenheit conversion table to the screen. Put another way, the more cursory and/or perplexing parts of BYOL produce a real motivation to understand the fundamentals; and the less applied building blocks illustrated in CPL create the opposite desire.

In that sense, I suppose it’s a dialectical approach to pedagogy, where theory and practice mutually reinforce one another, and the cumulative toggling action (not to be too teleological about it) works to produce forward progress and development.

This is an effective corrective for me, since my instinct is to favor the bottom-up, first-principles, learn-everything-before-you-build-anything approach, which ultimately doesn’t work very well (for me).

On another note: I am finally getting over my immense fear of compiling and starting to feel comfortable with C syntax (which in truth isn’t very alien anyway, but still), trusting that the universe will not implode on compilation if (when) I forget to type a variable correctly.

Here’s what else went down:

  • AM Checkins: Useful opportunity to reflect on my current challenge, which is no longer the uncertainty of what to focus on or of the dilemma of how to balance job-impractical vs. job-practical commitments, but how to now carve out the time to actually get things done. A part of me thinks I need to be more ruthless about guarding my time and skipping groups/meetings that aren’t serving immediate priorities, but at the same time those have been the ones that often expose me to something completely new. Hmmm.
  • Had some great meetings with folks I hadn’t met yet
  • Talked about Lisp things in SICP club
  • Crunched an angry passengers TSA dataset (okay, claims data, then) in Data Disco (repo here)
  • Went to weekly presentations, which was yet another reminder that the non-priority events are so important in terms of exposure to new and interesting things. Among other things, one presentation completely demystified shell scripting which now feels within reach.