I started college as a computer science student. I switched to the college of engineering because I knew "electrical engineers make all the money." One of the professors (actually, I think he was a department head) tried to convince me to stay in computers or "at least take one more class" to which I declined and he said, "you’ll be back." True to his word I returned, battered and bruised with a diminished gpa, to the college of liberal arts to study computer science. I asked why out of 500 students he tried to encourage me in such a way. He simply said, "you have a knack for computers." That remains on of the biggest compliments I have received.
I read more frequently articles that reference programmers and non-programmers. I read one that documented my case claiming that early in an intro to computer science course you can separate which students will succeed as programmers and the ones that will never understand.
But the dirty little secret of the software development industry is that this is also true even for people who can program: there’s a vast divide between good developers and mediocre developers. A mediocre developer can program his or her heart out for four years, but that won’t magically transform them into a good developer. And the good developers always seem to have a natural knack for the stuff from the very beginning. [Source]
I don’t have the ego to say I am a great programmer but my work frequently has me altering code done by lesser programmers and, although the teacher in me wants to reach out to them, I have to wonder if they wouldn’t be better served by a career change.
You assume that they would be anything but mediocre in anything else.
In any field you have those that excel, and those that muddle through.
Programming is no different.
AT = Not a programmer.
Although terms programmer and software developer are often used interchangeably, they are completely different. Programming is about implementing algorithms to solve defined data processing problems. Software development is translating real world (business) problems into workflows that can be automated by means of data processing. For instance, making layouts for user interfaces these days involves little “programming”, but is an integral part of software development. If I need code for an algorithm, I can google it up in about 15 seconds. Developing software for real world applications is not science, it’s art. Many a code monkey can produce oodles of tight, beautiful, compute-science-purist software, but yet cannot comprehend actual real world problems — let alone able to extract descriptions of real world problems from non-computer literate people (those who pay the bills). A good developer is part psychologist, part investigative journalist and part engineer.
Hear hear! Well said!
Speaking of programmers, read this thread and the comments at The Daily WTF. How many ways can you write a simple method?