What do you want to be called when your main job, and perhaps passion, is creating software? If could be engineer, it could be scientist, it could be hacker - but why not just "programmer". Why is it that the term makes some people angry and sends them off looking for a better sounding description of what they do and what they are.
Programming, and this is the term I'm going to use for the activity of creating computer programs, is an odd profession - if it is a profession. Whatever it is, the most important thing about it is that it is so new! If you are being reasonable about it then you can't really claim that programming is much more than 60 years old. Before that there were few programmers and the few that were hadn't really formulated enough of an idea of what they were doing to want to give it much of a name, let alone to consider what made it special.
The big problem with programming, or computer programming as it should be called to distinguish it from radio or TV programming, is that it is composed of two parts - the clever deep thinking part and the "manual" creation of program code. In the early days it was clear that creating a program had something to do with mathematics. Writing code was a bit like writing down equation, although not really. It had an intellectual air about it. Then as time went on it was also clear that you couldn't just have brainy people producing code. There was a need for a lot of code and there just weren't enough brainy people. Also there was the small matter that the brainy people were starting to notice that a lot of what they were writing was the same sort of stuff over and over again - hardly the sort of work a brainy person should be put to.
Slowly but surely the writing of code came to be seen as a lower activity. The thinking up of clever algorithms was another and very much higher activity. The split seemed to be that there would be people, the brainy ones, who thought up what was to be created and how it was to be created and then there was a second lot of people, the not so brainy ones, who did the hard menial work of actually creating the code. It is a lot like the situation where an architect creates an inspired vision of a building and then a bunch of builders comes in and makes a mess of trying to realise the dream. It is not an accident that today many programmers prefer to be called "architects" or something like it. Not many, however, opt for "bricklayer" or "roofer".
The point is if you split of the design from the implementation you are left with the problem of what to call each - and more to the point which one is "programming"? It didn't take long for the term programming to be applied to the act of coding and hence it rapidly became a term of abuse to refer to what a brainy person did in designing programs as "programming".
A bigger problem was to work out what to call the brainy person that didn't insult them. This is why we have a collection of terms that today are sometimes seen as alternatives to "programmer" but with adding meaning. So for example, "software engineer" implied that a particular approach was being taken to software construction - that it was as far as possible a branch of engineering. Software or systems "analyst" implied that the act of working out how an existing system functioned was essential as a first step to creating a program to do the same job.
Some people did want to hang on to the name programmer and attempted to invent a new word for actually creating code - hence coder and later code monkey.
Perhaps the biggest challenger to the use of the term programmer is "developer" or "software developer". It seems to have been derived from the term "property developer" and you can see that ther is a sort of similarly between the two processes. A property developer take some ground and creates something on top of it and a software developer takes an idea and turns it into a program. However, there are huge differences. A property developer mostly just gets the money together and then leaves the project to other people to get their hands dirty. In software development there is no such clear cut distinction. The term includes people who just have good ideas and do no coding through to people who generate a lot of code. Today it seems to be used in the spirit of someone who deals with the whole process of thinking up an idea to delivering it as a finished product. This makes developer a true alternative to the term programmer and which you use is more about image than substance. For me programmer is a more craft based description and developer carries a more creative overtone - but you might well want to argue with this.
One appellation that is worth considering is the term "computer scientist". This brings with it the conflict between art and science. If you are not a computer scientist then you must be a computer artist. The real situation isn't quite so simple. Computer science isn't really about programming. It is the application of mathematics to the subject of programming. It can be so abstract that an actual computer need never be mentioned at all There is nothing wrong with computer science - it's interesting and revealing - but in general it isn't about programming. Notice this is not to say that there aren't some practical programming topics included in a computer science course - there most certainly are, but this isn't the core of computer science. If you want to check this just pick up any book that has "Computer Science" on the cover and you will discover that in most cases what you have is something that looks like abstract mathematics.
To be a programmer and to claim to be a computer scientist is to say that you are really a theoretician.
Of all the titles that we can apply to the programmer - hacker is about the most difficult to deal with. It's the romantic stereotype. To hack is to work alone like a poet in a garret or better like a jazz musician. To hack is to ignore the rules and build something out of things you happen to come across, it's inspirational and all bling.
There is nothing wrong with hacking in this sense but there are better ways to achieve the same result. Programming isn't about tricks. It is about applying algorithmic logic to problems. If you want to dress it up in pop-culture that's fine and it might even be motivational but between practicing programmers it's values are at odds with how programs should be created.
One interesting use of the term "hacker" is to indicate an exceptional or natural programmer. One who can be given a task and turn out code faster and more accurately than the average. This raises the question of whether there are such beings as natural programmers and the answer is most definitely yes. What abilities make for a good programmer? The list of attributes has to include an excellent memory and an ability to think algorithmically and this brings us to the question of what is special about programming.
We tend to forget just how different the mode of thinking is that we employ to build programs. The reason we forget is that once learned it quickly becomes the natural way to do things. Before you know how to program when asked how to do a job you have a rough goal and perhaps a few elements of what must be done. Overall though you don't see the connection between the starting point and the end point. A programmer on the other hand sees quite quickly how to get from A to B. The steps are assembled as an algorithm that locks together into a single process that leads without question form A to B. This isn't mathematics, although it is a lot like how mathematicians work out how to prove a theorem. It also isn't like any other formal science or arts subject - except of course that algorithmic thought does make all of these subjects easier to deal with and more effective.
So a programmer is one who has a mastery of algorithmic thought and can express this in an algorithmic language.
This is the reason why we should never take the term "programmer" as an insult and why it describes what we do more exactly than any other title.
Do remember to cast your vote in this month's poll and if you want to make comments email me, firstname.lastname@example.org, and I will append your thoughts to this article.