In early 2002, I started taking guitar lessons from Chris Broderick. To say that he’s a good guitar player would be a massive understatement. Guitar, like many skills, has a steep learning curve. In my opinion, it takes 3 years of consistent practice just to be a bad guitar player. I had started playing guitar a couple years before, so I wasn’t any good. Like most things with a steep learning curve, I decided it was best to have somebody to learn from.
I arrived for my first lesson with Chris extremely nervous and unsure of myself. As we got started, I couldn’t seem to warm up and play fluidly. I was sitting in front of a certified bad-ass, someone whom I could never hope to impress even on my best day, and my fingers were locking up and I was botching simple riffs that I had played thousands of times. Chris demonstrated a few things on his guitar that melted my brain, things that I could never conceive of being able to perform, and he did it with the appearance of effortlessness. I felt like the least-skilled guitar player ever, and I was convinced that I was the worst student Chris had ever had. I left that lesson extremely humbled and wondering if I should take voice lessons instead.
I was discouraged. I was comparing myself to a master (though, humble as he is, Chris would probably point to others and claim that they are the masters, not he). He was synthesizing years of relentless practice and learning into a few seconds of ridiculous speed and precision when he showed me some of the stuff we could work towards. In those few seconds, I didn’t get to see the ten hour days spent practicing modes, scales, and atonal finger independence exercises. I couldn’t see the 4 years of music school. I had no sense of him struggling with something. I was confusing years of diligent effort for natural talent, and it was only once I got to know Chris better that I learned how he got to where he is. I was looking at a picture of the forest without being able to count the trees that formed it. I was assuming that the forest had simply always been there.
It took me a while to realize that I wasn’t doing myself any favors by comparing myself to an expert, and that my discouragement was entirely of my own creation. I had sought out this particular teacher out because of his ability, but at that point I didn’t realize that it wasn’t his ability that was important, it was everything he had gone through while developing it; that was what I wanted to learn, and that was hopefully what he was going to share with me. After a few more lessons, it was clear to me that the only thing that mattered to Chris was that I was improving from lesson to lesson. Why shouldn’t that be the only thing that mattered to me as well?
People often comment that professional athletes, musicians, and artists make difficult tasks look easy. When we watch them in action, it’s easy to forget we are seeing the results of countless failures and iterations because the current moment consumes us. We are awed by their abilities, but also by their dedication to their chosen field, even if we don’t realize it at the time. Talent always helps, but nobody becomes an expert without failure or hardship. Learning a complex skill, whether it’s playing guitar or learning how to code, is at its core just an attempt to optimize failure. You want to fail quickly and in such a way that you have good feedback for what to try on your next iteration. The assumption here is that there will always be failures. In my experience, that’s a very safe assumption. Great teachers are invaluable because they have failed over and over, and know how to distill those failures into lessons that optimize the value of the effort from their students.
Every developer I know can tell you a story of how they wiped out a production database, crashed a vital server right after a product launch, or spent hours debugging code when it turns out there was simply a typo somewhere. Those are not good days, and they will make you feel like an idiot. But every single developer has dealt with them, and everyone that wants to be a developer will deal with them (hopefully under supervision in a controlled environment because crashed production systems are never good). Behind every developer that can crank out awesome code, there are countless hours of compile errors, stupid bugs, and things done the wrong way. In front of every developer are also things she doesn’t know how to do, languages she wants to learn, skills she’s probably not so good at it, and new things she will do the wrong way. That’s just part of being a developer.
Don’t be afraid to fail. Compare yourself only to what you’ve done and not to the accomplishments of others. Lean on your mentors not because of what they can do, but because of where they’ve been and the failures they’ve counted. Don’t mistake the appearance of effortlessness for a lack of effort.