What's a Software Engineer?

Started by
13 comments, last by Todd Smith 16 years, 6 months ago
Software engineering is a broad field, encompassing all aspects of software development from design to software maintenance. Tech companies often post job listings for a "Software Engineer", which really doesn't make much sense when you consider that not many software development jobs include EVERY aspect of the development process. What is meant by "Software Engineer" in this sense? Or perhaps a better question would be, if I go to a job interview for a "Software Engineer" position, what skill set would my interviewer expect me to have in contrast to my the expected skill set for a "programmer" position?
Advertisement
"Programmer" and "Software Engineer" are synonymous.

Especially considering that Software Engineers program and Programmers engineer software.

Specific to each company, they might draw a distinction between them since they may already have their own hierarchy of titles.

But generally speaking they are the same thing.

If you want to know what a job posting expects of you, I suggest reading the job description, not the job title.

[edit]

Read this
Programmer vs. Developer vs. Software Engineer

[Edited by - fpsgamer on August 5, 2007 3:28:36 PM]
Saying they are the same thing is definately one way of looking at it.

However, just because someone knows how to slap together a few statements in some programming language doesn't tell me much about their skill level because pretty much everyone can write "hello world". So saying that both titles refer to someone who programs really doesn't tell you much.

The way I've come to look at it is that pretty much anyone can be a programmer and do a passable job at simple tasks. At the low-end programming isn't that hard. However, there's going to be a point where their skill set isn't up to the task at hand. That is when you need a software engineer. The difference in the title, when properly applied, is that it tells you something about the relative skill set of the individual. Of course, there's no objective standard by which such skill sets are assessed, so its up to each person to tell you who they are by the title they pick. Which brings us back to anyone claiming they are a software engineer.

I suspect what happens in most cases is that companies apply interview sieves to separate out the programmers from the software engineers among the applicants, regardless of what title they claimed on their resume. One approach I heard of recently was to pair program with the applicant to get a better idea of where they stand. I haven't tried this, but its the first interview "technique" I've heard of that stands some reasonable chance of accurately assessing someone's ability since you're seeing it live.

Unfortunately academic degrees are not a useful proxy indicator for a software engineer, since I've met plenty of people with the degree but not much of a clue in software engineering.

Another example that came to me later after writing this post: what's the difference between a handyman and a civil engineer? Both can build you a little shed in your back yard. But do the handyman's skills really scale up to a 50 story office building? Probably not. In those circumstances you really want the civil engineer (and architect, etc.) to make your 50 story office building. Fundamentally they are both doing the same thing -- building stuff. However, the engineer has the breadth and depth of knowledge that gives you confidence that his 50 story office building won't collapse under its own weight.

That's similar to the distinction I draw for programmer vs. software engineer. The latter has the breadth and depth of skills that make it feasible for them to attack larger problems than a programmer. If all you need is dragging some controls onto a .NET form in order to do some data capture and shove it in a database, then you only need a programmer. But you better not ask that programmer to do multiple background worker threads, distributed computing, web services that interoperate with legacy code, etc. Its just beyond their ability. Everyone starts out as a programmer, but not everyone ends up as a software engineer.

[Edited by - legalize on August 21, 2007 2:04:05 PM]

My free book on Direct3D: "The Direct3D Graphics Pipeline"
My blog on programming, vintage computing, music, politics, etc.: Legalize Adulthood!

I agree with legalize for the most part. My current job title is "Software Engineer" (disclaimer: I work in defense, not game development) I have a degree in Computer Science, which has provided me with a breadth of knowledge that has proven invaluable in performing my job duties well.

I look at a Programmer as someone who has learned a language or two, and can write adequate test software or be a tester himself. A Programmer cannot develop reliable distributed real-time software systems. If he can, he is not a Programmer, but a Software Engineer. A Programmer can become a Software Engineer via education (like me) or experience (i work with several people who came from non-engineering backgrounds, who never took a Computer Science course).

Here is the skillset of a Software Engineer:
- ability to learn the basics of any language within a week or so (I recently had to teach myself TCL, took about that long to be fairly proficient)
- understand how a line of code is really processed (Java statement -> byte code -> Java interpreter -> JIT compilation -> machine code -> microcode implementation)
- understanding of memory hierarchies
- understanding of multithreaded and multiprocessor Operating Systems
- understand how and why to use Version Control Systems (every personal project you do from now on, for the love of God, use CVS or Subversion, even though they're terrible, they're free and open source, and they're orders of magnitude better than simply backing up your hard drive once a month)
- learn how to take customer requirements and turn them into a workable software product (this is the most difficult job of a Software Engineer)
- people skills (this goes hand-in-hand with the previous skill) You have to be able to understand people, and know how to clarify things if you don't understand them.
- when it comes to actually programming something, BE AS LAZY AS POSSIBLE. Always remember the old adage: "I'd rather write a program that writes a program than write a program." - some Perl guru

Quote:Original post by fpsgamer
"Programmer" and "Software Engineer" are synonymous.

Especially considering that Software Engineers program and Programmers engineer software.

Specific to each company, they might draw a distinction between them since they may already have their own hierarchy of titles.

But generally speaking they are the same thing.

If you want to know what a job posting expects of you, I suggest reading the job description, not the job title.

[edit]

Read this
Programmer vs. Developer vs. Software Engineer


Hello all, this is my first topic in this forum.
I'm not american, so excuse my poor english.
I'm actually live in Uruguay (next to Argentina).
I'm getting soon my "computer engeneer" (equivalent to your science computer but with more tech) title.
First at all, (I'm not talking about a job definition) a programmer is NOT a software engineer.
A software engineer is a person who knows software engeneering.
Software engineering (principal part of my career) is more wide discipline that includes software developmente manager, since humans resource until time resource.Includes plan (evaluate to select) a software process, software model.
Besides a software engineering must know software Architecture, software testing (this is not simple a person trying a program).Evaluate technologies to use, platafforms, and more, much more. And finaly he must know programming, (programming is not "knowing langauges").
But programming is a SECONDARY AND FINAL activity in a real big software group devolopment.
I understand that in your country, the titles confuse because his use on jobs.
But a job definition is not definition o kwnoledge that a person must know.

Well see you soon
vsk
A software eng is a code monkey with title...
^^^^^^
JOKE


re vsk

If a programming isn't primary part of a software development company, it will be out of business fast.

Now when you will get into the company, you might discover a person without high school that would be assigned as your supervisor and a person that would educate you about what your university left out of your education. Basically a person with eng title might be assigned under high school dropout and be very happy about that.

Any programmer with long experience should know something about software architecture, testing, and debugging. They should also work well with the team. (thought this is somewhat abused term)

If they teach you management, you should know what Jeff said "I have fifth manager in three years."


BTW try to don't define your location with respect to Arg. It's location became somewhat nebulous after Chavez speech. (I mean that one about Falklands)
When coming back into the United States once I was grilled by the folk at passport control, customs or immigrations officers.

I was asked what I did for a living. I said I was a 'Software Engineer' and the officer said (obviously trying to catch me out), 'What does a Software Engineer do?'

My reply...'Engineer Software'

She wasn't impressed. Looking back I'm surprised I wasn't deported just for being a smart ass.

Still, I wasn't wrong was I?
The software engineer is the one who can program in engineering way.
There are two aspects in engineering way, one is management, another is methodology.
---------------------Java SW EngineerWith 3D Prog hobbyFrom P.R.C. Play3D here
The state of Texas prohibits the use of the term "engineer" in reference to a working professional unless the bearer has taken an accredited professional examination. Consequently, in Texas, there is no such thing as a "software engineer," since there is no required professional exam to become one.

I don't think of software development as an engineering discipline, personally. I think of it as a blend of engineering principles and artisanal knowledge/experience - a craft, if you will, much like building architecture blends structural engineering and fine art and aesthetics.

Some engineers do write software to express engineering principles, but those people are primarily engineers of some other discipline - electrical, chemical, civil, mechanical, automotive... General-purpose application software, however, is not written in an engineering manner. You can't engineer user interaction. As a result, I never refer to myself as a software engineer, and I don't think much of the term. I am a software developer. So are you.
I laughed with the airport thing, it was very funny :-).

Well programming (almost like coding) is not the principal of any big software. if it so computers are "software engeeniers" and "programmers" because actual state of the art on software design is the auto generated code and actualy it is done very good, even with design patterns and coding patterns!.

Read about MDA (Model driven architecture) and Software Factories (this one not much).

This two are a good example beetwen a programmer and a software engeeniering (even if this term doesn't exist in Texas :-)) Call it computer scientist if you want :-) Here it doesn't exist neither, exist "Computer Engenniering" and "System Engenniering" .

And yes, of course that programming is important (at the "end"*** of the process) and if you don't use any case tool that generate code.

Did you know RUP (Rational Unifed process) process or MDA process?. The first one is the more used process for big softwares development. Take a look at the process and which phases and things are the most importants.
Then take a look at MDA, and look that there isn't even almost any programming!.

By the way the software engeniering was the one that allow the great succesfull of computing and software development that we have now. It was called engeniering because it use the same facts that engeniering on other fields. That these ones are represented by diagrams, coding and not building a cables it doesn't mean that it is not engeniering.

Well see you soon, I have some real problems with my game :-(.

*** Incremental-iterative process obviously that you don't implement at the end, but you do not implement (coding) before, analysis,and design.
And of course that after coding you have testing and liberation process, so in fact it is not the end.

This topic is closed to new replies.

Advertisement