Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

What are the key differences between software engineers and programmers?

share|improve this question

closed as primarily opinion-based by Thomas Owens May 4 '14 at 15:09

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.If this question can be reworded to fit the rules in the help center, please edit the question.

According to engineers: a vast array of knowledge and skills ranging from project management to hardware design. According to programmers: nothing. Gratuitous (and possibly out-dated) Dijkstra quote: 'If you carefully read its literature and analyze what its devotees actually do, you will discover that software engineering has accepted as its charter, “How to program if you cannot.”' See also:… – Shog9 Sep 17 '10 at 20:53
One thinks that they're better than the other. define One = Random.Next() %2 == 0 ? "Software Engineers" : "Programmers" – Steve Evers Sep 17 '10 at 22:05
Just searched on stackoverflow and there was a similar question.… – grokus Sep 18 '10 at 3:49
Engineers plan, measure, implement, measure, test, measure, document and measure. – ConditionRacer Jan 10 '13 at 15:52
True engineers apply known scientific laws to design something that (if/when constructed) meets requirements (e.g. using physics to guarantee a bridge design can handle a certain weight, a building design can handle a certain wind strength, etc). Software development has no scientific laws and never has anything to do with engineering. "Software engineers" are engineers in the same way that "sandwich artists" are artists. It's marketing and/or ego applied to job titles. I should know, because I'm a Grand Master Foobar. – Brendan May 5 at 6:31

13 Answers 13

up vote 77 down vote accepted

When hiring, we look for a distinction between someone who is going to be able to help us architect our system, define processes, create technical specifications, implement advanced refactoring, etc. and someone who is going to help us complete programming tasks off a checklist. I believe you could call the former a Software Engineer and the latter a Programmer.

share|improve this answer
Can you please clarify, do you hire both (for different jobs) or just the software engineers? – Jaap Jan 10 '13 at 12:08
I think they only hire "Software Architects"... ;-) – Brendan May 5 at 6:36
You could call the former a Software Engineer, but I wouldn't. As Brendan's eluding to, that's typically a software architect's job. – JᴀʏMᴇᴇ May 5 at 8:00

It's up to the company really, as I don't think there's a legal framework to enforce a denomination or another, or at least not that I am aware of and this might vary from country to country (for instance, the use of the term "engineer" is actually fairly regulated in France, but there are variants that are allowed for the "abusive" cases).

That being said the general trend goes like this:

  • A programmer position is usually the one of a professional hired to to produce the code of a computer program. It will imply that you know how to write code, can understand an algorithm and follow specifications. However, it usually stops there in terms of responsibility.

  • A developer position is usually considered a super-type of the programmer position. It encompasses the same responsibilities, plus the ability to design and architect a software component, and to write the technical documentation for it (including specifications). You are able to - at least technically - lead others (so, programmers), but not necessarily a team (there comes the fuzz...)

  • An engineer position would usually imply that you are a developer who has a specific type of degree, some knowledge of engineering, and is capable of designing a system (as in: a combination of software components/modules that together form a whole software entity). Basically, you see a wider picture, and you are capable of designing and explaining it and separating it into smaller modules.

However, all this is arguable, and as I said, there's no legal requirement that I am aware of in US/UK countries. That being said, in France you can only call yourself an "engineer" if you come from an engineering school (recognized by the Commission des Titres d'Ingenieurs or something like that). You cannot say that you have an "Engineer Degree", but you can say that you have a "Degree in Engineering" if you have studied a discipline that falls under the portemanteau of engineering and technologies.

It might be that some countries have a similar distinction, I just don't really know.

Back to the software engineer title... Once, one of my teacher told our class - and rightly so - that there's no such thing, as of today, as so-called "software engineering". Because engineering something (be it a building, a vehicle, a piece of hardware...) means you are capable of envisioning its design and all the phases of its production, and to predict with accuracy the resources you will need, and thus the cost of the production.

This is true of most "true" engineering disciplines. There are fluctuations, of course (the prices of the materials will vary over time, for instance), but there are very finite theoretical models (for design and planning) and empirical models (for pretty much keeping any of the former within accessible constraints) that allow you to predict the termination date of a project and its resource usage.

The major problem with software is that it is not there yet. We want to aim for software engineering, but we're not there yet, really. Because we have a very fluid and dynamic environment, very variable constraints for projects, and still a lack of maturity in retrospect in our processes. Sure we could say we get better at it (highly arguable with hard-data, though), but we've only been at it since the 60s (earlier projects were actually closer to hardware-only computers, thus closer to real engineering, ironically). Whereas we've been building motored vehicles for more than a century, vehicles in general for a few millennias, and building for even more millennias (and have been pretty damn good at it actually in some part of the world, making you feel like we're ridiculous kids playing with our new flashy software toys in comparison).

We fail to systematically predict deadlines accurately, we fail to systematically predict costs accurately, we fail to systematically identify and mitigate inherent and external risks efficiently and deterministically. The best we can manage to do is produce good enough guesstimates, and accommodate for some buffer, while trying our best to optimize the processes to reduce cycles and overhead.

But see, maybe that's what engineering is. And that's what, when someone talks about a "software engineer", they should think of and aim for.

So that seems hardly interchangeable with the simple act of programming routines, or the more advanced act of developing applications.

Still, everything is a matter of trends. Lately it's pretty common to have an horizontal dev team where everybody on the team is a Senior Software Developer (yes, capitals, because that makes us feel special, doesn't it?), without real distinction of age (fair enough, in my opinion) and not so much distinction of skills (uh-oh...) and responsibilities (now that can't be good, apart purely for PR buzz).

It's also sometimes just a force of habit and specific to an industry's culture and jargon. More positions for embedded software production use titles for software engineers. Mostly because it would probably imply that you will always have to deal to a certain extent with the hardware as well in this field, so you obviously deal with other aspects of the production and of the whole "system" you produce. Not just the bits going nuts inside it. On the other hand of the spectrum, you don't really see the term engineer being used in financial software production positions. It's either because is a mimetic evolution of this industry from one of its predecessors (say, embedded engineering find its roots in automobile engineering, for instance), or because they just want to give more or less credit/weight to a position.

And to be sure to loose everybody in the fog, you'll then find other titles mixing both (like "Software Development Engineer" or "Software Engineer in Test"!), and then other ones emphasizing even more crazy bridges with other domains (think of "Software Architect" and how "software architecture" might be a shameless theft of vocabulary). And keep them coming: Release Engineer, Change Development Manager, Build Engineer (that one goes ffaaarrrrrr out there as well). And sometimes just simply "engineer".

Hope that helped, though it's not really an answer.

Oh, and that means your new company is either trying to lure you in with a new title or that they don't really care about titles, or that you really are going to have a higher-level position. The only way of knowing is to read your job spec, talk to them and eventually give it a shot and judge for yourself. I'd hope it's the latter option and that you're happy with it (and potentially cash more in on it). ;)

share|improve this answer
The book "The pragmatic programmer" also sais that software is not like engineering. While you can plan a house or a skyscraper, such as an analogy for software engineering can hardly be used. They state: Software is more like gardening. Plan the garden, plant the plants. Then see whats growing, remove weeds and plant new plants. – Falcon Aug 8 '11 at 6:02
"Once my teacher told our class that there's no such thing, as of today, as so-called "software engineering". Because engineering something means you are capable of envisioning its design and all the phases of its production, and to predict with accuracy the resources you will need". That was likely untrue at the moment it was written. Like architecture, we can't predict costs without knowing requirements (how much does a skyscraper cost? I won't tell you how high it must be before you start building...). But we can predict costs afterwards, given a mature software development group. – MSalters Aug 8 '11 at 9:45
@MSalters: Sure, you can turn this around: like architeture, we can't predict costs without requirements. But unlike architecture, even with well defined requirements (though ours are often more fluid because they're harder to foresee or we have a tendency to allow them to change), we cannot predict the cost. You can do this in normal engineering to a very accurate level of precision, AND we're currently more able to identify costs for extra-ordinary circumstances than in SE. We only do (fairly rough) guesstimates. We're getting better at making them, but they're still pretty much guesses. – haylem Aug 8 '11 at 23:54
@haylem: That's the norm in software development. But if you've worked at a CMM level 4/5 company, you'll notice that they can predict costs, and often attach 95% confidence levels to them. They understand their software base well enough, and have good enough requirements, that roadblocks are rare. And the cost of roadblocks is lower when you've got the experience to deal with them. – MSalters Aug 9 '11 at 7:46
Anonymous downvoters, please give your reasons, opinions and advice. They are much welcome. – haylem Nov 6 '12 at 15:31

Software engineers are people who work at companies that call the people who write software for them "software engineers."

Programmers are people who work at companies that call the people who write software for them "programmers."

There are also developers, or software developers. They are people who work at companies that call the people who write software for them "developers" or "software developers," respectively.

share|improve this answer
I should note that this answer wasn't really meant to be funny. – Jer Jan 10 '13 at 6:04
To this point, my company recently changed everyone's title from "Developer" to "Engineer." We all have the exact same jobs, of course. – Jer May 7 '15 at 14:17

So there is the "Software Engineer", the "Programmer", and also the "Developer", "Coder" and you can never forget the "SOA expert"

These are all marketing terms for people who cannot say something meaningful in their CV, such as their actual role (not just job-title) in previous positions.

On job ads, the difference is down to the HR person.

Bottom line: every person has his own take on "what makes a good employee-that-works-with-code", and some like to associate such and such skills with such and such titles.

What you need to do? Job ads should be descriptive about the required skills, and CVs should explain the candidate's experience details.

share|improve this answer

No differences. They are the same thing. Companies, though, may have formal job descriptions using the terms, and then there may be some company-specific meaning to the term.

share|improve this answer

Programming is about the code. Software engineering is about the end product.

share|improve this answer

That really depends on how the company defines the positions. It may be that as a software engineer you will have more design decision opportunities, whereas as a developer they would give you UML diagrams and you would write the program.

But, there is no real set definition so that based on the title will people know what you do, or how experienced you are.

When I was an architect/developer, my title was computer scientist, but I would just tell people I was a programmer, as the first two are not easily defined, but most people know what a programmer does.

If a title is important to you then accept the new one, as engineer sounds higher than a developer.

share|improve this answer

I don't think there is any "official differences", for my experience that could mean:

  • Some companies uses software engineers and software developers to referring to the same thing. They just use their favorite term.
  • Other uses both terms for different inside positions, but the roles vary from company to company! In some could be just a difference on the function (a soft. engineer will work on maintenance and improvement of the systems while a developer will work on the product of the company), or could be hierarchical (engineer is above developer), or even the engineer is really dependent on Q&A!

Also, are also fashion terms that changes... First the term was "programmer", then "software engineer" and now appears to be "developer"...

It's better to read the job description or to someone on the specific company

share|improve this answer

In some jurisdictions, "Engineer" carries with it the requirement of being a professional engineer, that is having an P. Eng. desigation among one's credentials. However, in other areas there may not be such a difference as I was a "Softwere Design Engineer" working in Washington state some years ago.

share|improve this answer

Software Engineers tend to work on systems that are very large taking many man years to develop e.g. 5 to 16 years for instance. Programmers tend to have this stereotype of just coding and nothing else. But it really depends on the organization you work and how HR are marketing the role as explained above. They are essentially the same thing. Just don't get too attached to a title because it is synonymous.

share|improve this answer

Software engineer adds to "programming"

Requirement analysis, configuration management, change control.

Change scope analysis, requirements traceability.

Measurement of product (quality, size, defect density).

Management of the development process. (Visibility, feedback, risk management)

Heck, having a documented development process.

Process development and deployment. Using practices (engineering, programming) that have empirically proven results.

Writing documentation. It won't kill you, just only write the documents required. Don't specify documents as "deliverables"; The customer needs a manual, so we write one. Mechanical engineers don't write hundreds of pointless documents so why be crazy.

If this sounds a bit like "Systems Engineering", The engineering company I work for often described Systems Engineering as like Software Engineering for people who can't program.

Systems engineering on it's own is quite a valuable discipline. There are lots of technology-heavy projects with little to no custom software component.

Programmer: write software.

share|improve this answer

The difference between engineering and programming is, in my view, best explained by observation of two different areas. I don't know how to clearly articulate it otherwise.

Consider the culture difference between a "hard" engineering company and a "web 2.0" company.

Airplane failures due to software versus social media operational failures due to software.

share|improve this answer

The title 'Software Engineer' may imply that the position is partly an analyst role, where the focus is about planning the architecture of software rather than doing the grunt work of programming it.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.