When learning any skill, the key is to practice. Whether it’s programming, playing an instrument, playing a sport or yodeling, practice makes perfect. You start off with something small, like “Hello, World” or playing a single note, then you practice until you understand it well and it becomes second nature. To grow the skill, you need to add to that small part. You take what you’ve learned from writing “Hello, World” and you rearrange the commands, or add new ones. You take that single note you learned how to play and you add some more, learning a scale or a chord. Then these new tasks become second nature. You understand them and you’ve learned them. You can play scales with your eyes closed, and write programs without looking at a reference.
If you keep repeating this process, you’ll notice a pattern. Each time you start learning a new technique, built upon an old technique, there’s a lot of work involved. You focus your mental energy on understanding the differences. Eventually you become comfortable with the new technique, and it no longer requires much effort. You can perform it without thinking. Once you can perform without thinking, you’re not growing that skill anymore; the thing you’ve just learned becomes another tool on your bat-belt which can be used to learn and grow newer, more challenging techniques. In order to grow and become better at something, you must keep learning new things, applying the techniques you’ve mastered and developing new ones.
Streets of Rage was a series of beat-’em-up games for the Sega Genesis. One of the most interesting features of its gameplay was that the bosses at the end of a level became standard enemies in the following levels. In order to continue through the game you were forced to trivialize the enemies that at one time provided a significant challenge. Next thing you know, you’re fighting six of them at once and you can do it while yawning.
What kept the game interesting is that you’d have to keep growing your bad-guy-fighting skills. Each level introduced new mini-bosses and bosses that prepared you for the later bosses. How boring do you think Streets of Rage would be if, after beating the first boss, that boss was the only enemy you fought for the rest of the game? It wouldn’t matter if he came at you in swarms, eventually you’d become so comfortable and efficient at defeating him that the game wouldn’t be challenging anymore.
This same concept is something I look for in my professional life. I want bigger and better challenges. If I keep fixing the same kinds of bugs day-in and day-out, using the same tools, performing the same tasks, I’m not growing as a software developer. Skills which have become trivial for me are tools that I can use to learn more complex skills.
The ideal challenge is something that’s just beyond my abilities. Close enough that I’m confident enough to do it, and far enough away that I need to really stretch on tip-toes to reach it. Eventually I’ll get comfortable with it, I’ll be a little taller, and I can reach a little higher.