A year ago I started on a goal to write and publish code every day to my github account. That streak lasted for 250 days. It was a learning experience that gave me time to broaden and deepen my knowledge of Python. Though the actionable goal was to maintain a streak of activity, the underlying purpose was to get better at programming (both speed and quality).
It was in many ways a success. I learned a bit and got better. However, as a form of practice it had limits and ultimately improvement plateaued.
Since then I’ve been thinking off and on again about what it would take to reach the top. Not the top 1% but the top 10 globally of Python programmers. Even though there is no measurement of the top as there is in something like chess, it’s clear that as an intellectual endeavour some people know more and can write better code than others.
Then I read about how Ben Franklin learned to write better. He started by finding a source of writing he wanted to emulate – in his case Spector magazine articles. He would read the article sentence by sentence and make notes about each intention and meaning. After a few days when he forgot about the article he would go to his notes and try to reproduce the article from them then compare against the original and identify where his version wasn’t as good. By digging into why specific differences were better he was able to learn how to write better. He was able to expand on this technique to improve his vocabulary and techniques for overall structure of a story.
I have on many occasions tried to equate learning to program with authorship skills. This is another one where I think programmers have an opportunity to learn something.
Becoming better at something takes deliberate practice. The keys to effective practice is focus and feedback. You need to identify things that need to be improved and focus on those individually and then get immediate feedback to learn what can be done better. You then cycle this process for hours/days/years.
Until reading about Ben Franklin’s technique I didn’t have a good answer for how to objectively get the focus and feedback needed for practice to work.
The current approach to learning in a professional setting is:
- peer review
Peer review is great if done right. If people use the review process as a chance to coach instead of just scanning for overlooked bugs then there is a chance things will learned, discussions will be had and the product will get better. However this is dependent on peers that want to offer this kind of feedback and who are sufficiently advanced to point out areas for improvement.
Books and reading can be a source of great ideas but reading ideas is not the same as originating them. People learning a spoken language experience this difference. Exceptional amounts of time spent learning vocabulary, verb conjugations, prepositions and sentence structures can make it possible to understand something they read, while at the same time actually being able to speak a sentence is stilted and slow. The mental processes for taking an idea and turning it into speech or code is different from reading and understanding what you read.
Conferences are much like books except you gain a few more mental hooks to hang memories on (I remember learning about that at a conference in SF last year), and the chance to discuss things with peers.
None of these options really provide a great way to reach the top. But Ben Franklin’s technique for practicing writing may be a hint at something that could actually people achieve elite levels (with a lot of hard work).
It’s an idea I want to explore further in the coming months.