Why are software engineers called engineers?

No set squares or coefficients of friction, no stress gauges or engines, it’s all typing, and it’s soft. So why ?

There is much more than typing. It is still complicated problem solving.

Because an engineer makes structures or systems; they don’t have to be physical structures. The word comes ultimately from a Latin root meaning mental powers, talent, cleverness, natural abilities. We get the word ingenuity from the same root.


  1. the action of working artfully to bring something about.

Uh, because they do engineering, i.e. they start by developing requirements for a system, flow the requirements down into subsystem components, draft code based upon those requirements, put it all back together, and test the resulting product. That’s engineering in a nutshell, whatever you work on.

Not all (or indeed many) engineers make drawings, use strain guages, or work on mechanical engines, and these days, most engineers type. (If not in programming code then correspondence and presentation slides. Especially slides.) I’m not sure what you mean by “it’s soft” other than that they write software, but software ends up being one of the largest (by specification, at least), complex, and expensive parts of any major active system. Even buildings, appliances, and powered consumer products end up having embedded software, and of course anything that flies, drives, or fires has a large set of software systems in both the hardware and user interfaces. And software engineering is one of the few disciplines which, by the necessity of inherent complexity and distribution of work, has embraced systems engineering methodology with a passion verging on obsession, and has also tried to develop practical methods to reduce the burden of system requirements analysis and flow (methods that despite many attempts have been less than fully successful when applied to the mechanical disciplines).

Software engineering is definitely an engineering discipline and its training and application distinguishes hacking out random code from disciplined software development.


That and they give us more money when we put “engineer” on the resume.

But that’s the entirety of all human endeavour. It also blurs art and science something rotten confusing.

Software writers are indeed an integral part of our modern world.

But that sounds like all human endeavours too.

What I mean by soft is there’s no real physics involved - yes I know it’s done on a machine, or you can program a machine - but not always. Unless you count silicone chips as machines with electrons as the moving parts.

What if you are just programming a piece of digital art ?

Would writing a novel count as engineering ? You’re a neurotransmitter engineer programming reader’s mental processes ?

Why wouldn’t the English department of a university be called the Psycho-Engineering dept., ?

Or would you say that engineering is designing a novel system rather working on one one already found in nature ?

engineer (n.) http://www.etymonline.com/graphics/dictionary.gifmid-14c., enginour, “constructor of military engines,” from Old French engigneor “engineer, architect, maker of war-engines; schemer” (12c.), from Late Latin ingeniare (see engine); general sense of “inventor, designer” is recorded from early 15c.; civil sense, in reference to public works, is recorded from c. 1600 but not the common meaning of the word until 19c (hence lingering distinction as civil engineer). Meaning “locomotive driver” is first attested 1832, American English. A “maker of engines” in ancient Greece was a mekhanopoios.

There is real physics involved, and in reality, properly made software systems also share things in common with well made mechanical systems. Each piece has a definite purpose, there are not extra pieces, and the pieces are extremely rigid and the gears never slip. They do resemble engines, they are systems that transduce one form of information to another.

I’ve done a digital telemetry system - it converts the analog input signals to a defined signal pattern sent up a really long cable. While I happened to have used C with some assembler to define it, I could have constructed the same system with discrete ICs, FPGAs, or even mechanical gears. Software is just easier, but the state machine of the microcontroller is just as deterministic as if I built it with gears.

What made it less art was I had a functional specification. In one side is analog signals, out the other is a modulation pattern that represents the data. If I were just “hacking” a big application, I would just kind of write some features and menus and things and then test it to see if the customer likes it. The whole system is loosely defined, and there’s enormously more code behind it, some of which is faulty, so the behavior of the resulting system is sloppier.

Another example is an engine control unit. I haven’t done one of those, yet, but they are similarly a series of transformations, from input sensors, through a mathematical model of the engine (or just a series of PIDs), and to the output drive signals that drive things like the fuel injectors. They must mesh up - in some cases, a mistake in the ECU will blow the engine. You will stall the engine if you don’t send a fuel injector pulse at exactly the right time.

You want a system like this to have no other states. No extra modes. It just sits there and reads sensors and spits out control signals, 100% of the time. Ideally, it starts up instantaneously - you can make that happen with FPGAs. You don’t want to shoehorn extra features into a system like this at the end or after release. You don’t want to ever patch it, it should be correct in the first place, and you should never intend to need a patch.

So, I understand there’s only a qualitative difference, than, say, a full stack web developer who pounds out java code for the interfaces on a website, like this one even, and writes the scripts the server in the back uses to decide what to do. They are different things, though.

And there are also Software Architects and Analysts :o

Of course using terms like this is perfectly accurate. Or at least it’s a much closer fit than the title Programmer (or even Coder), which gives the wrong impression about what the job actually entails, and doesn’t differentiate some very different roles.
(Though the title Programmer does still exist for the minority of roles where they really do just want someone to write code and not do any design, requirements analysis, testing etc).

So is it an interchangeable term with “programmer” - which was how it started I seem to remember. I don’t recall software engineer being a term I heard in the 1980s.

There’s also differences in how you construct such a system. I’m working on a motor controller as we speak, and there are a series of stages, where at each stage, I must check the results of that stage of the system with oscilloscopes and test scripts against a function description of that piece of the system. There is a defined correct answer for each stage. If I were, say, hacking together the script a videogame AI uses to find a player, while I might start with A* or some other pathing algorithm, I might just kinda randomly hack in different coefficients or add special case behavior so the AI avoids mines or the edges of a specific level where there are problems. I might decide the pathfinding isn’t “fun” or the movement of the bot doesn’t look “natural” and hack in more special code to make it kind of work, but only on the levels of the game I happen to have tested. Months later, I might get a bug report from the videogame tester that the bot gets stuck somewhere, and I might just add a “stay away from that wall” check to the bot code instead of actually fixing the underlying problem.

Yeah. I had Architect in my last job title, and it caused quite an upset with some of my business customers in the organisation, who were Architects in the sense of making buildings.

Storm in a teacup, IMO. Terms get appropriated for other use all the time - especially in IT (we talk about software ecosystems and environments; roadmaps, lifecycles etc.)

Might as well complain that a Software Installer doesn’t deserve the title because he’s not installing kitchen cabinets.

It’s a fuzzy term. It’s sort of casually interchangeable with “programmer”, but in careful discussion they’re different terms.

“Software Engineering” is basically the practice of building software systems in a clean, maintainable, elegant way. This is in contrast to building individual pieces of a program (which is programming), or developing mathematical theory or algorithms (which is computer science). When you hear people actually talk, these terms become muddy (most people employed as “software engineers” graduate from “computer science” programs and will tell you they “program” for a living), but the distinction can be important.

If you want to take the engineering analogy to the extreme, computer science is academic physics or materials research, software engineering is designing and prototyping the car or bridge using new techniques from these academic discoveries, and programming is the process of actually fabricating the invention. Anyone in any of these three fields probably moves back and forth and does varying degrees of each of these practices, but they’re conceptually distinct.

No, it’s not interchangeable. Like I say, Software Engineer implies tasks additional to programming such as gathering and analyzing requirements, designing the system structure, test planning etc.
And, yeah, probably it was just “programmer” in the 80s.

One thing to appreciate is how much bigger the field of software and IT is now.
People imagine that you’re either a “computer-guy” or not, and if you are, then anything computer-related is within your field of expertise (this is not always a bad thing…it can sometimes be good to be thought of as a wizard over all things electronic…).
The reality of course is that IT has many sub-domains, with plenty of potential to specialize. And indeed, we all need to specialize; no-one can be an expert of all kinds of systems and all kinds of ways they’re utilized.

And if anything, the job titles have not caught up with this. It’s still difficult breaking out all the kinds of roles that would be useful and giving them names that people would understand.

Also, computer science and “IT stuff” in general has a history of being associated with Engineering, since most early computers grew out of electrical engineering departments. So while early theoretical CS is technically a child of math via theory of computation, most practitioners grew out of engineering departments. It wasn’t that long ago when programming efficiently was heavily correlated with being able to make good circuit designs. It makes sense they’d reuse the terminology out of pure familiarity if nothing else.

Nowadays in most universities you’ll usually find it under “science”, “mathematics”, or “(electrical) engineering”. IMO, science is the least defensible, but while pure CS is “technically” math, most students are being prepared for software engineering-oriented positions.

So, when I made a blob move round the screen by bashing commands into a ZX81 in Sinclair BASIC, was I a programmer or an engineer ? I always thought programmer. But I did conceive the whole blob moving escapade from start to finish, so I must have been engineering. I don’t know if that counts as a system, though, so maybe not.

You’ll find that modern software engineering is very different to the process of writing a trivial program especially if the latter was just “bashing commands in”.
Your question is equivalent to asking whether I was an Electrical Engineer when I wired a plug, no snark intended.

It might seem trivial to you mate, but that was cutting edge.

I think doing a plug comes under that.