We’re trying to find a way of getting from “decent” at building programs, to “great”. Here’s the approach, in short.
There are few dozen skills, tools, ways of thinking that I generally refer to as things, mastering which will make you a great programmer. They interplay with one another, and can be tagged (i.e. many-to-many) with a number of common themes.
Learning takes focus, and focus is limited. You can only focus effectively on a few things at a time, and so you can only effectively learn a few things at a time. The concrete value of “few” differs from person to person, but the limitedness does not. Nor does the result of crossing the limit — you spread your focus too thin, and start dropping packets.
As a concrete example, most beginner programmers can’t focus on writing idiomatic code in a new language and name things well and write efficient code and design for reusability and actually write code that works, all at the same time. At best, some of these concerns will get attention, and others will get none. At worst, each will get a tiny bit of scattered attention, amounting to poor execution across the board.
So, the approach is to sort the set of all things in order of decreasing ROI[1], pick four things from the top, read their descriptions, re-read the common themes that connect them. And then, go code whatever it is you normally code. Set a timer to remind you every 10 minutes to check “how is my code doing in terms of the four things I’m learning now?”, until it becomes automatic. Keep a journal[2]. Write down observations about how your code changes because of your focus on learning the four current things. Do this in real-time, when the impressions are fresh[3]. Separately, make daily time for introspection — calm down, detach yourself from the immediate problem at hand, and think about how you’ve been doing lately in your quest to become great at programming.
Depending on the volume of code and the frequency with which your current things are occurring, it may take between a week to a month to internalize a thing. When internalized, remove it from the list, and pick the next one. Repeat until no more things are left to learn. Once done, repeat the whole process — you are likely to discover that with all your new mental context, you now understand the written descriptions and examples on a whole new level, and the interconnectedness of things and themes is deeper and richer than you originally noticed. After that, revisit once a year to keep yourself on your toes.
Sounds like a lot of work? Well, did you think there was “this one weird trick” that can make you “a master in 10 days” or something? Ever heard of delayed gratification? We’ll need to get real comfortable with that concept :)
[1]: ROI stands for “return on investment”. In this case, the ROI of a thing is highly dependent on the mental state of the individual, in particular their progress in learning things. The same brush in the hand of an average child does different work than in the hand of Picasso. So as you progress, resorting the list frequently, as well as revisiting things that you thought you already learned, is necessary.
[2]: In general #writing-prose #todo is super-helpful for getting better at thinking. Writing organizes your thoughts and generates ideas. #todo also note that most people tend to ignore the journal advice, and that sets them up for far less growth than they can be capable of
[3]: This develops your self-awareness, which is one of the cornerstones of getting to the next level.
Comments
Post a Comment