Most people would say that computer programming is an engineering job - they lump it in the same category as people who design engines and bridges. We even have job titles like "software engineer." If you want to study computer science, you have to take classes like calculus and physics.
But I have always thought of programming as being very different from other types of engineering. If you want to be a structural engineer, you need to be able to do things like calculating how thick a concrete pillar has to be in order to hold 1,000 lbs of weight. You use that calculus and physics knowledge directly. In programming, you may never use that stuff at all. Sure, I've used some dot/cross product, plane equation, etc. in my game development, but in my professional experience (business apps) I've never used more than basic arithmetic.
And recently I suddenly realized that programming is not engineering at all - it's writing. It's a very specialized form of technical writing. A computer program is nothing more than an instruction manual. The only difference is that when you write instructions for a human, you don't have to be as explicit because humans can think for themselves - you don't have to handle the corner cases.
When you're writing a difficult piece of code, and you can't get it correct right away, it's the exact same thing as writing an email or a paper and being unable to put your thoughts into words. When you're thinking "How do I phrase this?" it's the same thought process as "How do I write this code?"
So, perhaps there are tons of great programmers out there who have never tried programming. We recruit programmers from students who are good at math and science. Perhaps we should be looking for good writers instead.
Thoughts?