I recently saw this question on Quora:
How can I stop feeling dumb when learning to program?
The author then goes on about our industry and how for everything they learn there are 10 things they realize they don’t know. It’s like the universe expanding, no matter how fast you learn the amount you need to learn is constantly growing faster than you can learn it. As a newbie, and we all were one once, it’s incredibly intimidating.
Newsflash - as a person who wrote his first Hello World around 30 years ago it’s STILL intimidating. I’m gonna brainstorm a list of things that I don’t know enough about right now:
- 3D Graphics
- Tile Maps
- Scene Graphs
- Web Security
- Clojure Macros
This is off the top of my head. Oh:
- 3D Engines
- The latest iOS APIs
I’ve been doing this for professionally for about 17 years and have a fancy job title so surely there’s not more right?
The stuff I don’t know:
Always outnumbers the amount I do know, by a factor of a jillion-billion, and that’s never gonna change. This is not meant to be a message of hopelessness. A lot of advice to “turn into the skid” and accept it is well-intentioned and accurate, but sure doesn’t make you feel much better. The fact is there are ways to learn new skills and feel good about yourself, at least some of the time.
Remember your first Hello World? Remember how AWESOME that was? That’s what got me hooked on programming years ago. I actually mistype Hello as Hellow so much I have to concentrate on the word hello. It’s that rush that causes me to fiddle with more programming languages than I probably should.
You want to look for quick wins. The quickest way to learn a new language or skill with quick wins is using koans. Take the Clojure Koans for example. When I was thrust into a Clojure project I immediately went through these and they are extremely well paced. So much so that the entire time I was learning a new language I was stumped one, maybe two times. To the point I didn’t think I could actually program in the language until I tried writing programs on my own and what do you know I can do it? The best part of a koan is you can keep it around in source control as a reference.
The other quick win is if you are learning a new skill from a book, go ahead and type in those code samples. It makes the book take a lot longer sure but you’ll retain more and you’ll get valuable positive feedback.
What we want here is a positive “you’re learning more” feedback loop, as opposed to the negative feedback loop of feeling stupid.
Kata’s are kind of my hammer, but deliberate practice works far better than a project for positive reinforcement while learning and katas are one of the best forms of positive reinforcement I know.
The problem with a project is it’s naturally open ended, with a lot of twists and turns along the way. Take my Go language 2D game I’m writing. Certainly as I write it my Go and SDL skills are improving, but in fits and starts and it takes a long time. Now compare it to the String Calculator kata that I last performed on iOS. My first time through I struggled with the String libraries, but after a few days in a row I was trying out new and improved ways to solve the problem and getting faster at it.
A kata forces you to return to the same problem and resolve it better, with improving skill. The only way that happens on a side-project is a bug.
Remember What you DO Know
That part about source control for your koan? That’s a record of accomplishment. Picture running the marathon for a moment. Each mile feels harder than the last as you cross 18, 19, 20 miles, but those numbers also let you know what you’ve already completed. When learning we’re often so focused on what we have to learn we forget what we’ve already accomplished. Go ahead and take a few moments to look back, both as a reference and as a pat on the back. You deserve it.