Why are software engineers called engineers?

As would just about any activity I do over the course of my day. That definition is arguably too broad, but in any case we can all appreciate the distinction between dabbling in something and doing something in a professional capacity. And that the latter may involve a radically different process.

Anyway, let me try to just summarize again:

We call software engineers “engineers” rather than “programmers” because their typical workflow includes many tasks that are not writing code, and the best analogy we can find for these tasks is engineering.
Most software engineers can testify that only a small minority of their time is spent writing new code (which is one reason why it’s so daft when you occasionally come across “cost per line of code” or similar statistics).

No it wasn’t cutting edge. Perhaps that is where your confusion comes from.

However I’m sure you must have done considerable research to develop specs for your moving blob software, and then spent considerable effort in developing the most efficient code for moving those blobs, both in terms of performance and memory usage. And then no doubt conform to a variety of standards and protocols. Once done you had to subject your code to extensive testing, also a process that you engineered. All that work you did before and after you pounded in those commands, that was the engineering. You did do all those things didn’t you?

Ooh it was, cutting edge for home computing.

No I didn’t do all that stuff, I just figured out which equations and routines I needed. Of course it was tested as I made it up. But are those qualitative or quantitative differences ? Size isn’t everything, you know ? A wheelbarrow is a machine every bit as much as a space shuttle is.

Again, no it wasn’t. It was the opposite of cutting edge. It was a toy.

Tell me about the wheelbarrow that you built.

I’m sorry I didn’t realise you had a mainframe in your living room. I stand corrected.:stuck_out_tongue:

Ach!

Er, I think what TriPolar is saying is that the software you created was not cutting edge, not anything about the computer. The computer itself was a technological advance, and Sinclair Research was doing cutting edge work, your program not so much.

Similarly, when I dick around with game engine technology, even when I’m implementing relatively new techniques I’m not doing anything “cutting edge.” The only “cutting edge” stuff I do is my publishable research, which does not include my random OpenGL tinkering, even if the system I create is incredibly complicated.

In the OP, I thought you were asking a genuine question. When more and more, from your tone, it seems what you meant was: How come these coders have the nerve to refer to themselves as “engineers”…it’s just typing amirite!?

In which case, yes, you’re right: it’s just bashing commands in, like you did back on your zx81, except interspersed with internet browsing.
It’s scandalous people get paid for this.

The OP poisoned the well in his first sentence. I don’t know why people expected him to engage in a reasoned discussion of the term.

No, I didn’t have a mainframe at the time. I had several 8 and 16 bit computers, some of my own design. It wasn’t until a few years later I put a Data General Eclipse in my basement, followed by a VAX a couple of years after that.

No, I meant that the computer was a toy. It represented the end of the era of 8 bit home computing where the components had become so inexpensive that they could be mass marketed to anyone with $100. But there was nothing cutting edge about it, it was degeneration of the current level of technology to provide the lowest possible cost, and very little utility.

Not to mention all the money for nothing and chicks for free.

Conversely I have met serious people doing serious business as software developers with business cards that read “Code Poet”.

To me, of the traditional engineering disciplines software engineering seems closest to systems design engineering.

The meaning of engineer has changed over time. Engineers don’t drive steam locomotives anymore.

Mechanical engineers don’t drive lathes and milling machines, and civil engineers don’t pour concrete for a job. Nor did they sit in front of drafting tables - that was a skilled job in itself. Now the draftsman has been replaced by a CAD program, although drafting is only a tiny part of the issue now.

Not all computer programmers are software engineers, and not all software engineers write code.

The point? Some time ago, sometime in the era of early steam boilers and large metal bridges the role of the engineer began to be codified. This is because they started to design and build things that killed lots of people. The role became more than the guy who designed stuff. The role became the role of the guy that brought about stuff. Brought it about safely, and reliably, and ensured it was safe and stayed safe. Whether it was a steel or concrete bridge, a steam locomotive or any number of new marvels, the engineer was responsible for bringing about stuff.

Today is no different. But the complexity of some areas means that the role of the engineer in bringing about stuff is very exacting. A software engineer isn’t just a programmer. Software engineering isn’t about writing code (that is the easy bit.) Software engineering is about bringing about the computer program in such a way that it is fit for purpose. Fit for purpose means a large range of things. But everyday most of us travel around in motor vehicles that are controlled by software systems of remarkable complexity, that we never give a moment’s thought to. Yet these software systems control the anti-lock brakes, the anti-skid systems and so on. They will take control of a significant part of the control of the car if they need to. They could kill you trivially. But they don’t. That is software engineering.

To answer both of the above …

First of all, the term “software engineering” was most definitely being used in the 80s even if you don’t recall it, and long before. Its first general use goes back at least to 1968 and probably earlier. The IBM System/360, first delivered in 1965, came with an operating system whose development required around 3000 man-years, at the time the most complex software system ever developed. The complexity of Windows today, originally microcomputer software developed by some backwoods company called Micro-Soft, is now so staggeringly complex that it makes the original OS/360 seem absolutely trivial.

The difference between programming and software engineering is fundamentally a difference of degree, but that’s all the difference in the world. It’s the difference between a structural engineer designing a major bridge and that same engineer throwing some planks across the creek in his back yard and figuring they’ll hold his weight.

Programming is the process of creating some instructions so an automaton can perform a task. Programming is what I do to my programmable thermostat, it’s what you were doing to your ZX81, and it fits your example of creating digital art. Software engineering, like any other kind of engineering, is the application of scientific and disciplined systematic principles to the creation of complex systems.

It’s no coincidence that the term came into being at around the same time that computers’ software systems were beginning to match the complexity of their hardware. It was recognized that as much as a computer’s hardware design relied on electrical engineering, its software systems were increasingly dependent on a new field that came to be called software engineering. The creation of operating systems, programming languages, the study of how complex software systems are structured, the study of software reliability principles – these are all in the domain of software engineering.

Take a large piece of software, such as Windows. There are a lot of subsystems in that large system, and they’ll be created by different people: One person will create device drivers, another will create memory management routines, and so on. The people doing those individual tasks are certainly programmers, and may or may not be engineers.

But now consider the hierarchy of the design. Someone also has to figure out just what components are needed, and how they’ll interact with each other, and what each component needs to be able to do. That’s a job for an engineer, and the engineer who does that need not necessarily even do any actual coding.

I’m a software engineer by title, but only because when the PMs put me on the phone with the customer they like to say “Let’s ask one of our engineers.” Personally, I don’t like it. If I made the rules:

Programmer - someone who writes task-oriented code, e.g. scripting.

Software Developer, or just Developer - This is my preferred term. I do many of the things that Stranger outlined above; I create software, often from scratch. However, I’m not an engineer. I don’t have a PE certification, I’m not legally accountable for my designs, etc. My software is useful but not critical.

Software Engineer - A software developer with a PE cert and/or equivalent experience doing architecture for critical systems, where one would expect the design to be signed off by a certified professional. Since the PE test for software is relatively new, I don’t think it’s really ubiquitous.

If you write embedded software for hospital equipment that can affect lives, go ahead and call yourself a software engineer. If you write apps or web pages, you’re a developer. If you write scripts to automate tasks in the basement of an insurance company somewhere, you’re a programmer but there’s nothing wrong with that.

For the same reason garbage men are often called “sanitation engineers”.

I’m a database administrator and see a lot of garbage around both. :smiley:

The notion that “there’s no real physics involved” will come of great surprise to the software engineers I know who work with embedded code in avionics systems and have to be able to account for both the timing of clock cycles and the potential for external interrupts (e.g. single event upsets, signal inductance echo, et cetera), as well as that the software drives physical systems with their own latencies and potential failure modes.

You’ve selected an archaic definition of “engineer” that predates software, or indeed, any modern electronic systems, and are insisting that it is exclusive in application. Most engineers could not be described as “constructor of military engines”, “maker of war-engines”, “locomotive driver”, but they are nonetheless doing engineering as it is currently understood in general use.

Did you draft out a system flow, develop an architecture and interfaces between modules, define requirements and draft specifications, and perform any formal regression testing against performance and functional requirements? If not, then no, you were not an engineer. You were just hacking a piece of relatively simple monolithic code.

In fact, many software engineers do little or no actual coding. Just as senior engineers in mechanical, electrical, or other engineering positions often oversee a team of technicians and junior engineers who perform the detail work and rarely if ever sit down at a CAD station or perform detail analysis, a senior software engineer may be primarily responsible for ensuring that task elements are organized in an appropriate sequence, that people with the correct set of skills are working on the appropriate components, that the specifications are complete and up to date, that other parts of a development team are aware of where his or her time is at and vice versa, and mentoring junior people in how to avoid the problems that he or she has prior experience with. Developing sophisticated software-based systems is only about 10% of actually writing code (if that); most of the effort is making sure that the programmer really understands what their little bit of code is supposed to do, ensuring that it all comes together, and dealing with the inevitable problems in regression testing and debugging, as well as coping with the often shifting requirements coming from shortfalls in hardware performance or marketing promises.

Stranger

>> Software Engineer - A software developer with a PE cert and/or equivalent experience doing architecture for critical systems, where one would expect the design to be signed off by a certified professional. Since the PE test for software is relatively new, I don’t think it’s really ubiquitous.

If you write embedded software for hospital equipment that can affect lives, go ahead and call yourself a software engineer. If you write apps or web pages, you’re a developer. If you write scripts to automate tasks in the basement of an insurance company somewhere, you’re a programmer but there’s nothing wrong with that. <<
Until recently I was a software engineer, and wrote critical systems for hospitals. Your life may have depended on software that either I or my co-workers developed.

Currently I design tools for our software engineers, the tools they use to design, write and (most importantly) test their code. My current job title is ‘system architect’. Just to add another layer of job title confusion. :slight_smile:
Note: The code testing is automated at all the lower levels, that’s what I do mostly is design automated testing, but the functional and integrated testing still requires human beings to act unpredictable - no automated system does the weird things users think of.

I am a Systems Analyst which is even a more nebulous term but there is a lot of crossover with Software Engineering. You may picture my job as something out of Office Space and some of them are like that but mine is not. I have to wear steel-toed boots every day to work because I am responsible for the systems in a gritty industrial environment like something out of Dirty Jobs. I sometimes have to wear a hard-hat, safety glasses and clean-room suits as well. Yes, it is about computers and complex software but some of that software happens to control multi-million dollar machines ranging in size from an SUV to a house. The software is a whole lot more complex than the machines themselves but that would also be true if I worked a financial institution rather than an industrial facility. It is real engineering; the only difference is the nature of the parts being used.

Not exactly. Software engineering is not about certification per se, although the lack of them is one reason that traditional iron-ring engineers sometimes think their territory is being usurped. And it’s not only about mission-critical systems, although software engineering is crucially necessary to be able to build them. Some avionics systems and the triple-redundant voting multiprocessor architectures used on spacecraft are even more impressive than those hospital systems you mentioned. It’s all about the principles of disciplined, structured design of extremely complex systems that simply could not exist without the application of those principles. This is what constitutes engineering.

Modern operating systems like Windows are probably the most complex systems ever created by human minds on a single layer of technology – i.e.- sequences of instructions. The computers they run on are in many respects actually simpler, and can be considered to be more complex only by aggregating many different technological layers from basic electrical engineering principles to the most advanced semiconductor technologies. But the similar and greater complexities of the operating systems and language environments are disguised by the flat layer of technology, commonly referred to as “SMOP” – anything can be done, it’s just a “Small Matter Of Programming”. :wink: