Everybody can learn a little programming. And everybody should.
But everybody aren't going to see the beauty of it. Only a few will fall in love with it. These are the ones that will stay with programming, decade after decade, they are the elite.
Also, I'm getting tired of the whole "programmers have poor communication skills" meme.
The art of programming is to put ideas into written code. This IS communication, as good as any. When non-programmers think we are poor communicators, it is probably because they are not used to getting the kind of answers we give. They will often ask us questions that can't be answered, or that can only be answered in ways they can't understand. They ask a question, get a correct answer, and leave confused. Then they blame poor communication skills on the part of the programmer.
Let me try to communicate an example:
- Non-programmer: "Your permission system is too complex."
- Programmer: "It meets requirements and has total generality and flexibility."
- Non-programmer: "We don't want all that flexibility."
- Programmer: "Then the requirements need to more specific."
- Non-programmer: "Don't you understand what I mean by less flexibility?"
- Programmer: "Yes, I understand. In what way do you want less flexibility?"
- Non-programmer: "Just generally. The customers will never want to be able to set any permission on any object to any subject."
- Programmer: "Ok. Then the requirements must list exactly which permissions should be selectable to which objects and subjects."
- Non-programmer: "Just make the changes, will you?"
- Programmer: "Do you want me to guess. It would not be appropriate. You must make specific requirements for this, or I can't do it."
I was the programmer, and I'm sure they thought I was communicating poorly.
Addendum:
This little story seems to have stirred something in some members, so I'd like to clarify what I think is the point here.
The non-programmer in the story claims to know that there is a natural set of functions the system needs to support, but is unable to state what those functions might be.
The programmer knows that he doesn't know what this set of functions is and can only oblige if the desired set of functions is communicated clearly.
I think the programmer communicates the impossibility of the position intelligently. The non programmer is unable to put into words what he thinks is common sense. If he had any communication skills to speak of, he would have been able to.
The amount of percieved assness in communication on the part of the programmer might be explained by the prolonged exposure to logic, information theory and nonhumanoid communication.
If work is divided such that the subject expert writes requirements and the programmer codes to those requirements, should the programmer feel obliged, or even authorized, to amend those requirements with his own guesses? Are we supposed to do both jobs, or just our own? Is it standard industry practice that the developer gets to change the requirements?
For those who want to know more about the real story, I can tell that the programmer in question tried very much to extract information about what a good set of permission functions might be by asking for examples of what the typical uses in the system might be. What about the suggested solution was too much and so on. He was ultimately frustrated about endless referenses to common sense. For these and many other good reasons he started looking for other and more rewarding challenges and lived happily ever after. The software in question was a major release for which work began in 2003, it is still not released as of late 2008.
Perhaps the question of quality of communication skills of programmers would be a nice off-topic wiki question.