The Myth of the Super Programmer
This great article was originally posted by John Sonmez at his blog.
I received an email this past week that disturbed me.
Basically the author of the email inferred that most of the topics I talk about in my blog posts and Pluralsight videos are relatively easy topics, but that I had hypocritically suggested that interviews should be hard and should be designed for “real programmers” or super programmers.
Essentially the point of the email was that application developers are not “real programmers” and “real programmers” do hard stuff with difficult math.
Searching for the super programmer
I don’t think this attitude or understanding about programming and software development is unique or irregular. Even Scott Hanselman has called himself and thought of himself as a phony.
His post on the subject resonated with me, because I think the same thing about myself sometimes.
Sometimes, I wonder if I could really tackle the really hard problems.
I would venture to say that most software developers have some sort of belief that they are just a regular programmer, but there exists out there some super programmers who actually do the difficult algorithms that control caches on hard drives and index search results for Google.
Now, of course there are programmers writing code that does all kinds of complex things that you and I don’t understand, but how different are those programmers from the rest of us?
Is there really a difference between an enterprise application developer and a programmer who writes search algorithms for Google and firmware which controls the mechanical operation of the head of a hard drive as it reads data from the platter?
Before I give you my answer…
Let’s talk about problems for a minute.
What is the most difficult problem you have ever been asked to solve?
How did you go about solving it?
In the end, when you actually solved the problem, did the solution seem easy?
When you go back and look at the problem, does it seem much simpler now?
Lots of questions, I know—but I want you to really take the time to think about those questions before reading on.
It is important to understand the difference between perception and reality and many software developers, myself included often have trouble distinguishing between the two.
You see, our perception of a problem is often much different than the reality of that problem. When we don’t understand a thing, it seems much much more complex than it is. But, once we come to understand a problem, we see how simple it actually was to begin with.
Let me give you a real example. Take a look at this mathematical equation below.
Now there are two kinds of people who will look at this equation.
1. Those who have a decent understanding of mid to advanced mathematics and immediately recognize it and understand it instantly.
2. Those who have never seen these symbols used together and immediately think this is some kind of complex thing that would take them years to learn.
I may not be exactly correct, but my point is there is a clear division between those who understand and those who don’t.
I can very simply explain this set of symbols to you in terms you already understand.
That equation is the same as this code:
var total = 0;
for (int i = n; i <= m; i++)
total += f(i)
So what is my point?
My point is that there are very few actual hard problems in math, programming, heck life in general, and usually those few hard problems can be decomposed into smaller problems (sometimes more than once), until you end up with a simple problem.
The point of this blog, the point of my Pluralsight videos, the point of my life, basically, is taking complex things and making them simple.
If you want to succeed as a programmer, you have to learn how to do this for yourself, because this is the single most important skill you can possess.
So, to answer the original question—No, I don’t believe there are super programmers. I don’t believe that there is a difference between an enterprise application developer and programmers working on problems that most other programmers would perceive as really hard problems or “real programming.”
Now, don’t get me wrong and think that I am saying that I don’t think some programmers are orders of magnitude better than others. I would venture to say that really good programmers are about 10 to 20 times as effective as just average ones.
What I am saying though is that we have a tendency to forget how simple all problems really are when they are decomposed to smaller problems and that ALL problems can be decomposed in that way.
What I am saying is the thing that might be stopping you from growing to become a really good programmer is your own false belief that you can’t possibly understand something that you currently perceive to be complex.
What I am saying is that when you write what appears to you to be a simple enterprise application, you might be forgetting just how difficult and damn near impossible it seems to all your friends and family that know nothing about programming.
Still think I am wrong?
Fine, you are entitled to think so.
But I do have a challenge for you. Surely you know a “super programmer.” You might even be one. If so, let’s hear from you or them. Tell us that complex problem that is too difficult for the rest of us to possibly understand.
I don’t even mean that sarcastically at all. Seriously, if you can prove me wrong, do so. I’ve just never seen a problem that couldn’t be broken down into simple to understand components, yet.