Bytes: One of the most dangerous things I’ve seen happen to people who are just starting to code is being told that it’s easy. Most programming doesn’t require a special brain, but it’s more frustrating and messier than anyone lets on. There are thousands of enthusiastic blog posts, classes and apps that aim to entice you with the promise of a slick, unequivocal procedure for learning to code. They rarely mention the tedium of getting your environment set up (which, trust me, even the nicest of your programmer friends don’t want to help you with, because that stuff is mad frustrating and nobody remembers how they did it).
They don’t tell you that a lot of programming skill is about developing a knack for asking the right questions on Google and knowing which code is best to copy-paste. And they don’t let you in on a big secret: that there is no mastery, there is no final level. The anxiety of feeling lost and stupid is not something you learn to conquer, but something you learn to live with.
What I forgot is that the most common state for a programmer is a sense of inadequacy. As a programmer, there is a limitless amount of stuff to learn. You can become a specialist in one language or framework, but if your job is to build things efficiently, you will constantly need to be learning new tools and constantly feel out of your depth. It helps to be mentally prepared for feeling stupid.
The psychologist Mihaly Csikszentmihalyi came up with an insightful way of visualizing the learning process (for any discipline):
I’ve found my experience to follow that line closely, and came up with this Recursive Recipe for Learning to Program:
- Follow a tutorial step-by-step even if you don’t always understand what you’re doing. I like to think of Hunter S. Thompson copying the books of the Great Masters on his typewriter. You’re getting a feel for how things are done in your new language/framework. This part should be easy, if boring, because you’re just doing what you’re told. [Incline of Optimism]
- Rebuild the thing you just made or a slight variation of it. Try not to use the tutorial too much. Realize just how little you understood of what you were doing. [Fear tugs, slowing your ascent]
- Try to build something simple that you actually want to make. Discover that you have absolutely no idea what you’re doing. [Sea of Despair]
- Find a new tutorial related to your new project. (Hopefully your tutorials are providing you with increasing background on the language.) Follow the steps. [Slight sense of understanding, rise in self-worth]
- Rebuild the thing yourself. [Fear]
- Start a new project. [Despair]
- Repeat steps 1 through 6.
I’m a big fan of tutorials. During this process, I made an app for collecting the best tutorials recommended by programmers who’ve used them. Hopefully it will shorten the stumbling-around period before you get into the groove of learning and help you find the good stuff faster.
As long as you learn to grind through the frustration, you’ll come out on the hillsides and get a good view of your progress. Be okay with not understanding everything, trust that you are getting better even when you can’t see your progress, and don’t rush. Good luck.