What, exactly, is a software engineer?

Our recent debate over here got me wondering, what exactly a software engineer is. Disregarding for the purposes of this thread the legal definition of who really is an engineer, I’ve never been clear on how the word is applied in software development. However, some people do call themselves that, or that’s what their employers say their job title is. I doubt that most of them are licensed as P.E.'s (Professional Engineers).

So…purely in a non-licensed, customary in sofware development way, what distinquishes SE’s from other developers? Is it the size of the project you take on? How well you adhere to SDLC practices? How do you know when you’ve become one?

A Software Engineer differs from a programmer in the following ways:

1 - Engineering typically starts at a very high level. Whereas a programmer will be told “Please program X using architecture Y in Java” engineers usually get assigments like “We need to build X. How should we do it?”

2 - Engineers typically fluent in more than one language, and can choose the languages and tools that are most applicable for the task at hand, whereas programmers typically are fluent at only one or two langauges/toolkits.

3 - Any project that involves heavy interaction with hardware and/or operating system fundamentals usually require an engineer because of their complexity and the need to have someone know the system down to the bare bones. For example, you really, really need to know Windows well before you jump in and write stuff on the filter level. Engineers typically do these kinds of projects.

That’s just off the top of my head, and is my experience only. Obviously, there’s a lot of overlap between the two jobs. For what it’s worth, my title was “Software Engineer” for the past 5-6 years, and I don’t even have a degree.

My job title is Software Engineer. I think of it basically as Athena does:

A “programmer” is someone who writes program code. Usually they are given the design and algorithm and they merely translate that into the working program.

A “software engineer” is usually involved in the design process of coming up with efficient algorithms and design. Then they go and build it as well.

Sometimes I tell people I’m a programmer, just so I don’t sound stuck up or arrogant.

In my company, an SE deals with embedded software, the type that hardware uses to run itself. Although 90% of my tasking involves db’s, with Access, SQL, html and asp, I have been labelled an SE on some jobs.

:: sigh :: I long for the days when there were Programmers (who wrote code), Analysts (who wrote specifications), and Programmer-Analysts (who did both).

Now everyone seems to be so hung up on titles. I ran into some personnel issues when I referred to my staff in a document as “Software Developers”. They were indignant. I quickly learned that their official title of “Software Engineers” were more than mere words on paper.

Go figure.

They certainly don’t do anything logically different than any other Programmer-Analysts/Developers I’ve worked with over the last 25 years.

But, in the interest of having a well motivated workforce, I now am careful to refer to them as Software Engineers. I personally don’t care what they want to be called, I just want them to produce.

Now there’s a boss with a healthy outlook. Just toss cafinated beverages, twinkies, and the ocasional inflatable love doll over the cubicle wall, and don’t actually inquire further into the process as long as you’re getting good code out of it.

At my last 3 jobs my boss has basically asked me what I want my title to be. I shrugged my shoulders and said “Software Engineer sounds spiffy enough to me.” I’m now a “Senior Software Engineer,” even though Senior Web Developer might be a more accurate description of my current work responsibilities. My guess is there aren’t standardized lines of demarcation and any that do exist vary from company to company.

To me it’s just a spiffy-sounding title.

At my last 3 jobs my boss has basically asked me what I want my title to be. I shrugged my shoulders and said “Software Engineer sounds spiffy enough to me.” I’m now a “Senior Software Engineer,” even though Senior Web Developer might be a more accurate description of my current work responsibilities. My guess is there aren’t standardized lines of demarcation and any that do exist vary from company to company.

To me it’s just a spiffy-sounding title.

Well SC_Wolf, I supply tons of free coffee, and we have frequent Krispy Kreme breakfasts. They’ll have to take care of their own love dolls though.

My SO is currently at McMaster University (literally - hes at the library at the moment) in the Software Engineering program. He will be a licenced Engineer when he graduates (and does the whole apprenticeship thingy etc), Kipling, Iron RIng and all. He;s graduating next year. At the time that he applied to McMaster, it and Carleton University in Ottawa were the only two universities to offer a true Software Engineering program. The McMaster one just received re-accreditation by the Canadian Engineering whatever-the-name-of-the-governing-body-is. I understand that McGill, and a few other places (Wastern comes to mind) are developping/opening their own Software Eng. programs, so it appears to me that sooner or later, in Canada at least, the term “Software Engineer” will only apply to true engineers, since they do hold to that title dearly. I can imagine that the governing body thingy will start to “force” a change in title for anyone who isn’t a true engineer. Although this is really just speculation on my part - I’ll ask my SO tonight if he knows anything more.

My SO is somewhat contemptuous of those who call themselves engineers but aren’t really - especially the “Micro$oft-licenced software engineers” who get their title through the mail. But I suppose that’s a whole other issue, which I won’t go into.

mnemsoyne has a good point. In many places, the word “engineer” is a title with specific legal connotations and you can’t just call yourself one. You need a degree, time in practice under appropriate supervision, and licensing exams. The licensing board in Texas has filed suit against a number of software consultants calling themselves “software engineers” or even just using the title “MCSE” because they are not legally qualified to use the word. It annoys my MCSE buddies, but as a “real” engineer, I just say “go get a real degree”.

The aforementioned thread in GD has looked at this in great deal micco. Actually, it was the purpose of the thread.

Anout five years ago, the company I worked for reorganized their entire salaried professional structure, and we all had to get new job titles. Our manager let us select our own job titles. I write software for specific purposes as part of my job, this was in Silicon Valley, during the .com boom times, so I selected “software engineer”. A couple months later, based on my job title being identified as one of the “critical” ones, I got a 2.5 percent salary adjustment. With any other title, doing the same work I wouldn’t have gotten the raise. :cool:

No mention yet of what Software Engineering means in terms of Computer Science curriculum. I taught Softare Engineering a couple times so I’m “almost qualified”.

A course in SE covers the software lifecycle from Requirements to Retirement (of the software). Planning, specification, coding, testing, tools, etc. A lot of stuff on tools nowadays. So, in this context, an SE would be someone who could work on (or even better, manage) any or all of those phases.

There are many Masters programs in SE wherein each of the topics above gets much greater attention. In particular, project management issues are stressed. The biggest problem, of course, is figuring out how many people for how long is this going to take?

So, from a CS department’s point of view, the main issues in preparing a SE for the world are “the big picture”, tools, and project management.

I note that some people above refer to coders and programmers as being the same job. But to most CS types, a coder is a person who isn’t good enough to be a real programmer. I.e., they basically can’t solve programming problems, they can just implement what they are told. Note that at least 90% of the CS majors produced by most colleges are only good enough to be coders. Very few CS majors actually know how to program well. A programmer is someone who is capable of solving fairly hard problems. But a programmer may only know how to program and not be able to do the project management stuff that a SE needs to be able to do.

OTOH, as listed above by so many, real world job titles bear little relation to the actual job they perform.

Everything said by Athena and ftg is correct. I’ve been thinking of starting an “Ask the Software Engineer” thread to fight some ignorance, but never got around to it. Maybe I’ll actually do that now.

This has always stuck in my craw… On the one hand, what I’ve done and been responsible for in the past goes way beyond ‘computer programming’, and with all due respect to Computer Science as a degree (which I have), what I tend to do, to me, can only be described as Software Engineering (at least from what I’ve gleaned about what the meaning MIGHT be) – and yet, because of the legal falderal, I can’t strictly speaking call myself a Software Engineer.

On the other hand, I understand the implications of the title in the sense that calling one’s self a Medical Doctor in the general public evokes certain expectations as to capability and legal responsibility, so I have to (very VERY grudglingly) give that if Engineer evokes similar expectations that it has to be used carefully.

So where does this put me?

I don’t just ‘program computers’. Given a problem in sometimes general terms, I’m required to come up with a design (or two or three), evaluate in my ‘professional’ opinion which one is the best, and either alone or with some help try to implement the recommendations, taking responsibility for what I do.

While I may not be top man on the project totem pole, and while some of the problems are ‘trivial’ to solve, ‘computer programmer’ just doesn’t cover it. “Computer Science Major” sounds too academic (not that I don’t love the academia sometimes, but I’m in a practical line of work).

So what do I do? Do I go for another degree or take various qualifying exams at enormous cost of time and money to get a ‘legal word’ for my title for doing the same work and taking the same responsibility?

Even some Engineers let alone a lot of us software people think the engineering associations are basically an ‘old boys’ club that one pays dues to just to get special treatment. This exaggerates the point a little bit, and for the record I do believe software developers should be held legally and ethically accountable for what they write (except this would bring down most of the major software shops)…

I formally sit on the fence. The club of Engineers tends to annoy me from time to time, and it ticks me off that I can’t call myself what I am as far as I can reasonably determine, but I understand the legal point of it, I guess.

Hm… it strikes me that having written this, and not being a Professional Engineer, I may not appreciate everything an P.Eng is responsible for, to whom they are responsible, and what it entails being one. Still, felt I had to add my two bits…

I disagree with Athena. In my experience, the difference betweena software engineer and a programmer/software developer is who’s doing the naming.

When I graduated from college, I got a job as a software developer. About a year later, the company got bought out and I suddenly became a software engineer. Both companies had developers and engineers, but disagreed on which title was senior.

Hal

My job title is also Software Engineer (though I have no engineer’s license or degree). I work at a small R&D company where we basically have the sales guy, the artist, the optics guy, the electronics guys, the boss/visionary, and me, the software/IT guy.

There’s some overlap between roles, but generally everyone has his own field of expertise. People describe a problem to me, I decide which tools, algorithms, data structures, and protocols are appropriate, then I implement the software. For embedded systems, I don’t have to know anything about electronics, but I do need to know details of the hardware that my program will be using.

Recently, the boss decided that one of our devices, which is controlled by a Delphi app on a Windows PC, should instead be controlled by a handheld computer so it can be portable. So he handed me two Palm m500s and set me loose. I researched what was involved in Palm development, chose a set of tools, and started rewriting my controller software in C for PalmOS.

Besides making decisions about specific development tools, operating systems, etc., I also make broader decisions about the direction of our software projects. For example, we’re providing a security feature to companies that print tickets and certificates; each ticket has a unique pattern that our hardware device can verify. Someone gives me information about the capabilities of the ticket printer, and I decide how we’re going to generate these patterns in a form the printers can use, then I write the software to actually generate them.

      • It’s a title. … I saw a news story just in the last few days about how in (IIRC) Canada and some European countries, the engineer unions were requesting that the term “engineer” only be used strictly define someone who was an engineer by their qualifications. Being that in those countries, they argued that an “engineer” commonly referred to someone in their organizations, and the people who get MSCE degrees (and similar) aren’t.
        ~