The greatest lie we tacitly perpetuate as programmers is that somehow, one day, with enough experience, it’s possible for someone to stop writing code that creates bugs.
If you believe this because someone told you: they are wrong. If you believe this because you really want to: please stop.
This idea of evolving above bugs is a very dangerous because it creates an unrealistic expectation. Worse, I see many eager programming beginners (many of them our own students at Code School) subscribe to this idea. I’m sure they believe it’s a manifestation of healthy optimism in their ability to improve as a programmer. It’s not.
Thinking there are such things as programming superheroes that are ten times faster than everybody else and yet somehow leave an equal or smaller amount of bug in their wake is a delusion. These so-called “10X” programmers don’t exist. It’s akin to believing that magicians can really make objects disappear out of thin air.
They can’t. It’s a trick. There is always a trick. The biggest trick of all is the one you play on yourself when you rule out the obvious truth: you cannot fathom how much time these people have spent practicing, failing, hating themselves, trying again and eventually succeeding at fooling you. Penn & Teller aren’t supernatural, their dedication to deception simply borders on mental illness.
You actually don’t want to know what their secret is. That’s because you already know it and you don’t want to accept it. They work very very hard. Harder than you can imagine, and for something you may deem an utter waste of a human life. And they do that because they like it. I could say it’s their passion but as a few people (Avdi Grimm) in the tech industry have aptly pointed out recently, passion is something lovers and parents feel. Dedication feels like a better word. I’m sure Penn & Teller like their job a lot but I’m also convinced that there are times when they hate it too. Saying workers have to be passionate is dangerous because passion tends to smooth over things that shouldn’t be acceptable at work.
With programmers, the trick is similar. Whatever unreasonable amount of time it would take to perfectly understand how — for example — HTTP caching works, there exists people who have spent those hours patiently learning when I really don’t feel like doing that. It’s easy and frankly unfair for me to call these people geniuses and wizards. When compared to my baseline laziness, a lot of people qualify for the genius status. Yet all they’ve done is read code I assumed was probably too hard to understand.
Maybe you told yourself you had too much work to do and couldn’t justify spending time learning about something you didn’t understand. You looked for an easier answer elsewhere. Maybe on Stack Overflow, or in a blog post that matches your precise problem better. Those are useful solutions and I regularly use them myself, but they’re not answers.
An answer or a proof in Math (a subject I nearly failed high school for) is something that displays your clear understanding of the problem at hand and the path you took to achieve a given solution. Even though I hated Math in school (mostly because I disliked school in general), I remember how virtuous that seemed to me. Many students see it as an annoying deterent to cheating, and that seems appropriate.
Finding the solution is something most people can do, even with limited time. Finding the answer requires patience, attention to detail and critical thinking.