This article is the fifth in our new series of blog posts for 2019 – posts exploring topics from the perspectives of our expert instructors. Subscribe to our blog to read analysis, programming tips and overall thoughts, straight from our instructors. This month, Corbin March, Software Guild Lead Instructor, introduces you to how you can learn programming in just ten short years.
I came to programming late. I wasn’t one of those 12-year-olds who designed elaborate video games on their Commodore 64. I played plenty of games on the Commodore 64— Ultima, Seven Cities of Gold— but I’m pretty sure I didn’t even know it was possible to write your own video game at that age. The truth is, I didn’t know anything about programming for a long while.
This made my discovery of it all the sweeter. I loved the creativity involved. The problem solving. The sense of tapping into something big and mysterious. It didn’t take long before I was hooked.
The excitement I felt didn’t mean my journey was easy, though. Early in my career, I worried often. I worried that I didn’t know enough. I worried that I was lagging behind everyone who did. I worried about those 12-year-olds who did manage to program elaborate video games on their Commodore 64. (People who compile their operating system from source are intimidating.) Having been a late bloomer, I thought that my slow start meant I needed to make up for lost time. This worry made me anxious, and that anxiety diminished the joy from my otherwise amazing career.
I wasn’t fully aware of this anxiety at the time. It wasn’t until I read Peter Norvig’s “Teach Yourself Programming in Ten Years” that I even recognized it. In 1,500 words, Norvig’s popular essay managed to touch on universal subjects that affect every person who wanted to code— myself included. I didn’t realize it then, but the essay’s themes would become major factors in my development as a programmer. Norvig’s advice allowed me to re-frame my ambitions, relax, and enjoy my own process of professional development.
What Norvig Has To Say
“Why is everyone in such a rush?”
-Peter Norvig, “Teach Yourself Programming in Ten Years”
Peter Norvig is an American computer expert, most famously known for his research and algorithm work at Google. He has worked for NASA, written definitive books on artificial intelligence, and taught hundreds of thousands of students through massive open online classes (MOOCS). If we can take anyone serious on this subject, it’s him.
“Teach Yourself Programming in Ten Years” is his case against the notion that you should— and can— learn programming quickly. The points he makes are universally applicable to everyone who aspires to become a successful programmer.
Don’t be in such a hurry. (But don’t procrastinate.)
Learning to program is a lot like learning to play a musical instrument. It would be absurd to think you could become a master pianist by reading a book and watching a few YouTube videos.
The learning process is subtle and nuanced. It requires you to study theory and to physically practice. (Mostly practice). Your “ear” gets better the longer you do it. Often, you can’t see what new skills could be ahead of you until you’ve first made some progress. Mastery takes time. That’s what makes it so interesting.
Programming works the same way. “There appear to be no real shortcuts,” Norvig says. “Even Mozart, who was a music prodigy at age 4, took 13 more years before he began to produce world-class music.” However, this doesn’t mean you can’t be a productive programmer immediately! Since programming is expansive, there are many, many ways to contribute and grow. Up-to-date knowledge on technology and a willingness to learn make a passionate Junior Developer an incredibly valuable thing, far more than a professed expert who is stuck in their ways.
All phases of the learning process are fascinating. The important this is to start your journey. Then enjoy it!
Learn broadly (as well as deeply)
For the first couple years of my career, I was obsessed with being the best at my tools. I wanted to know everything there was to know about PHP and SQL. Trouble was, after hours of problem solving with PHP and SQL, the last thing I wanted to do was write more PHP and SQL. I came to learn an important truth: attempting to develop skills and enjoying the process of doing so aren’t always the same.
Learning broadly means gaining a basic understanding of a wide range of topics in your field, while learning deeply means choosing one topic to master. The more I struggled to learn deeply, the less I accomplished. PHP and SQL were important, but what really interested me was machine learning and 3D graphics. It wasn’t until I let myself branch out that my learning accelerated. My interest in machine learning and graphics required new tools and languages. Those new concepts changed the way I thought about my existing tools, which further changed the way I thought about new tools. It was a virtuous cycle.
One of Norvig’s points of emphasis is “Get interested in programming…” The only way to do that is to work on things that appeal to you.
One of the most uncomfortable sentences to utter in the English language is “I don’t know”. We’re social. We don’t want to appear foolish. To hide our ignorance (which really isn’t ignorance) we might keep our interest in programming to ourselves or convince ourselves we can learn programming on our own. After all, the internet is full of free resources.
That’s a mistake.
It’s outdated, but there’s still a stereotype of the lone developer slinging brilliant code in some dark basement fueled by Mountain Dew and pizza. That’s just not the ways it works anymore (if it ever did). Programming is incredibly social. The best programmers learn from each other. Browse through GitHub, Stack Overflow, YouTube, or countless tech blogs and you’ll find countless people talking about code, sharing their code, and letting other people influence their code, all for free. Tech user groups are full of people who love to meet face to face, share the projects they’re working on, and talk about ways to improve.
Norvig emphasizes how important it is for programmers to work on projects with other programmers. “Be the best programmer on some projects” he says. “Be the worst on some others. When you’re the best, you get to test your abilities to lead a project, and to inspire others with your vision. When you’re the worst, you learn what the masters do.”
To learn faster, we should find our people. Find individuals who support you, challenge you, and give you a new perspective.
We can’t learn to program by reading articles and watching videos. We might be able to recall facts about programming, but we won’t be able to build anything interesting. The only way to learn to program is through practice.
As a thought experiment, pretend we develop an interest in our local history circa 1875. Maybe we are particularly passionate about facts and stories. Reading and watching works okay for this type of learning. There are no additional skills required beyond memorization; recalling facts and stories comes down to basic information retrieval. If reading and watching helps us memorize, these techniques are enough.
But what if we want to do more than just recall information? What if we want to produce amazing period costumes? Reading and watching won’t help us much unless we’re already handy with a sewing machine. To build costumes, we must learn to sew. And we’ll most likely make mistakes. Our first costume won’t be as good as our fifth. Our fiftieth will be even better.
Programming works the same way. We need to be comfortable starting with the basics and making mistakes. Your first project won’t be as good as those that follow. With time, you’ll gain expertise. Norvig tells us that “the key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability.” As programmers, we need to be willing to always be ready to ride the learning curve.
Not all practice is equal, however. For example, I enjoy MOOCs. Through them, I’ve felt the impact of meaningful practice. If a MOOC provides open-ended practice material that’s just beyond my grasp, I learn a lot. But if the course follows the all too familiar formula:
Watch me type some words
Now you type them
Tada! You’re programming!
I learn very little.
Meaningful practice is a manageable struggle. It includes failure, adjustment, and growth.
Thank You Peter Norvig!
It took me awhile to fully appreciate “Teach Yourself Programming in Ten Years”. Norvig packs a lot in, and distills complex ideas down until they’re simple. It’s only after some thought and real-world experience you realize the concepts he talks about are bigger than they appear.
All aspiring programmers want to do well. There’s also plenty of professional resources out there that imply “doing well” translates to “being the best, in a relatively short amount of time.” This just isn’t so. Norvig’s essay is a reminder that true progress moves on a slower timeline than ambition, but that it’s worth it every step of the way. To truly become an expert in this field, you have to put in the work, be ready for setbacks, and take joy in the learning process.
So, if you’re interested in programming:
Start. Relax. Have fun. Be patient. Be persistent. Dabble broadly. Connect with people. Share. Be curious. Be humble. Put yourself out there. Have fun.
And most of all, have fun.
Ready to start learning? The Software Guild offers an Introduction to Web Development bootcamp that can help you build the foundations of your programming career. Fill out a free online application, and begin your journey to a better career.
Want to read Peter Norvig’s famous essay? Check it out here.
Want to know more about me? View my instructor profile at The Software Guild.