What should I call a person who write software, computer programs ? I know he/she is a software engineer, can I call him/her as "Coder"?
In increasing order of formality:
Coder refers to someone who engages in the act of writing source code, and has a very casual, possibly even negative connotation.
Programmer refers to someone who writes software, which has a neutral connotation.
Developer or dev refers to someone who develops software, which may or may not involve actually writing it, but probably does.
Software engineer and computer scientist are more formal terms for those with degrees or other professional qualifications.
SE is a commonly used abbreviation in speech for a software engineer, but CS is only used for computer science itself, not the people who practice it.
The best single-word answer especially if they're writing the software is programmer. But developer is just as good and blurs the lines beyond programming into things such as beta testing or internationalization.
Multi-word terms sound more formal and are usually more specific. As well as your software engineer there is also computer scientist.
Coder is a word a lot of programmers would use to self-describe but I've learned from this discussion that among some people at least it carries a negative connotation I had never been previously aware of.
"Hacker" used to be the preferred term, back before stupid newspaper folks got hold of it and decided to use it exclusively for malicious people who break into networked computers. Evidentally, those were the only kinds of hackers they had any interest in. :-(
We fought this for a while, but it is really tough to win a war of words with people who buy ink by the barrel.
So now, as the other answers indicate, we are sort of casting about for new terms. Where I work, the term "developer" is used. However, if you use that among the general public, people might think you are talking about someone who builds houses for a living. So I generally just say "Software Engineer". If eyes cross, I elaborate this way: "I spend my days telling computers what to do. Then they tell me to F-off, and I spend the rest of the day trying to figure out why."
Generally the preferred term would be programmer. Coder has a negative implication: that the person only does unchallenging, trivial work.
By the way, "Engineer" in some places has a legal meaning, that requires some sort of government certification. It depends on the state or the country, but it may be against to law to call yourself an engineer if you don't have such a certification. As far as I know, no such certification process exists anywhere for a "software engineer", nonetheless it would still be illegal to use the word "engineer."
There is a big discussion on the subject. it is hard to attribute the term engineering to this discipline, as compared to other hard or traditional engineering fields, we sometimes lack of that little "exact" part the other science have. most topics or areas in software engineering are far to be exact science. perhaps thats why some legislation don't give us the same level of attributions as to other engineers.
As for the part is we should call somebody developer, programmer or software engineering. I think the field of SE goes beyond simply coding, or developing. it also deals with, requirements, design, management, QA, continuous improvement, cost and effort estimation, planning, etc, etc. so using the term SE indiscriminately its a risky business. its like calling architect or civil engineer to a bricklayer (no offense both are needed to make a house or a bridge).
Right now there is a lot of effort to approach to that exact part, but we still got a long way to go.
The question suggested but not explicitly asked here is, who is the engineer? In the field of computer systems building, a computer systems engineer, for example, deals with the assembly material (hardware) and instructions (software, low-level mostly) to create its system components from scratch, while a software engineer comes to link and analyze these systems (software and selective hardware) in accordance with company and market needs for software development. A coder or programmer deals with software and programming language development only.
I notice that a few years ago the word programmer was the only widely used word. Now the trend is to use developer. I'm not a native English speaker, but I hate the word developer because the obvious question is, “What the hell does the developer develop?”
Another way to express my point is: If programmers build programs, can we say that developers build “develops”?
Sorry for the irony, but the word developer doesn't mean anything for people outside the software industry.
I consider myself a programmer, not a developer or a coder.