Today I have something different for you. It’s a transcript of a conversation I had with David Albert, co-founder of the Recurse Center.
David and I have been talking regularly this year. We always talk about programming and nearly always one of us ends up saying “man, I love programming.”
Last week, spontaneously, I asked him whether I can record & transcribe our next conversation. He said yes. We talked about learning new things, whether learning’s fun, building your own tools, what David learned at the Recurse Center — all the good stuff, it was fun.
I shortened the transcript, cleaned it up, and slightly polished some sentences to highlight intended meaning. (Halloween challenge for you: record yourself, get a transcript, and scream at all the filler words you use.) Here it is.
Thorsten
How do you learn new things? Two weeks ago, you told me you’re getting into calculating orbital— what’s it called?
David
Orbital mechanics and guidance, navigation & control.
Thorsten
How do you get into that? Do you start and watch a video and then watch another video? Or do you go and buy five books and read them one by one? Or do you start playing around with code right away? What’s the process?
David
I watch a video and then I watch another video. That’s generally what I do.
Thorsten
You go on YouTube and you type in “orbital mechanics”?
David
Yeah, “Orbital Mechanics Simulation”. I found a channel called Orbital Mechanics in Python. And I just started watching that.
I think I do experiment relatively quickly. I want to get something running. So I started writing some JavaScript, basically.
Thorsten
Really? You put something on a canvas and you try and visualize it or…?
David
Yeah, that’s it. I think it’s funny my instinct is to do everything from scratch.
So originally I was thinking, I’ll do it in 2D and draw everything myself. And I had to remind myself that the purpose of this is to eventually learn guidance, navigation, and control (GNC) and even the orbital mechanics part of it is just a waypoint on the way. So I used Three.js.
But I have a very strong instinct to do everything from scratch, which I think is for the most part not a very productive instinct.
Thorsten
Didn’t we talk about this previously? That some programmers are forward-looking and when they learn a new thing they try to go to the edge of what’s possible right now, and other programmers are more like, wait a second I need to go back and understand this from scratch.
David
I think I would probably phrase it slightly differently, but yes.
What I struggle with is that I love taking things apart and learning how they work and I also love computer history, right?
A year ago or so I read Showstopper. It’s about the creation of Windows NT. Great book. And I’ve read tons of other books like that. So much of what I enjoy is related to this thought: what would it have been like to be at this point in the development of computers? Because those are the exciting stories that I grew up with when I was a kid. The computer was the most exciting computer. And it still is.
I think this is just part of getting older, you’re nostalgic for the things of your youth.
Thorsten
I’ve been trying to get into font rendering…
David
I love it. Talking my language.
Thorsten
… and for me, that’s mostly about trying to understand from the bottom up.
When I look at a topic like that — font rendering — and I want to understand it, I don’t go and pick out libraries. I might start with libraries but then I’d look at their source and see what they’re doing and try to find the start, the bottom of it.
I often wonder whether it gets in my way.
David
That’s so interesting. I don’t think that it’s necessarily bad. I think it’s effective.
Going to the source, trying to understand at a deep and comprehensive level — that’s useful and effective. I don’t think that’s bad at all.
The tension that I feel is between wanting to take apart old things and wanting to contribute something new. But that’s not a tension about wanting to understand the thing I’m working on, right? Whatever it is that I’m working on — it’s useful to understand it.
Honestly, the thing that I struggle with is that if you put a computer problem in front of me and it’s interesting I get engaged with it. It sort of doesn’t matter which one it is. The challenge for me is to pick the right problem to get engaged with and not just the first one.
Sometimes the first one is the one you need to be working on. But in my case — the orbital mechanics drawing — it wasn’t. I was getting distracted by the “I’ll draw everything from scratch” problem — which is a fun one — at the expense of learning the techniques to simulate orbital mechanics, which is also a fun problem.
So I had to tell myself to just use an existing system for the rendering. And now, I get to work on another fun problem but that one happens to be closer to the stuff that I’m actually trying to accomplish.
David’s been on a sabbatical last year, writing his own text editor, and now, after 13 years of helping to run the Recurse Center, he’s wants to work in space. That’s also why he’s now calculating orbital somethings.
Thorsten
If I were to ask you to build me a vector database — assuming you haven’t built one…
David
I’ve never built one.
Thorsten
… and I’d give you a week. When would you start writing code?
David
I don’t know what a vector database is, so I’m not sure.
But I think it comes down to judgment and taste.
Usually it’s not particularly effective to just start coding immediately before you understand anything, right? It’s also definitely not effective to spend the whole day or the whole week reading and then having produced nothing by the deadline.
One skill is knowing when you should stop reading and start implementing because, among other things, when you start implementing, you quickly learn the actual problems that you’re going to face and the actual things that you don’t understand. And if you spend too much time reading and you end up reading about the wrong things.
And I think that’s a matter of judgment that, at this point, I’m okay at. I don’t think I’m particularly great at it.
Thorsten
I run into that often.
I’d work through a book, type out all the code, read it end to end — cool, book is checked off now. Then, two months later, I realize that I barely retained anything from the book.
Then I realize what I should’ve done is to read a chapter, then try to build something without looking at the book, bump into problems, go back to the book. Learn, practice, learn, practice — that kind of rhythm. I always notice it too late.
David
Well, you know, there’s all sorts of techniques that I mostly don’t use, but that I think might be applicable here, not as concrete suggestions to use them, but more as insights into how people think about learning.
For example, I’ve heard from some people that the way they read a paper is first they just read the abstract and all the all the section titles and the conclusion, and then they read the whole thing again, but without stopping if they don’t understand something, right? And then they read it again.
That’s something I don’t do but I could probably benefit from, because oftentimes when you’re really trying to understand a hard thing and you’re struggling and struggling and struggling and.. then it turns out the next paragraph explains the whole thing.
Another interesting idea that I almost never do but that’s sort of a fun discipline is to write the program three times.
What’s embedded in both ideas is that you have to do it multiple times.
David
I can’t remember if we talked about this, but one thing I think about a lot: when you’re trying to solve a problem, when does it make sense to build a tool to help you solve the problem?
I think this is something I don’t have particularly good judgment on but there some programmers who are very good at this.
And, I think, the question is always: is the juice worth the squeeze? How long is it going to take me to build this tool and how beneficial will it be? There are people who have a good intuition for that and say it’s worth spending four days building this tool.
I experiment with that sometimes to see if I’m right. I’ll build a tool to help me solve the problem and see what happens.
Thorsten
Do you think the people who decide to build a tool, they have solved the bigger problem before?
David
Yeah, I do think this comes from experience. I also think it probably comes from domain.
I really don’t know, but my guess is game programmers do this a lot. Because among other things, if you’re building a complicated game, you have to build a level editor. Maybe you don’t have to, but it seems like lots of people build level editors for their game and or game engine. Clearly there seems to be a lot of evidence that people find that worth doing.
I sort of wonder what would it be like to be in an environment where that’s a common thing? You know, I’d probably get some decent insight and heuristics about when is it worth it.
Thorsten
Maybe in a large company with a developer tooling team.
David
Right. Obviously those organizations have decided — as an organization — it is valuable to build tools to help us do the thing. I think that that makes it easy. If you’re hired to build tools, then what you do is you build the tools.
But as an individual programmer, I sort of wonder, when is it worth it for me to take a step back and build the tools?
I was doing some other physics simulation, hydrostatic simulation recently — say you drop a ball in water, does it sink to the bottom or does it float and how does it behave? — there’s the force of gravity, which is pulling the thing down, and there’s three forces that are pushing it up.
There’s the viscosity of the liquid, there’s the drag. The drag is proportional to the velocity squared. Viscosity is proportional to velocity. And there’s also buoyancy, which is proportional to the volume of the water you displace.
And I had a bug.
I used D3 to build some graphs and I’m not good at D3 and all of this was frustrating. I just wanted a chart of each force, the acceleration, and the position. It took like four, five hours to get the chart working. That’s a lot of time.
But then once I had the chart working, the bug was obvious.
The bug was this. The buoyancy force, which points upwards, is relative to the volume of the water you displace. So as soon as the ball hits the water, it’s displacing some volume of water and the maximum volume it displaces is once it’s fully in, right? Once it’s fully in, it doesn’t matter how deep it is, it’s the same buoyancy force.
So what you’d expect is that the graph ramps up based on the shape of the object until the whole object’s in and then it’s flat.
Instead, my graph shot up and then went back down. And so I was like, well, there’s the bug, right?
I don’t know how long it would have taken me to find that bug without the graph, because the actual bug was that I was missing some parentheses.
Thorsten
How has being at Recurse Center changed how you learn new things?
David
It’s made that important — learning new things. That’s the first thing.
I value learning very much. I enjoy it very much, I like getting good at things and understanding things. And, I mean, I certainly felt that way for longer than RC (we started RC in 2010) but it’s one of those sort of mutually reinforcing things. I brought that to RC but then seeing all the things that people did at RC put more of that in me.
The other thing — and I don’t exactly know where I got this idea from — well, I guess I do.
One of the things we talked about at RC a lot is: how to talk about RC, both to the outside world, but also to the people who are doing it? We talked, for example, about how do you know if you’re pushing yourself? Those sorts of conversations had a strong effect on me.
One unpleasant feeling is when you’re trying to understand something and you spend two days on it and you feel like you’re making no progress, right? You’re trying to understand a hard thing. When you started, it felt totally opaque. But then, a few days later, it still feels totally opaque. That feeling — it’s just really crappy.
And one of the things that I got out of these conversations at RC is that, basically every time I feel this crappy feeling, I remind myself that this is a good feeling because it means I’m at the edge, it means I’m pushing myself.
If I feel like I don’t understand this at all and I don’t have any purchase on the problem, I should keep working at it because it means I’m working on something hard and if I keep pushing, I’ll learn something. And at this point, as a programmer, I have enough experience to know that I will get it if I keep pushing, right? It might take a few more days, but I’ll get it.
And it really does happen. It happens all the time. Even yesterday, I was doing some Eulerian fluid simulation because it’s pretty to look at those visualizations. It was fun but I just didn’t understand advection — which I don’t understand well enough yet to explain it — and I was banging my head against the wall. And I was watching this video by Matthias Mueller, who’s a scientist at NVIDIA and has this incredible YouTube channel called 10 Minute Physics. I can’t recommend it enough. And I was watching his video over and over again. I couldn’t get it. Last night, a few hours after I had started programming, I still didn’t get it. But then, all of a sudden, it felt like I have purchase, I’m starting to see the big picture, I sort of understand…
Thorsten
… found something that gives you a little bit of grip…
David
Yes, exactly. And that’s the thing, right?
You’re in this situation and think, I don’t understand anything, I don’t understand anything about this problem. And you keep reading and you read somebody else’s code and you read the paper again and you read the blog post or the book and you still don’t get it. But then, two days later, you get it.
I think that’s probably the most important thing that I got in my personal programming practice out of RC — that I should “reclassify” that feeling, that I should see it as a good feeling, not a crappy one. It’s still unpleasant, in the middle of it, but when I’m feeling that, I should remind myself that this is good because it means I’m working at the edge and if I keep doing this, I will understand it. And then that will feel really good, actually good.
Thorsten
You said this came out of conversations with other people, internally and externally?
David
Yeah, to a certain extent.
The conversations within the people who worked at RC, they were often about questions such as: how do Recursors understand and conceptualize what they are trying to do at RC? Or about how to be effective at RC.
These are complicated, nuanced ideas, and eventually the thing that was the most effective turned out to be very simple. (Of course that’s true in so many contexts — making something simple is the most work, right?) But here’s this memory I have about this.
Gosh, this must have been— could it have been maybe the Christmas-ish of ‘21, like November and December of ‘21?
We were working on coming up with this thing that we called the self-directives — three principles, three ideas, sort of imperatives, things that if you do at RC, you’ll probably have a good experience.
There was a group of probably four of us working on this. And we read this book, a marketing book called Positioning (that I think actually everybody should read), that ended up being pretty valuable.
The reason we were thinking about marketing in the first place is because the self-directives are also a way to talk to the outside world about what you might do at RC and get you excited.
And the three self-directives— I’m just going to go to them because I wanna make sure I get the wording right.
The things we came up with are:
work at the edge of your abilities
build your volitional muscles
learn generously
Work at the edge of your abilities — I think is that’s pretty self-explanatory.
Learn generously — be public, learn in public, share. That sort of thing, but obviously it’s more nuanced than that. (It happens to be something I’m particularly bad at which I think is funny.)
Build your volitional muscles — I think that one was the most complicated, the one that we struggled the most to explain. Even that phrase, you know. I like that phrase — once you understand it — but it’s pretty opaque.
Basically it’s about tuning into the things that get you going, the things that you want to do because they get you excited, because they engage you rather than because you think you should do them or somebody told you that you should do it or whatever.
That’s the directive we struggled with the most, but then there was this thing that my colleague, Rachel, came up with. I think it was Rachel. She came up with a “volitional muscles workshop”, an optional one-hour workshop.
And the way I remember it is you come into the workshop and write out all of the things that you think you should do because of an insecurity or because someone told you. And then you write out all the things that you’re excited about.
That’s very simple. But I think that workshop is probably the most impactful thing that came out of our work on the self-directives.
Simple, right? You don’t have to call that a volitional muscles workshop. Just write out the reasons you think you should do things and then write out the reasons you want to do things. But people find it incredibly helpful and the phrase “build your volitional muscles” has permeated RC in a wonderful way.
Thorsten
So the reasoning behind this is that you should focus on the things you’re excited about because you will learn more?
David
Yeah, I’d put a slight tweak on that. To me, I think the most important thing is writing these motivations and reasons out.
It’s not that now you’ve written them out, you have to only focus on the the things on the right. The idea is you learn better when you’re working on something that engages you, that you’re naturally curious about, that you feel is relevant.
You know, I never enjoyed English class very much. It just didn’t feel relevant. I was a mathy, sciencey person. But then at RC, I had to do a lot of writing and all of a sudden I cared about writing. When something becomes relevant and exciting and interesting or necessary — that’s when you’re gonna probably be most successful learning about it.
Philosophy is a big word that gets thrown around too much, but in so far as RC has a philosophy, that’s a big part of it: people learn best when they’re given freedom and they choose to explore the things that actually interest them.
So that’s the idea.
The exercise helps avoiding spending three months at RC learning from a place of fear, when you think: I’m afraid I won’t get a job, I’m afraid I’m not a good programmer, I’m afraid I have to know all of this stuff.
There are plenty of people who were professional programmers and who had been professionally programming for eight, ten years, but didn’t have a CS degree. Then they came to RC and said, well, I need to do data structures and algorithms, because that’s the name of a class that everybody takes and I feel anxious about the fact that I don’t know these things.
Well, if you spend three months trying to learn from that fear and anxiety, I think on average, you won’t have nearly have as good a time or learn as much or do as much good work as if you’re coming from a place of curiosity, interest, excitement, doing things that feel really relevant to you.
Thorsten
That’s something that I still struggle with.
With the AI hype really starting two years ago, I thought I now have to learn about neural networks now, because I have to, because otherwise I’m missing out.
And I sat down and watched those videos, but I could feel that I’m not enjoying this. I don’t like working Python notebooks and… This is not what makes me happy. But I don’t know how to solve this in practice except to say, well, this is not for me right now.
David
I had exactly the same experience when it came to AI.
I was on sabbatical from April 2023 to April of 2024 and I spent that time programming for fun. I spent most of that time writing a text editor. You know, as one does.
But I also thought AI was super interesting, that these systems are wild. And at the same time I felt an incredible amount of anxiety about AI because, well, obviously I don’t feel obsolete as a programmer right now, but these systems keep getting better and better and is there a ceiling to that? Will I be obsolete at some point? If I don’t learn how to use these tools effectively, will I be at a huge disadvantage? And then, furthermore, is programming AI the only sort of programming that’s gonna matter at some point, right? So I had all of this anxiety in addition to actual interest in the topic.
So my friend Caitlin and I sat down and we went and watched some of Andre Karpathy’s videos and enjoyed ourselves and didn’t really write code, but did really try to understand: watch it slowly, pause, go back, pause, go back, right?
And what I thought was really instructive was that all I could think of was getting back to the text editor. There was a day that Caitlin couldn’t meet up and I was relieved, cause that means I get to work on the text editor.
And I think both, that it’s good that I know how to listen to that and also that the extrinsic motivations, the fear-based motivations, whatever you want to call it — those are real and they’re hard to deal with.
It’s way easier to come up with the self-directives than it is to apply them to your life.
Thorsten
Glad you brought up Karpathy. He said: “Learning is not supposed to be fun”. What’s your reaction to that?
David
I think I understand what he’s getting at.
That feeling of being totally lost in a problem and not understanding anything — that is not fun. And even though I’ve gotten good at reminding myself this is a good feeling and that I’m doing the right thing when I feel that — it’s still not fun.
There’s this joke that I make regularly, which I’m sure I’ve told you, it’s this: what’s fun about writing? Having written. That’s the fun part, right? The writing is terrible.
For for a couple of years, I had a piano teacher who I’ve now subsequently become very close friends with and, in fact, did RC. He used to talk about the short term and the long term in relation to learning. He said that the motivations and tools you need to get good at something are different in the short term and long term, but you need them both.
In the long term, you need inspiration and in the short term, you need grit.
He studied piano performance in college, in a music school. He’s very good — did choral accompaniment at Carnegie Hall a few times, you know, college choruses and stuff like that.
He said his long-term motivation was that he loves music and he wanted to get good at that. But that’s not enough to get you to practice seven hours every day, right? You have to have the grit.
You have to cultivate something that allows you to wake up and say, okay, I’m gonna practice scales for the next hour and a half, and then I’ll do exercises, and then I’ll play that part of that piece really slowly, perfecting it.
I played piano as an adult and played guitar for many years as a kid and I struggled with all of this. It takes a lot of discipline to say, okay, I’m just going to play these two notes over and over again, or these two transitions, these two chords.
Now going back to your question about what Andre said, that’s the thing that’s not fun, right? I think that statement — learning is not supposed to be fun — is provocative, but I think there’s a lot of truth to it. I do find learning fun, I like knowing new things, I like gaining mastery, but the process of trying to work on something that you totally don’t understand is painful.
Thorsten
It’s type 1 and type 2 fun, right?
David
I’ve not heard of this, but I’m excited to.
Thorsten
Type 1 fun is fun in the moment. Sitting in a whirlpool, having a beer. But type 2 fun is fun in hindsight. Climbing a mountain, running a marathon. It sucks in the moment, it’s exhausting, but once you’re up, you’re proud and say: that was fun.
Or pushing through that wall of not knowing how to solve a problem — it sucks and you feel despair and self doubt, but then you break through the wall and you’re proud and think that it was actually fun.
David
I think that’s totally true. The other thing is though, you can cultivate a feeling of fun in that moment, right?
Many years ago — 12, 14 years ago — my friend and I were hiking in the Adirondacks. It was November, there was a lot of snow on the ground, it was cold, it’s unpleasant to hike, and yet, in the moment… you’re in the middle of the forest and there’s snow everywhere and it’s so quiet and beautiful. You can still appreciate that even though you are in pain and, like, you twisted your ankle or whatever. It’s still possible to appreciate and enjoy that moment.
I regularly get joy in the process of programming. And I think similarly at the gym — it is true that working out is hard, right? But if you’re doing it well and you’re really pushing yourself, sure, it’s painful, but you can still enjoy the effort you put in. I mean, even practicing scales, I found this to a certain extent to be fun.
There’s this sort of, wax on, wax off, sort of craftsmanship version of playing this scale over and over again and you sort of find some flow or zen or whatever.
Thorsten
I feel like there’s another element to it. I played guitar in the past and when I switched back to doing more programming from doing a lot of guitar, I realized that I enjoy “practicing” computer more.
As in: I like sitting in front of the computer for eight to ten hours every day, even though my program might not run. I even enjoy debugging it for eight hours and figuring out how it works or doesn’t work!
With the guitar it was different. I like being good at guitar, but I never really enjoyed practicing with a metronome or practicing scales. Sure, sometimes I would get into the groove of it, but the feeling of frustration and even purely on a practical level — the mechanics of standing there with the guitar and playing the wrong notes or being out of time — I didn’t enjoy it in the same way I “don’t enjoy” fixing bugs.
Jerry Seinfeld was on the Tim Ferriss podcast a couple years back and he said, you have to find your personal — I don’t know how he phrased it — your personal sort of suffering. Find the thing that you can suffer through. [I couldn’t find that exact idea in the transcript, but they talk about something similar, so maybe I imagined the rest]
For some people it’s writing. They think: I hate writing and yet I am a writer, I can’t help it. Or comedians — they go on stage and they bomb and it’s horrible and yet the next day they want to go back up again.
Hearing that was eye-opening to me. There’s type 1 fun and type 2 fun, but there’s also this variation where some sorts of type 2 fun are more “enjoyable” than others and you kind of have to pick. Some people could never sit in front of a computer trying to debug why something doesn’t work, all day long, but we do.
David
Yeah. I think to a certain extent, it picks you. I had exactly the same experience with music.
I love music. I enjoyed playing it. And everybody struggles with practicing well and having the discipline for it, but compared to my friends who became musicians, I struggled with it more. They found more motivation and a higher… say, ability to have the discipline to do the things you need to do, to practice in the way that you need to practice.
And, well, I find that easier with computers. It’s why I’m a computer programmer ultimately.
Love this! About the AI stuff…Recently I came across a post about building a neural network in Go and since you are familiar with Go, I hope this might work out better for you :) https://datadan.io/blog/neural-net-with-go
Love this. I attended Recurse Center in 2013 and David is a gem of a human.