
Ask HN: Programmers vs. Developers vs. Engineers - kylelibra
I've done some basic Google searches on the subject, but I'm curious for the HN take on the situation.<p>What are the main differences between programmers, developers vs. engineers in the industry?  Is there that big of a difference between the three?  Based on what I've read there does not appear to be any consistency to which title applies to which type of job.  It seems to be preference.<p>Thoughts?
======
GnarfGnarf
I've been programming for forty-five years. I've always called myself a
programmer.

"Developers" are people who build subdivisions. Anything else is pretentious.

"Engineers" are people who, if they make a mistake, other people die.
Engineers need to be formally trained, and licensed. Other than X-ray
machines, aircraft and space shuttle software, not a lot of programmers can
make this claim.

"programmer" is good enough for most of us.

~~~
tjr
I work on aircraft software. We call our people "engineers", though no-one has
a license. I'm not aware of a license we could usefully get.

However, the aircraft software industry is deeply immersed in process and
layers of review. Rather than licensing our engineers, we "license" our
product, through internal reviews, customer reviews, and FAA reviews.

~~~
olalonde
As a side note, I believe it is illegal to call yourself an engineer in Canada
unless you are licensed.

~~~
aaronbrethorst
Next time you're talking with a Canadian software developer, look to see if
they're wearing pinky rings. That should tell you whether they're actually an
engineer (<http://en.wikipedia.org/wiki/Iron_Ring>)

------
roel_v
I was watching the Discovery Channel this weekend about the efforts gone into
plugging the Deep Horizon leak. They interviewed an oil rig engineer there who
(for me) epitomized the difference between 'proper' engineering and software
engineering. He said 'you have to remember, we're doing something here that
we've never done before!' as if doing something that has not been done before
is a grandiose, magical feat.

I'm not claiming that all software development is completely new or magically
creative, god knows the despair of someone writing their 100th shopping cart
or linked list. Still to me it reflected the cultural differences between
'proper' engineers who are strict and rigorous and like to stick to proven
solutions and people in software who are, in general, more wild west and in
favor of change for change's sake.

~~~
proee
I think comparing software development to traditional civil, mechanical or
electrical engineering is flawed (apples and oranges).

When this guy claims they are doing something that has never been done before,
they are taking orders-of-magnitude higher risks than any new sort of
traditional software development project.

When's the last time you started a new software project thinking "gee, I
wonder if this will explode into a giant fireball if my calculations are off?"
No. You probably write your code, then run it, and if you see a problem you
make changes and then repeat.

Does the fact that they are drilling for oil a mile below the surface of the
ocean strike you as something quite magical? I'd say the entire drilling
platform is an amazing engineering feat, and it likely requires a lot of wild-
wild west engineering to make it a viable product.

~~~
neutronicus
I work on nuclear reactor monitoring software...

So, "melt into a superheated puddle of neutron-emitting slag", while not quite
as dramatic as "explode into a giant fireball", is quite possible if the
senior software and methods engineers at my company (and the many, many people
the NRC involves in verifying and validating our code packages) collectively
screw up.

~~~
proee
Very true, but if that's the case you're probably writing some code that
requires engineering (i.e. a control system or requiring an understanding of
the engineering system that you're writing code for). If that's the case then
you're probably wearing the hat of an engineer.

------
kloncks
Meh. I don't like these questions.

What's the difference between geeks and nerds?

There really is no consistency because, in my opinion, we didn't come up with
these terms ourselves. It almost seems like people outside our industry or
people who don't understand technology in our industry (Dilbert's bosses, for
example) came up with these terms.

It's like the whole geek/nerd fiasco. People started calling others those two
terms and now we're asked what they mean. The truth is that different people
will like to be called different things. I for example prefer the word nerd.
But, the really really correct truth is that it doesn't matter. That's the
bottom line.

Sorry for the long-winded answer. But it's a pet peeve of mine when people
focus on their titles more than their actions. I don't care if Zuckerberg is
defined as a programmer, developer, or engineer. Because, honestly, they can't
even be defined. I care a whole lot more about what he's done.

~~~
gaius
A geek's technical obsession translates directly into commercial relevance. A
nerd's does not.

~~~
gaius
For those who've gone a bit downvote-happy, this is a reference to Douglas
Coupland's _Microserfs_ which you all ought to have read...

------
varjag
Engineer usually assumes corresponding degree from a certified school.
Granted, "Software Engineer" is thrown around a bit loosely, especially
considering how debatable the very existence of engineering in software is.

Programmer is more casual term, you usually don't put it on your business
card. Developer sounds both solid and without any superfluous claims.

In reality of course none of it really matters.

~~~
keefe
There's a skillset that goes with that degree too.

Ignoring job titles and just talking about skillsets :

programming : taking a specification and coding it up, for example build this
b-tree, web-app, whatever.

developing software : typically, this implies more participation in the design
process. Developers don't just make software work, they help decide what it
does.

software engineering : Writing a quick prototype for anything is easy. Writing
a software system that is well tested and stands up under load requires
engineering.

~~~
varjag
I would take an opportunity to disagree with your definition of software
engineering. It is not easy to write a quick prototype for many, many things
out there. Nor there is an accepted engineering practice following which
allows us to build arbitrary, robust (in say, civil engineering sense of
"robust") products.

~~~
keefe
I'm sure there are some things that are difficult to prototype, but typically
you can special case the difficult parts. Regardless, if the prototype is
difficult the product will be even harder.

I think there are basically accepted practices. If the software has a UI, use
MVC and separate all the UI bits. Test coverage gives a good metric for
product quality and everything but the UI should be well covered. Reasonable
performance tests should cover multiple users, load etc.

I'm not sure what civil engineer considers robust, but I think this approach
basically works.

------
hvs
There isn't any consistency in the industry and any attempts to find some are
doomed to failure.

The IEEE takes a fairly hard-line approach to the difference between "software
engineers" and "software developers" or "programmers". (Here is one
characteristic article:
[http://www.computer.org/portal/web/buildyourcareer/careerwat...](http://www.computer.org/portal/web/buildyourcareer/careerwatch/jt15)
) They are one of the few groups that actually feel that way, though. I
sympathize with the concept, but, in reality, our field is still so new that I
think everyone is still trying to figure out what it is. I personally feel
that it currently falls squarely in the "craftsman" domain, but that may
change to "engineer" as our field and techniques become more refined -- but it
may not. Having a brief exposure to formal methods in software development, I
feel that we are a long way from the sort of rigorous analytical design that
accompanies traditional engineering.

That said, we may not even need it except for in very specific domains
(aircraft control, health systems, etc).

So, in answer to your question, there are bigger differences between what you
do at one company to the next in the industry than there is between titles.
One "software engineer" may do the same thing as a "web developer" at another
company. Some companies have well defined roles, some are more jack-of-all-
trades-style roles.

------
eel
If by "engineer", you mean "software engineer", then I say they are all the
same. They all seem to be used interchangeably in job postings and job titles
across different companies.

~~~
kylelibra
That is actually exactly what I was thinking.

------
wgj
In my experience (and what I've been taught):

An engineer solves real world problems by using a methodology. e.g. the
engineering method. <http://www.eric.ed.gov/PDFS/ED276572.pdf>,
[http://openlibrary.org/books/OL2558084M/Definition_of_the_en...](http://openlibrary.org/books/OL2558084M/Definition_of_the_engineering_method)

A developer specializes in product development.

A programmer writes programs, uses programming languages.

I have never seen any reason that a person cannot be any combination of these,
or none.

------
Marticus
I think they're more or less interchangeable at that level.

One might think of an engineer as someone who designs an application /
product, but offhand I cannot think of any methodologies that explicitly have
someone "design" a system without building at least some of it with the
exception of business owners / analysts.

On the flipside, my current job title is "programmer," yet often I am involved
in fully designing AND developing the piece of the program I am currently
working on - that literally covers from business rules to support, including
relevant documentation.

I would consider developers to be in the same bucket as a programmer, as (in
my head at least) there are far more similarities between the two than from
developer to engineer.

Ideally I would expect the following assignments: Engineer: High level of
expertise, designs system at a very granular / technical level for:

Developer: The person(s) who builds the specified system, but whose role is
mostly overseeing the build process. Also high level of expertise, something
of a managerial role, but also knowledge library for use by:

Programmer: Person(s) who build the system. Relevant documentation can be
delegated to the developer possibly, depending on actual involvement.

The feedback channel would just reverse this order. Programmer -> Developer ->
Engineer.

Also before anyone gets all crazy about it, this is completely off-the-cuff
based on my experience in school / the industry.

------
thungas
Let me take the example of constructing a very difficult bridge...

Engineer designs a very elegant solution to the bridge problem keeping in mind
the weather of the place, the location, the type of foundation etc... He is
also supposed to be looking at society & the way the bridge is going to impact
the society and be able to design a solution to carry certain number of
vehicles/people across the bridge etc... He is also aware of the different
types of materials purely from a design perspective...

Developer would be more like a mason who would come with enormous expertise on
how to get the design implemented... He would know what kind of concrete would
work with what kind of water or weather more than the engineer... The engineer
would be aware of it but the developer would be able to really know the tool
of the trade... Engineer would have understood it conceptually...

Programmer would be good at execution... He will know what to get done in what
order so that it can be done in the least amount of time in the best possible
way... In the case of a bridge, a programmer would be the project manager...

In the case of tech folks, I guess the line gets blurred as software
development allows for incremental developments & testing cycles.. Imagine
building a bridge in the same way of building a software _shudders_ :)

~~~
cros
You mention two important aspects of engineering that I think is missing from
the discussion: the bridge (metaphorically speaking) between society and
science and the detail of planning and problem solving to meet a large set of
criteria.

I've spent about 11 years "programming" and have recently returned to school
to get an engineering degree and this is what has been sticking out the most
to me. We are expected to do much more than just code in our engineering
projects with a lot of weight being placed on how we come up with our solution
and it's broader reaching effects.

Finally, in Canada, we have a "professional engineer" designation (P.Eng).
Once you have obtained an engineering degree you can spend an additional four
years working under the tutelage of another P.Eng and take some more courses
to get the designation. This designation sort of places the role of the
engineer in the class of doctors and lawyers in the sense of having a duty to
society. This, to me, is also a key separation.

------
danfitch
I work for a company who calls the guy managing the exchange server a Software
Engineer(Which I think is odd). These terms are thrown around alot today
without knowing what or who they are. I think people say 'oh they are in
technology they must be a Programmers, Developers, Engineers but they really
don't know what they are talking about.

My degree is in Computer Engineering and I work as a Software Engineer(Which
is what I call myself). I used to work for Raytheon a large defense
contractor, which called everyone an Engineer, didn't matter if they had a
Computer Science degree, Computer Engineering Degree, or used to be a school
teacher who taught them self how to code. I would like a clear definition but
like someone else said that this is such a new area that the boundaries can be
very low for what it takes to enter the field.

I don't feel like you should limit calling someone an Engineer or Programmer
or Developer based on degrees(Because I think the whole education system is
flawed) but I would like to see some consolidation.

------
lleger
I don't like these kinds of questions because more often than not people get
it wrong. People who aren't actually performing any of these actions often
mislabel and completely misunderstand the distinction, but also we often don't
understand it either. It's not very difficult, but I feel being precise is
important because it classifies exactly what your skills are and what can be
expected of you.

First, a programmer is simply, as the word implies, someone who programs. A
programmer can be a polyglot or monoglot — either way, a programmer programs.

A developer is someone who develops. Developers write code, but they do so on
a more macro level than programmers. Developers tend to work on whole
projects, so they'll start from scratch and finish the project out. This term
is pretty commonly applied to people who built websites or web apps.

So the key difference between a programmer and a developer is the scope and
length of their work. A developer can be working on many projects at once and
only for a short time; a programmer likely works on only a few projects for a
very long time.

An engineer, however, is completely different. An engineer is a trained
professional with a college degree. Engineering is the long respected art of
developing solutions for problems using mechanical devices. Engineering might
employ the use of programming, but programmers and developers are not
engineers.

I've held each title. Programmer and developer can sometimes be interchanged,
but engineer can't. I personally identify myself as an engineer — after a
grueling four year degree — and it really gets to me when engineer is just
handed out as a title. You're not looking for a 'web engineer,' you're looking
for a web programmer. Not only is it disingenuous, it's also harmful to a
profession that has been around for centuries. I wish there were more
consistency in which titles are applied.

------
moron4hire
There is no evidence to suggest that software can be engineered, therefore
someone who is a "software engineer" is selling snake-oil.

------
zorkerman
In my job, if I'm not writing code, I'm not making money. Call it whatever you
want.

------
morallybass
The dictionary definition seems to answer this clearly for me.

Engineer - A person who, given a problem and a specific set of goals and
constraints, finds a technical solution to the problem that satisfies those
goals within those constraints. The goals and constraints may be technical,
social, or business related.

The distinction between "computer scientist" and "software engineer" is a much
more interesting one, that between developer/programmer and "software
engineer" (which feels like a variation of degrees).

------
buster
I think that those are too generic terms and that those terms cover a wide
area of work. They can overlap very much. Most notably engineers can be
engineers in very different areas, also a developer can develop kernel level C
code, HTML pages or database queries, which can also be done by a programmer.
That's why in general the job titles are more detailed (database
administrator, software engineer, website developer, etc.).

------
spektom
Software engineer is a programmer and a developer, since he applies ideas and
knowledge to develop software using programming as a tool.

------
GFischer
This article by Alan Skorkin tried to differentiate between the Computer
Scientist (Engineer in your case?), the Programmer and the Developer:

[http://www.skorks.com/2010/03/the-difference-between-a-
devel...](http://www.skorks.com/2010/03/the-difference-between-a-developer-a-
programmer-and-a-computer-scientist/)

I agree that there isn't a standardized definition.

------
tbrownaw
Be careful with "engineer", I hear it's a legally protected term in some
places (but obviously not California).

~~~
esschul
In norway everyone can call themselves "engineer", but the specific titles are
protected (for instance "civil engineer").

~~~
kylelibra
From what I've read it appears to be the same in the U.S., but there is no
consistent ruling. It varies state to state as the previous person mentioned.

------
damoncali
Engineers are constrained by physics. Programmers are constrained by logic.
Developers are programmers.

------
JangoSteve
Somewhat tangentially, there was recently an entire thread on Lifehacker
discussing the differences between Computer Science, Computer Engineering, and
Software Engineering.

<http://lifehacker.com/comment/26433104/>

------
ratsbane
At the risk of confusing the question more: what about "Software Architect,"
"Enterprise Architect," and "Business Analyst?" They are used to cover widely
disparate jobs and their meaning has become mangled.

~~~
Tichy
I think if you encounter any of these titles (except maybe Business Analyst?),
you should run. Aren't business analysts the people who talk to the end users
of enterprise software and try to extract their needs? That at least seems
somewhat valid. Bla bla Architects on the other hand are the people who draw
UML diagrams instead of programming.

------
esschul
I think the titles represents jobs that are that similiar that it's hard to
say why we are trying to differantiate them. I guess it would've been a boring
and uniform industry if everyone had the same title.

------
jister
No difference. If you did some thorough research you will notice that the
responsibilities of programmers, developers and engineers are mostly the same.

It's an HR thing, really.

------
tmsh
Let's do a connotation reduction. Programmer, Developer, and Engineer all end
in -er but have a significant root word in the meaning, thus evoking similarly
specific large activities with 'attached' occupations.

Programmer evokes programs. I.e., that our job basically comes down to code.
In some ways this is the most humble of wordings because although true to a
certain extent, it's rather like saying a writer is a word smith, or a doctor
is a good health-er, etc. It leaves unexplained _how_ such programs are
written, but it somewhat correctly indicates how foresight and planning is key
to creating these end products. Also, read the Alan Perlis foreword to SICP.*

Developer evokes, in my mind, real estate developers and business development
developers and all that. Bridge developers. People who oversee the completion
of medium to large-scale work. This evokes a certain level of experience and
responsibility on their part. Granted the term is applied to anyone who has
created a website, etc. But it does sort of evoke that they have completed
something. They've 'developed' it. It's closely linked to 'architect' too. And
probably has objectivist leanings. It also, and in my opinion even more
importantly, reminds the developer that a lot of what he or she does is re-
development, and even _more_ importantly, self-development. Whereas programmer
doesn't evoke _how_ the programs are made, developer evokes that the business
of writing programs is largely about _how_ to oversee requirements, code
reviews, test cases, etc, and whatever makes 'development' more efficient.
That it's mostly about what you bring to the table with experience. The
programming itself is just part of the implementation.

Engineer, contrary to Fred Brooks, evokes the idea that you can put 20 people
on a project. Because of how this works in other fields where engineers are
used. It also evokes the long history of engineering which is a very
privileged association, and one we should be lucky to have. It evokes that
figuring out _how_ the programs work, in addition to doing the actual
programming itself (programmer), or supervising the completion of the task
(developer), is very often at the heart of what we do. It is the closest
probably to the term 'hacker' (although this is debatable and most hackers
would consider themselves programmers, I think, because of the generality of
the term and the understated quality to it), in that it's about hacking on
thought problems and ingenuity. On the other hand, it evokes the 'disciplines'
in other engineering fields. But originally it gets its connotation from the
fact, through hundreds of other fields' use of the term, that the engine is
the heart of the train, car, system, etc.

Overlayed on top these connotations are what businesses decide for job titles.
And that, quite like with postmodernism and its relativistic approach to
connotations, affects things also; however it is there to serve the purposes
of the business first, and other long-term qualities second.

* [http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-5.html#...](http://mitpress.mit.edu/sicp/full-text/book/book-Z-H-5.html#%_chap_Temp_2)

------
prl315
I've held all three of those titles, so I find them pretty much
interchangeable. The one term I hate though is "coder."

------
francoisdevlin
My quick take on a similar subject:

Computer Science: Writing Code

Computer Engineering: Designing Stateful Circuits

Electrical Engineering: Designing Stateless Circuits

~~~
vecter
Computer Science != Writing Code, not by a long shot.

