I think the distinction between these gets very blurred. I tend to think of them a bit like this:
Software Engineer:
Covers every aspect of the manufacture of a whole product. Working from requirements to design and implementation, testing regime and provision for iterative modifications through to the customer.
Programmer:
Someone who writes code for parts of a larger system to the specifications provided by the Engineering department. (See above)
Developer:
Somewhere between the above two leaning more towards the Programmer than the Engineer but responsible for both design and implementation.
A code monkey is an inexperienced programmer a company hires to do the work no one else likes to do. Any programmer who gets paid in loose change -- or peanuts, in the more literal cases -- and whose job consists mostly of copy-pasting code can be called "code monkey".
Gotcha on the code monkey part. Wasn't sure if most programmers were considered 'code monkey's because they typically do less sophisticated work than those with more experience.
So I take the above definitions to mean that generally, the track is to start out as a programmer, then become a developer, and eventually a software engineer?
A software engineer is a specific specialty relatively separate from programming.
While a developer (note that all programmers are developers, but not all developers are programmers) deals with specific implementation aspects, a software engineer performs higher level tasks. For example, if a development team started a database project, a software engineer would decide what features it should provide (relational database? Object oriented? Client-server architecture? Portable?) and how to test them for correctness, while a developer would decide how to implement those features (what data structures will it use to store data? How are records indexed? What's the protocol used to communicate with the server? [that last one would probably be the job of an architect]).
Programming-related careers are relatively horizontal. Someone who starts programming is unlikely to move to other positions unless they are trained in something else (e.g. if they program while they study software engineering). Instead, you get paid in relation to your experience and how obscure it is what you do, which is why a COBOL programmer gets paid more than a Java programmer with the same experience.
Good explanation. What does a computer science degree typically prepare one for out of college? My guess is it depends on the approach the institution takes - either practical (programming) or theoretical. Which of these two approaches is generally preferred when hiring someone? Which approach generally gives one the opportunity to make more money?
Honestly from an industry perspective, there isn't a difference. They are all just titles.
However, in some places, there are legal definitions of "engineer". For example, in
some states, you have to either pass a formal test or practice the profession for X
number of years in order to call yourself an engineer of that profession.
Out of college, when you interview, your interviewers cannot really interview you
on your practical (by your definition) skills because you don't have the industry
experience. But, what companies really want are people with practical skills.
I would be very interested in seeing any definitive definitions of some of the Titles used in the software industry. They probably differ around the world.
In my neck of the woods; a code monkey is the guy that only writes code, not necessarily an inexperienced programmer. The term is often used in a derogatory manor, implying that the person is incapable of doing the 'higher' intellectual task of analysis, and design etc. There is a long tradition of appending 'monkey' to the lower order jobs eg grease monkey for non-professional automobile mechanic.
As for Programmer, that used to be a generic term for someone who was a software developer. It would seem that outside the software industry a programmer is seen as a code monkey. This obviously upset the programmers so they said that they are now software developers. So we now have the programmer at the bottom (equated with the code monkey) and above them (in terms of range of duties) we have the Developers.
Software Engineer, a professional who applies engineering principles to the development of software. So really they are Software developers with a 'professional' standing. As Software Engineers are often seen leading and guiding projects this has become the perception of the title.
Anyway the point is that the titles we use seem to be fluid and are adapted over time.
It would seem that outside the software industry a programmer is seen as a code monkey.
Really? I've never heard that before. It would be surprising, as most people aren't even aware of the kind of activities involved in software development.
Even those inside the industry aren't sometimes aware of the full chain of activities involved in software development, specially in companies doing outsourced work.
For me, the words "developer" and "programmer" can be sometimes used interchangeably, because who would hire a typist (read code monkey) just to write program dictated by a "developer" and if that typist is invloved in testing his own code, then he becomes part of the development.
A software engineer by PROFESSION is one who knows all about making a software and deploying it and selling it.
A software engineer by OCCUPATION is one who knows all about making all components of a software work together with each other and providing interfaces between the "developers" of those components.
All others are sellers and customer service personnel.
Really? I've never heard that before. It would be surprising, as most people aren't even aware of the kind of activities involved in software development.
That is the point, all they know about software development is writing code, so they see you as a code monkey.