Coding as Craft: Going Back to the Old Gym
46 points by agent281
46 points by agent281
In the words of Jack White:
Well, you’re in your little room, and you’re working on something good.
But if it’s really good, you’re gonna need a bigger room.
And when you’re in the bigger room, you might not know what to do.
You might have to think of how you got started, sitting in your little room.
I strongly agree with this. Although I unfortunately suffer from wanderlust and have projects in multiple languages (Gleam, Fennel) I first touched this year, for my actual production toolbox(es) I explicitly memorize core functions etc. to not waste time with documentation. Rote learning eliminates many search and experiment costs. Knowing your tool in and out is a huge production efficiency factor, enabling instant brainstorming, comparison of alternatives etc. and lets you suspend ever more complex systems in your mind, since you’re not wasting precious working memory on newly reacquired nuts and bolts. This seems to scale higher and higher.
Outsourcing yourself (to AI, and others) slowly increases those costs as you become less confident about whether something’s correct/will execute etc. When managing ever larger teams, enabling others’ productivity’s worth the trade off. But when you e.g. just give in and accept boilerplate, letting the machine fill it in for you (instead of abstracting it away with a DSL/framework/better primitive system)…
How do you practice rote learning?
When learning a new language or a complex library, I sit with a paper notebook reading/skimming the docs and jot down important interfaces. Works quite well with nontrivial Rust crates (I just wish Rust syntax was easier to handwrite) and modules in the standard library. Python standard library docs are also quite good. Haskell libraries can be a joy to study too.
Reading/skimming good documentation from its beginning to the end is a good way to form a “narrative” of the authors, their perception of the domain, their depth and their blind spots. This answers questions like “what this library likely cannot/is not supposed to do” well.
What a fantastic post. Put my own thoughts into words perfectly in a better way than I’ve been able to describe them.