Today I came across a very interesting article about why it is hard to program, with which I wholeheartedly agree.
Joel talked about student's inability to understand C pointers some time ago in his article about interviewing. Leave alone recursion or concurrency.
Here's what I think:
- Not everyone can become a good++ programmer.
- It's not a matter of practice or study alone.
- It's a matter of having some crucial abilities or not having them.
I don't think it's arrogant to claim the above.
It holds for programming in the same way it holds for many other demanding professions.
Could I ever become a weight lifter just by trying?
I wasn't built for that. No matter how many steroids I inject, I won't ever be able to bench press 150kg.
Could I ever become a successful composer? I can't recall from memory any 5 minute song, how could I ever come to compose music?
Could I ever become a mathematics professor? Although I like math, theorems and equations don't ring in my ears, they are not my native instruction set.
This is the best analogy I can come up with. Each of us has a native instruction set, embedded in our DNA. Activities that are compatible with this instruction set can be carried out with the highest degree of efficiency. Other activities less so. Some activities might be seriously incompatible, causing serious degradation in overall performance.
Back to programming. If programmers had professional licenses like doctors do, then I know a couple of people whose license should be immediately revoked. Irrevocably revoked. Programming is not their brain's native instruction set; not in their DNA. They don't really understand what they are designing and what they are implementing. How it will behave, how it will perform, how it will be tested, how it will need to evolve and expand, etc.
No, I am not being harsh here. Some say there is an extremely high demand for software developers, so not everyone has to be that good.
WRONG. DEAD WRONG.
In my previous job I spent around 40% of my time bug fixing or completely redesigning and rewriting code written by people whose programming license should be revoked. What good did it do that these people worked for the company? The company paid their time plus 40% of mine for a work that could be done in less than 40% of my time, had I done it myself from the beginning.
That's why I insist on having top programmers on my team.