Thoughts on mastery in programming
I recently met Ivan, a high schooler who is interested in both programming and self-improvement — two of my favorite topics. He taught himself to program and created several iPhone apps. He wanted to improve his programming skills but was feeling stuck. He eagerly listed the technologies he had mastered, but wasn’t sure what he should tackle next.
He also asked question that I’ve heard many times before: Is it better to go in depth on one programming language or learn a whole bunch of them? I wasn’t very articulate in answering him then, but the question stuck in my mind. Here’s what I wish I’d said.
The sure sign of a beginner programmer is that you measure progress in quantity of frameworks, technologies and APIs learned. You’re always wondering which stack to learn next. At this stage, you get stuck as you continually learn new things but their utility remains unclear.
The next step is when you focus on one programming language and grok it deeply. You’re informed about the choices and tradeoffs the designer made. You know what abstractions you can use. You also understand how the language patterns influence the form and type of programs you write. Now you’re ready to build a career in software.
An expert, however, must circle back to the novice’s quest. You find new theories, languages and frameworks, and incorporate them into your worldview. This time, armed with a depth of knowledge, you compare and contrast different ways of accomplishing your goals. You gain an arsenal of tools for thinking. You can change your frame of reference to find simple solutions to old questions and discover new classes of problems altogether.
The great thing is, you can replace “programming” above with any field and it still holds. In his Nobel Prize speech, Richard Feynman discusses the importance of knowing many different perspectives. Some of his greatest contributions to science came when he used the math from one area of physics to drastically simplify problems in another. In the words of Alan Kay:
“A change of perspective is worth 80 IQ points.” I’m going to send this to Ivan, but I hope this will be useful to others as well. To achieve proficiency you need to learn one way of thinking well. True expertise comes when you can view your field from multiple angles. It’s easier said than done. Good luck Ivan!