|Think about Loose Coupling|
Don't let that undermine the analogy.
I can't help it because I think it does undermine it.
Some people can't tell when a note is a quarter-pitch off, like I can, so they won't be able to sing as well as me, and clearly won't be an expert singer.
That would be me. I only sing to people when I want to punish them. :)
There's no amount of training that'll fix that either. In fact, some people are just plain tone-deaf, and can't distinguish notes at all.
Quite. But 1) programming isn't like having perfect pitch or being ambidextrous, it isn't a physical ability, it's an idea. 2) 'Some' isn't well defined. How many people 'can't' program? 1 in 10? 1 in 10,000?
I cannot see pictures. ... when I look at a blank sheet of paper, all I see is a blank sheet of paper. I can hear words, and can feel body movement, but I can't see a durn thing. ... I don't have internal visual recall ...
You don't need to be able to see the image on the blank paper to draw. Just because Michelangelo could see the sculpture hiding inside the virgin block of marble doesn't mean that anyone who isn't born with this innate ability can never sculpt. Nor does it mean that they can never sculpt well. Michelangelo is the only sculpter I've ever heard that about. I've never heard it about Berini, Donatello, or Rodin for instance.
And you don't need that imaging ability to draw well either. Everyone in our class drew well by the end of it and we couldn't 'see the image on the paper'.
I claim that the model, 'imagine the image on the paper and trace the lines', is non-effective. This isn't what I do and it isn't what we were all taught to do in my drawing class. I suppose, for those lucky few who can do this, it works. Regardless of how many people can imagine the image on the blank page, that method isn't the only one.
To get back to programming, if you procede from the unshakable belief that computers are intelligent and self-aware (how else could the do all those amazing human-like things?) you will be severely hampered in your ability to learn how to instruct them. From what I've seen of 'normal' people I think many of them think this even though they'll sincerely claim otherwise.
I claim that many people who 'can't program' or who can but expend great effort in doing so, mumbling all the time about how 'hard' it is, are suffering from a bad case of inappropriate-model-itis. That they are, like the programmer in question, being challenged by psychological factors -- they're thinking about it wrong.
This is far different from saying they can't think about it right.
So, to recap, I'm not denying that there are people who can't program. I'm denying that most of the people that most of the people think can't program can't.
And if you can parse that sentence without a negation error, you probably can program! :)