How I learned how to learn how to code
I was reading the Turing Omnibus, doing some research into error correction, and I learned about Hamming Codes. I might have understood the concept at the time, but today, what I remember is the offhand comment my friend made about their creator, Richard Hamming.
Oh you should watch his talk “You and Your Research”
At this point in my life, I'd been laid off form my first startup and was taking a break to “get better at programming”. My goal was vague, I admit. I loved development and I'd worked very hard to get that first job (story at a later point), but I realized about 10 months into working that I was spinning my wheels. I was learning the libraries and could hook them together, but I was playing with Duplos, mentally. I didn't have the deeper understanding of computers that gave all that library code some context. I didn't understand what it was doing at any sort of level but the most superficial. And I was aware that the world in which I was traveling was moving faster and faster, which effectively made me standing still or moving backwards.
“You and Your Research” is a brilliant, inspirational talk, which I've since watched many times. But I'll focus on one point Hamming makes, which hit me like a brick over the head.
Given two people of approximately the same ability and one person who works ten percent more than the other, the latter will more than twice outproduce the former. The more you know, the more you learn; the more you learn, the more you can do; the more you can do, the more the opportunity - it is very much like compound interest.
He's actually making two points here, which I'll unpack.
Firstly, because because knowledge is compounding, knowing more is a virtuous cycle. And in terms of what you choose to learn, there's a spectrum from essentially useless to rather useful. And what I mean by useful knowledge here are things that don't really change all that quickly and things you can build on. In fact not all knowledge is actually compound useful (or maybe if its not compounding knowledge its actually just trivia :thinking_face:). Thus, you should work hard to identify knowledge that does compound.
This corpus of knowledge is generally called serious tone Computer Science, which is neither about computers nor is a science (sic(p)). That being said, its useful great stuff, especially if you want to stop spinning your wheels and start getting somewhere. I'll tell you that stepping of the treadmill and ambling through the dustier sections of CS in the library, picking up Olde Books (like “Programming Pearls” or “TCP/IP Illustrated”) taught me things that no React tutorial ever could. This old stuff gave me, for lack of a better term, intuition. And its since proved really useful working in lots of domains, from shite frontend webapps to infrastructure to devops, from mac to linux to windows.
Now I'm not saying that the particulars don't matter; they really do. Knowing the platforms you're working on is crucial to doing good work. But what I am saying, is that spending some time with the deeper subjects will pay dividends. Dividends in your ability to read unfamiliar languages and codebases and paradigms, dividends in your ability to debug problems, and dividends in your holistic enjoyment of your work, because you'll start of see the larger picture instead of feeling like you're constantly falling behind. That's what we mean by perspective. And I'm not there yet, but I feel like I've found the pointer to the moon.
The other point Hamming was making in the above quote is about the virtues of drive and hard work; these are the things that it takes to succeed and do the good stuff. No substitutes for putting in the time on the right things, to be sure, but he's also making a deeper point about understanding the keys to success.
I took from this that my achievements were timebound (i.e. We're going to die some day and have a limited amount of time to do something good), and so focusing on leverage (activities and process that have a multiplying effect on my knowledge, output, or impact) was essential to using that time wisely.
On learning: lots of smart people have studied how to more effectively learn (Barbara Oakley in particular is someone you should look up). Learning more effectively makes your time spent learning literally have a greater output.
Spend time understanding the best resources to learn from and the experts from whom you can learn, especially those who sift, synthesize, and summarize information (Shane Parrish calls this Mastering The Best Of What Other People Have Already Figured Out). These people are literally doing the work for you and you should greedily take advantage of that fact.
Constantly, ruthlessly cut wasteful activities out of your life and seek to do things more time and energy efficiently. For example, I read “Body by Science”, thanks to a recommendation by Nassim Taleb, and saved myself untold hours of boring exercise.
Quit social media. Do it now. You'll thank me in like three years when you realized what a head-fuck it is (admittedly I'm still on Twitter).
I'm not arguing for a life-hacks style approach, but for simply recognizing that achievement takes great effort and sacrifice and that using your time well and making space in your life for that work are necessary and important steps along a journey of continual, steady upward progress. Take the long view and you'll see far.
- This, I subsequently learned, is a Red Queen situation, well treated by Farnam Street [https://www.fs.blog/2012/10/the-red-queen-effect/] ↩︎