The Joel on Software Discussion Group (CLOSED)

A place to discuss Joel on Software. Now closed.

This community works best when people use their real names. Please register for a free account.

Other Groups:
Joel on Software
Business of Software
Design of Software (CLOSED)
.NET Questions (CLOSED)
Fog Creek Copilot

The Old Forum

Your hosts:
Albert D. Kallal
Li-Fan Chen
Stephen Jones

Programmer vs. Developer vs. Software Engineer

I was curious if anyone wanted to comment on the difference in meaning between terms like "programmer", "developer", and "software engineer". I had always thought these terms were basically equivalent. There's some controversy about using the title "software engineer" if you aren't really an engineer. There are other terms too like "architect", "computer scientist", "analyst", etc. What do you call yourself and why?

One reason I ask is the following pages from the U.S. Bureau of Labor Statistics.

Programmer - - job oulook projected to grow about as fast as average.
Software Engineer - - projected to be one of the fastest growing occupations from 2002 to 2012.

So are the BLS people clueless, or can you enhance your career by changing what you call yourself?
Wednesday, April 20, 2005
I think it depends on who you're working with.  In general, the people who expect the same kind of work but call it either "programmer" or "software engineer" will wind up compensating you equivalently.  I think that the distinction is in the heads of the people taking that survey -- from what I can tell, they see "programmer" as being a glorified data entry position.
Kalani Send private email
Wednesday, April 20, 2005
At most large companies in the U.S., "Software Engineer" means you have a degree in engineering, as opposed to something like a degree in I.T. which would make you a plain "programmer."
Wednesday, April 20, 2005
At my school, the "programming" courses teach coding skills - data structures, algorithms, OO techniques, etc. The "software engineering" courses get into project management skills - architecture/design, project scheduling, etc.

At least here (UMBC), software engineering seems to be considered the "10000 foot view" stuff, while programming is getting into the details.

Personally, I find "software engineering" much more interesting. It's too bad they only have two classes for it in the entire program.

Wednesday, April 20, 2005
>>At most large companies in the U.S., "Software Engineer" means you have a degree in engineering, as opposed to something like a degree in I.T. which would make you a plain "programmer."

I call Bullshit. Name one large company that does that.
Damien Katz Send private email
Thursday, April 21, 2005
My title contains the words "Software" and "Engineer", and I don't have any degree.
Brad Wilson [MSFT] Send private email
Thursday, April 21, 2005
Titles are cheap, it doesn't matter.
Business Programmer Code Engineer of Software hotpants
Thursday, April 21, 2005
Damien -- Raytheon, Lockheed, BAE, and Rockwell just to name 4 that I've worked at.
Thursday, April 21, 2005
The closer you get to hardware and military contracting, the more likely it is that "engineer" will be associated with a technical degree.
Cowboy coder
Thursday, April 21, 2005
"So are the BLS people clueless, or can you enhance your career by changing what you call yourself?"

What?!  Folks at a government bureau clueless?  This can't be!

Alyosha` Send private email
Thursday, April 21, 2005
You all know, mates, that titles are often given to please. A sound title doesn't cost company money.

Compare the sounding of "Senior Software Engineer" against "Analyst Programmer".

Its just words.
A British Developer
Thursday, April 21, 2005
"Software engineering" - what kind of bullshit is it ? Since  when writing c (c++/java/whatever) becomes "engineering" ?

It's not that engineering is better that software development - it's just different areas.
Thursday, April 21, 2005
I thought the jury was still out on whether software could actually be 'engineered' at all?

Whatever the initial intention, the Software Engineering term has become meaningless. Just a status boost. I've witnessed presentations where Senior Architects with smugness oozing out of every pore have said to customers "we don't program, we ... 'Engineer' ...our software". Turn the smug dial to 11 for the word 'Engineer'.

I can't forget such events when 3 years later the software still hasn't been 'engineered' and is now 100% over budget!

As for the defence sector using the SE title, IMHO they really don't discriminate based on degree. My degree is NOT engineering related in the slightest and I am titled (prepare to retch..) a Principal Engineer! And our company does work for at least two of those on the list mentioned above.

The defence/aerospace industry, to my eyes, just *loves* ceromony, process and procedure and hates spontaniety, creativity and the like. I believe that software creation requires a balance of the unpredictable and the disciplined. I don't doubt that initially software engineering actually did mean something real. It's common use today, though, is as a one-upmanship status boost.

My career has been about half and half between defence and commercial. I know it's just one person's anecdotal evidence, but the standard of individual coders/programmers/engineers/whatever is much lower here than the commercial sector.

In case you can't tell, I'm keen to get out of the defence sector!
Mantissa Send private email
Thursday, April 21, 2005
> "Software engineering" - what kind of bullshit is it ? Since  when writing c (c++/java/whatever) becomes "engineering" ?

Hasn't software development been "engineering" at least since the time when they started to rely on software in life-support systems: avionics, medical systems, even telecoms, etc.?
Christopher Wells Send private email
Thursday, April 21, 2005
I think some in the industry perceive people who write code for 'software companies' as Software Engineers and those who write code for companies which have a line of business not related to developing software are called Programmers.
Senior Master Programming Software Evangelist
Thursday, April 21, 2005
What is engineering? says: "The application of scientific and mathematical principles to practical ends".

And therein lies the problem. What *are* the scientific and mathematical principles of creating software?

Sometimes the solution you want, maybe the algorithm you're looking for, is found through inductive insight, rather than deductive thinking.

Once you've had the 'aha' lightbulb experience, you can use maths and logic to prove the efficiency of your algorithm. But no amount of rule following will generate it in the first place.

The flight of a football is definitely governed by rules of maths and physics. Yet we don't call footballers "Goal engineers"!
Mantissa Send private email
Thursday, April 21, 2005
"So are the BLS people clueless, or can you enhance your career by changing what you call yourself?"

They are conniving. When nursing was having huge layoffs, the BLS and other folks were pronouncing a huge shortage of nurses. As a result lots of folks entered the career path, driving down wages, at the same time that tens of thousands of experienced nurses were laid off. Same with the BLS and BillG claiming there is a shortage of (lowly paid) developers. The words they don't want you to hear are "lowly paid."

Lots of uneducated youth (usually via uneducated guidance councillors) will see the projections and forget all about the dotBomb and the massive layoffs and run wildly into a meat grinder.

As for "software engineering"... Back in the 1960s, folks were so tired of ad-hoc programming, lots of bugs and severe cost/time overruns, that NATO wanted to turn software development into something repeatable, predictable and science-based. Like engineering. So they coined the term "software engineering" for a conference back in 1968.
Thursday, April 21, 2005
I think what a company thinks about the differences between those titles is probably pretty widely varied, much like salaries for the same work.

As far as how I feel about those terms, I see "programmer" as someone who writes code.  That isn't to say they can't or didn't design the architecture, but in the function of programmer they are turning that design into working code.  I think in most uses programmer and developer are interchangeable, but if you get all semantical with it, developer would imply more use of creativity.  I would see engineer as the function of analyzing the problem and designing the logical workflow of how to solve that problem.  The word engineer does not make me think of someone writing any code.

On my business card it says Software Developer, but I actually have to do *all* of the functions I mentioned above as part of my job description.
Clay Whipkey Send private email
Thursday, April 21, 2005
> What *are* the scientific and mathematical principles of creating software? has a better definition of engineering.

I think of it as engineering because of two aspects:

1) Specifying the desired system functionality a-priori (that distinguishes it from "found art" in which you discover a use for unengineered natural objects)

2) Managing the risks of the system's malfunctioning in various ways (which distinguishes it from the "10,000 monkeys with typewriters" approach to development)
Christopher Wells Send private email
Thursday, April 21, 2005
Some feedback from up north:

In Canada, the term 'Engineer' (and more specifically, 'Professional Engineer') has a certain meaning.  It is a profession overseen by a governing board (the Professional Engineers of Ontario in Ontario) and laws of your locale (Professional Engineers Act in Ontario).

Typically, engineers are the managers.  They require strong technical skills, but the emphasis is on breadth more than depth so as to be able to lead a team on a large project.

Compare these program descriptions from the University of Waterloo:

"Computer Science (CS) focuses on understanding, designing, and developing programs and computers. At its core, Computer Science concentrates on data, data transformation, and algorithms. Advanced courses present specialized programming techniques and specific application domains."

"Software Engineering (SE) deals with building and maintaining software systems. It is more software-oriented and has a greater emphasis on large software applications than Computer Engineering. It is more applied than Computer Science, placing greater emphasis on the entire software development process, from idea to final product. It is also more disciplined than Computer Science, applying more systematic practices to help ensure that products are reliable and safe."

Further, in Canada, one must be a licensed engineer to do work involving the public safety.
Colin Send private email
Thursday, April 21, 2005
Unfortunately, Christopher, that definition also leads to the redefinition of the accountant, cabinet maker, electrician or even farmer as engineer. Indeed there are few areas of human endeavour that don't involve upfront planning, the application of best practices and risk mitigation.

When an engineer designs a bridge, a building, a chemical process, etc. what makes it engineering is not the rigorous planning that she does nor is it the fact that she abides by the principles and practices of the Society of Professional Engineers. It is engineering because she is applying the theoretical principles of Physics or Chemistry, etc. to make something.

The planning, risk management and other aspects of 'professional' engineering may be very important but they are characteristics of the professional not characteristics of the engineer.

Software Engineering is essentially an analogy that has gotten out of hand. The analogy has been very useful on occasion to help identify many of the processes and procedures that needed to be studied to further software development as a craft and as a profession. But it is now largely being used either as a meaningless but aggrandizing title or an excuse for the professional engineering societies to extend their empires.

And before anyone says that Computer Science is the underlying theoretical basis that the Software Engineer applies it is debatable whether Computer Science should be called science in the first place and the link between the 'science' of CS and design/programming is to say the least very tenuous.
Voltaire's Dog Send private email
Thursday, April 21, 2005
"it is debatable whether Computer Science should be called science"

That's just ridiculous. Much of CS deals with the mathmatics of computation and information, is as pure a science as you can get.
Damien Katz Send private email
Thursday, April 21, 2005
Where I work the title is Software Dev. Engineer. I think the reason for the crossbreed title is because we design software for the hardware. While we aren't designing the hardware it still requires an understanding in order to design the low layer software that manages it.

Taking a 10000 ft perspect the differences are nil unless you're talking about designing new technologies from scratch. Otherwise it's all just erector sets and building blocks of previously discovered technologies.
Thursday, April 21, 2005

Alistair Cockburn says:

Now then, I jump to the next thing.  In 1968 there was this NATO conference on software engineering.  And when you read the preface to that -- you can find it online -- in the preface, it says, “We wanted to come up with a provocative term, and so we chose this term “software engineering” as a provocative term.”  That was a big shock to me when I read it because I think, like most people, they assumed that somebody had said… there was reason to believe that software development is a branch of engineering, but, in fact, what these people were saying is, “We don’t like the state that software development is, so we will throw out this word “engineering” and suggest that it should be like engineering and see what goes from there.”

It's all malarkey imho. One should NEVER use engineer unless one is an engineer. Honestly. What a joke.

The problem in the IT industry is that there are just plain too many people whose work won't compile. This is what's great about being a programmer ... you can't bullshit to the computer.

I'm amazed at the analyst and "program manager" titles for people who simply know how to talk.
Thursday, April 21, 2005
While exactly what a Software Engineer is is up for debate, here are some examples of the differentiations I use when assigning titles to those who work for me:

Engineers require a firm foundation in math and science.  Computer Engineers or Software Engineers should have a strong base in computer science and mathematics.  Because of this, 95% of the time, when I hire an "engineer", he/she has an engineering, math, or computer science degree.  Yes, there are some people who have no degree and yet still have a strong theoretical foundation, but it's the exception, not the rule.

If you do not understand big-O notation and the analysis of algorithms and data structures, you are a programmer or a developer, not a software engineer.

If you don't understand the software develoment lifecycle, different models of software development, and which to use when, you're not an engineer.
Thursday, April 21, 2005
This conversation would be useful if there was actually a difference between a "software engineer," a "computer scientist" and a "programmer."

However as we all know, there isn't. In software development, there is simply no correlation between school or course and later aptitudes and achievements.

What we have here is the classic attempt by the petty little shits who did engineering to have the world believe they're actually important. (I speak as one of those who did engineering, by the way.)

One word to losers in the engineering school - get a life.
Thursday, April 21, 2005
Computer Scientists spend all day debating algorithms.

Software Engineers spend all day debating process.

Software Developers spend all day getting things done.
Thursday, April 21, 2005
... and Programmers spend all day on Joel on Software.
Alyosha` Send private email
Thursday, April 21, 2005
.. while Engineers proudly tell their boss about a marvelous new site that talks about software engineering. They send him links to discussions about important topics and he quotes some of it in his next meeting. The site is Joel on Software.

(Don't laugh. I've actually seen this.)
Thursday, April 21, 2005
I view programmers simple as people that if you give them a technical spec, uml diagrams, etc. then they will crank code. Yes, these are the sort of jobs that I see going oversees.

I see developers as programmers who are concerned. These are the people that realize it is more then just code. These people are able to do tech specs. These people are concerned with Version Control, Build Process, communicating with the business, etc.

I can't say enough good things about Mike Gunderloy's "Coder to Developer" book. It describes all of these things.

I think of a software engineer as being more in an engineering field.

I think of an architect as someone that does design, not the hands on coding.
Patrick Send private email
Friday, April 22, 2005
--Much of CS deals with the mathmatics of computation and information, is as pure a science as you can get--

Damien, you appear to be suffering from a common misconception. Mathematics is not science. It is not an art, a humanity or other branch of study. It occupies an edifice all its own, of which Computer Science occupies a small corner.

There are numerous reasons mathematics (and CS) should not be considered science but one of the main and most obvious ones is the principle of falsifiability. One of the fundamental principles of the scientific method is that any valid scientific statement must be, in principle, falsifiable. But in mathematics it is just the opposite - any valid mathematical statement can never be shown to be false because in order to be valid it must be provably true. In science a valid statement can never be proven to be true only shown to be true beyond a reasonable statistical threshold. In mathematics a statement must be provable from basic priciples (axioms) or it is not valid.

There are some blurry edges between math and science in Computer Science and I'm obviously exaggerating somewhat for effect but I find the extremely simplistic concept of 'Software Engineering' that is usually bandied about by such luminaries as Steve McConnell and the like to be rather annoying to say the least.
Voltaire's Dog Send private email
Friday, April 22, 2005
> But in mathematics it is just the opposite - any valid mathematical statement can never be shown to be false because in order to be valid it must be provably true.

You can show a mathematical statement to be false: by finding a flaw in the logic; by discarding an axiom; and/or by introducing new operations (by saying for example that you *can* take the square root of minus one).

This isn't too disimilar to what you're doing in Physics, when you say for example "E = 1/2 m v^2 ... EXCEPT as v approaches the speed of light", or in engineering "Build a suspension bridge ... EXCEPT when the span is too wide".

Also you exclude software because it's not based on the laws of physics (or chemistry). But, what about the idea that software *is* a kind of physical object? At least it appears to have physical properties; it's certainly described as such: it's big or small for example, fast or slow, brittle or malleable, robust or faulty ... it has architectural patterns like facades ... composite shapes like "chain of responsibility" and "layers" ... attributes that you find in the output from other projects such as MTBF and MTTR (and cost) ... objects have lifetimes, they're instantiated, persisted ... etc. It seems pretty physical to me; and that's not just a subjective point of view, it's about as objective as quantum physics.
Christopher Wells Send private email
Friday, April 22, 2005
It's funny that people should bring up the physical aspect of engineering in contrast to software which is mostly conceptual and less tangible. Yet, since the introduction of the Turing machine model we've discovered that matter and information are in fact interchangable. It's just that current computers are still governed by Newtonian physics so the apparent disconnect is larger in terms of the way that computers are able to interact with information. These are very much still the crawling stages of the discipline.
Friday, April 22, 2005
I think it is important to note that not only do some businesses view these titles as distinct, but some universities share that same idea.
At my school (RIT), there are three CS-type undergraduate majors: Information Technology, Software Engineering, and Computer Science.  At the end of the day, the IT majors couldn't code their way out of a paper bag (unless it is coding in VB), the SE majors understand the process and not the particulars (unless it is in Java), and the CS majors are the "developers".  Traditionally, SE is a master's degree, which makes much more sense; once you have a firm understanding of the concepts (Computer Science), you learn how to abstract these concepts even further and develop processes.  However, as an undergraduate program, SE concentrates far too much on process and far too little on particulars, which makes it difficult to work with SE majors when the actual work needs done.  What is interesting is that CS majors are required to take "Software Engineering I" and have the opportunity to take many more courses from the SE area.
In the end, the CS majors complain that SE majors are like doctors who prescribe medication without ever having taken A&P, SE majors complain that CS majors are "just stupid hackers", and both CS and SE majors laugh when IT majors walk by. (obligatory note: I am a CS major)
Friday, April 22, 2005
noah, this is called empire building. Academics in university departments are just as interested in creating new jobs for themselves and jumping ahead of their rivals as are other people.

While CS was the original discipline in these schools, MIS and SE represent efforts by the less successful academics, especially those without technical expertise, to have the university treat them as important.

This has been very successful. Instead of being seen as marginal CS lecturers who can't actually program, they're now department heads and professsors in MIS and SE, where the failure to program is presented as a positive.
Friday, April 22, 2005
And you, Voltaire's Dog, are confusing "a science" with the scientific method. See definition two:


1 : the state of knowing : knowledge as distinguished from ignorance or misunderstanding
2 a : a department of systematized knowledge as an object of study <the science of theology> b : something (as a sport or technique) that may be studied or learned like systematized knowledge <have it down to a science>
3 a : knowledge or a system of knowledge covering general truths or the operation of general laws especially as obtained and tested through scientific method b : such knowledge or such a system of knowledge concerned with the physical world and its phenomena : NATURAL SCIENCE
4 : a system or method reconciling practical ends with scientific laws <culinary science>

Computer Science has very rigorous underpinnings, mathmatical in fact, just like physics. And it also has things like emergent behaviours of complex systems that are not formally provable (yet and maybe forever), but are observable and testable and describeable mathmatically.

Still think it's not a science?
Damien Katz Send private email
Friday, April 22, 2005
Damien, you highlight the scientific basis of CS, which is fine, but the problem I have (and Voltaires Dog, perhaps?) is with the scientific, or engineering basis of so-called 'Software Engineering'.

I asked where were the scientific laws underpinning SE and nobody has shown any yet. m-w.coms dictionary definition actually has a separate definition for SE, outside of the usual production 'based on mathematical and scientific laws'. For SE they say it's creation of a complex object or system. Surely, then farmers could call themselves 'Food Engineers', novelists 'Story Engineers' and artists 'Paint Engineers'! But for some reason they don't feel the need to elevate their status this way.

The academic distinction between CS and SE (see Colins example above) makes sense to me, it's the use of the word 'Engineering' that I don't like! The SE syllabus could be exactly the same, except would be more accurately titled "Software Development" or even "Software Production".

I think Software Engineering is a mainly bogus term used to try and restore credibility to a discipline that has a reputation for excessive profit making out of all proportion to the low quality goods actually produced.

From now on I am a "Software Producer"....
Mantissa Send private email
Monday, April 25, 2005
This thread is sliding down the board into obscurity so I won't bother a full response.

Mantissa has it pretty much right.

Damien - Sorry I still don't agree with you - but then I don't really agree with myself either. When you have some time you might want to do some reading in the history and philosophy of science, it's considerably more complex an issue than you appear to believe.

Also, by the indignation of your tone it appears you felt that my statement insulted you personally in some way. Whether or not Computer Science is a science or something else makes absolutely no difference to its validity and its many amazing accomplishments. The fact that something is a science does not make it in any way better than a non-science field, it simply describes the method by which it is studied. The fact that literature, sociology or formal logic are not science does not make them somehow lower in stature than physics it just means that the methods of science are not fully appropriate for their study.
Voltaire's Dog Send private email
Tuesday, April 26, 2005

This topic is archived. No further replies will be accepted.

Other recent topics Other recent topics
Powered by FogBugz