I’d disagree. Coder/Developer/Programmer are generally interchangeable, but Software Engineer tends to imply knowledge of best practices for scaling an application, including how to build it, how to do CI, how to document things, etc. A Lead is just the primary Dev that is making decisions, and is often specific to a product. An Architect is a non-programming job that focuses on integrating multiple products.
None of this is codified anywhere but it’s what I’ve tended to see play out.
Here at JAXenter we’ll be the first to put our hands up and say that we often interchange the terms ‘developer’ and ‘programmer’. However, when you start throwing other titles about, like coder, hacker, software engineer or architect, roles and responsibilities no longer continue to resemble one another.
So, what are the differences between them all? Scott Hanselman had a go at figuring it out via the thought process of a complete n00b that wants to learn to code. As Hanselman says, “knowing the differences can also give you a sense of how deep you want to go on your coding adventure”.
‘Learn to code’?
Before getting into comparisons, it’ll be beneficial to touch on what Hanselman highlighted in order to understand the phrase “I want to learn to code”.
What’s the question under the question? Does she want to make websites? Design them? Does she want to make mobile applications and take them on the go? Does she want to create a gadget that will text her when she leaves the garage door open too long? These are all very different endpoints and there’s lots of great ways to get started if we dig in a little.
Understanding what people do can lead others to better understand someone’s actual job. In the case of the aspiring-learner-of-code, Hanselman puts forth some questions that can start them on the path to where their interests lay:
- Are you interested in Web Development?
- Or are you interested in Hardware?
- Perhaps you’re interested in the code and history under the code you use every day?
- Maybe you’re already a techie but want to learn the hard way?
- Or are you just interested in being a well-rounded developer?
Once you know what someone is doing, then comes the fun part of figuring out the terminology.
Hands up if you think these terms are interchangeable? If you’re like Daniel Kaplan, then you’d agree that these titles mean just about the same thing. Kaplan wrote up his own treatise for the “not technical” folk out there to facilitate a better understanding of job titles.
9 times out of 10, you can consider these job titles to be synonymous. The main specialty of all three is that they will write code to build custom software. If you meet one person that refers to themselves as a Coder and another that refers to themselves as a Programmer, you can think of them as doing the same thing.
Hanselman’s view differs slightly, saying coders will get the job done and figure it out. However, while their solution might work, Hanselman states that it “won’t be pretty”. This kind of description is very similar to what Alan Skorkin penned some years back when he referred to computer scientists in the following way:
It may not be the prettiest or most well-factored code, but it gets the job done.
When we turn to developers, the picture is a little more positive. Hanselman calls them “the best generalists” who can often work with different languages and systems so that they play nice. Skorkin agrees, adding that they are “without any truly deep specialisations”.
Moving into programmer territory is where the definitions really start to get interesting. Team Hanselman states nonchalantly that they write code and understand algorithms. They’re good at working alone. Full stop.
Skorkin on the other hand has nothing but praise for those that be programmers. He expands a little more on Hanselman’s one line description:
Programmers write awesome code. Making it clean, well-factored and error free are very important concerns, but not at the expense of getting the job done. It is all about knowing the meaning of “good code” within their domain.
If it’s a battle of programmer verses developer, the winner would be decided on what qualities you’re looking for in the position you want to fill, or the future career you aspire to have. As Skorkin says, none of the three is derogatory or ‘bad’ in any way. One is not more or less desirable than any of the others. “They are simply different dimensions (with some crossover) of the field we are all involved in”.
What about a Software Engineer?
For the jobs out there that require a ‘software engineer’, what exactly does this entail? Kaplan occupies a certain stance on the matter:
But, a Software Engineer has the connotation of treating software development as a craft that he is constantly trying to improve. He’s not just slapping things together recklessly, he’s engineering what he builds. That’s not to say that the others are thought of as reckless, just that a Software Engineer has the connotation of not being reckless.
Them’s fighting words, heh? It should probably be noted at this point that the term ‘engineer’ can be very loosely applied in the United States, however Canada and Europe don’t share the same legal interpretation and rationale. If you don’t have an engineering degree, then you cannot call yourself a ‘Professional Engineer’.
Hanselman doesn’t go into his thoughts on what a software engineer might do, and Skorkin dubs the profession “a subset of developer”. Kaplan’s post goes further into describing the differences between engineer and architect in the software world, however some disagree with his conclusions:
What do you think? Are the titles above interchangeable, or are there real differences to be had between them all?