Is software engineering viewed as a legitimate engineering discipline by other engineers? How is it viewed?
Software engineers are the used car salesmen of science.
I think that at the beginning of programming history there was an idea that any program could and should be representable as a mathematical equation. I doubt that lasted long.
I grew up calling programmers, “programmers” so when the big switch to “Software Engineers” came I thought is was rather silly. Since learning how to program, that assessment seems correct.
To most specifically say why it isn’t (nor probably ever will be) engineering would be: An engineer has parts that he can put together on paper and do mathematical equations to determine weak points, etc. and redesign. Now if you give the same guy legos and tell him that that is all he has and he has to build a bridge over a river, and that he can’t do any more math than he can fit on the back of a single page of paper with a crayon, and he can only build it by telling another guy who only speaks latin what to do, and he can’t see… Fun I guess, but definitely still a much “softer” science than engineering.
My personal view (as someone who has a degree in Civil Engineering) is that engineers design things and that technicians repair and replace parts. For example a civil engineer will design a bridge. Some technician goes out and patches potholes or replaces suspension cable. The technician may understand more or less how a bridge works, but they can’t design one.
A true software engineer designs software. The guy who wrote C++ or the Unix operating system is a software engineer. People who build aps with Visual C or whatever are not software engineers. They are the software equivalent of the cement guy or steelworker.
I guess "real: engineers feel a bit superior to software engineers, and rightly so, because the various engineering disciplines are generally considerably more demanding than most (but not all) programming.
But then they get laid off and end up being software engineers themselves, and the feeling miraculously vanishes.
That sounds almost exactly like my job except for the equations. There is a firm mathematical background for software engineering, but I’ve never seen a discussion that doesn’t include the disclaimer that it’s not cost-effective to use those methods on commercial software.
Right idea, wrong distinction. If the guy writing apps designed them himself, he’s an engineer. If he’s taking someone else’s design and implementing it, he’s a programmer.
I’m not a programmer because programming takes up less than 20% of my time except in the middle of a project (and even then it’s rarely more than 50%). The rest of the time is spent gathering requirements, designing, communicating with other groups inside the company and verifying the design and implementation. How is that not engineering?
What the hell does it mean that “various engineering disciplines” are more DEMANDING than most programming?
What does the average civil/electrical/mechanical engineer’s job look like and what does the average programmer’s job look like, and how much experience in those fields do you have to draw such a conclusion?
I’m with Ultratfilter: the distinction between a programmer and a software engineer is one of design and architecture, with some scaling thrown in. Sure, any yahoo can build a web site - even a fairly big one - without any formal methodologies or engineering principles.
Scale that up to building a fault-tolerant enterprise level system that must run 24/7 and requires teams of people to build, and tell me how that’s not engineering. There’s a fair bit of requirements, design, and architecture that goes on before anyone starts programming, and most shops have formal procedures that engineers must go through to verify their design, analyze risks, etc. It may not come down to actual mathematical equations, but large systems typically have complex algorithms at their heart.
My current job title is some variation on “Software Designer.” I’ve also been “Software Architect,” “Software Developer,” “System Analyst,” and various numerical and “senior” designations of these.
I’m also a software engineer. I know, because I have a piece of paper from a respected College of Engineering telling me so, although it says “Computer Science” in bigger letters than it says “Software Engineering.” I also have a CSDP cert from the IEEE that supposedly correlates with software engineering.
My mother calls me a computer programmer, or just a computer nerd.
My job duties have varied as much as the titles, but there doesn’t appear to be a correlation from one to the next. A look through the want ads will find another couple dozen titles of jobs that I’m qualified for.
Software as a field is less than a century old, and unlike any discipline that’s come before it. It’s more physical than mathematics, more abstract than engineering, and deals (presently) with a level of complexity that dwarfs any of the more conventional engineering disciplines in its ability to be reduced to equations and known quantities. Is it any wonder we’ve got the names screwed up?
I don’t think any Software Engineer is going to seriously tell you that Software Engineering is the same type of Engineering as the more physical ones. But we like to name things in terms of what we know, and Software Engineering is closer to Engineering than any other discipline we have available. Both are about complexity management, although they deal with different amounts of complexity and results. Software Engineering is where civil and mechanical engineering were a millenia ago; give us time.
This isn’t limited to Engineering: “Science” as a suffix on things like “Political Science” and even “Computer Science” means something different than the disciplines you normally consider “Sciences” (most of which are notably missing the word “Science” in their names).
Is adding “engineering” or “science” to something a blatant attempt to make them seem respectable? Yes. Does it mean that the field really has nothing in common with engineering or science? No.
Jeez, get in a twist much?
Well, I’ve taken a couple of EE classes and a couple of petroleum engineering classes, and I’ve worked with EEs, PEs, geotechnical engineers, and civil engineers. I’ve been a software developer for about 8 years.
In my experience, the training has about the same amount of rigor in all the areas. In the real world, a lot more of the computer stuff is canned; I’m not sure if that makes the job easier or harder, frankly, but the fact is that most software engineering will, after the design and spec phase, almost always come down to finding APIs and then trying to make the cranky, poorly-documented things work right. It’s a pain in the ass, but it’s not engineering.
Now, if you’re writing compilers or OSs, and you’ve got dog-eared copies of Knuth on your desk, then you’re into some pretty serious engineering. But most of us don’t play in that space.
One could readily make this observation about many jobs in the traditional engineering disciplines as well. Many engineers–particularly OEMs or “systems” people–do little more than integrate off the shelf components (often with poor or misleading documentation) into a production design.
I’ve done both software development and trained/worked in a traditional engineering discipline (mechanical/aerospace engineering). The essential difference between a “programmer” and “software engineer” is that the former hacks out whatever bit of code or script necessary to solve the immediate problem or need, whereas the latter spends a considerable amount of time with larger architectural issues and requriements before grinding out code. By nature, software engineering is a much less mature field with rapidly evolving tools, but the high-level principles of the discipline should be the same as other engineering disciplines.
Stranger
How is proving a program’s correctness via induction or some other means not analogous?
It just doesn’t make any sense to call one more than demanding than the other.
If you’re going to say “designing a fusion engine is more demanding than scrolling your name down the screen”, fine. But, if you’re going to say that “designing a toy cabin out of lincoln logs is more demaninding than creating MATLAB from scratch” then you’re crazy.
Which one is more demanding depends on your job and the task at hand.
Sometimes, there just isn’t a boundary between any of this stuff. One factor is that engineers rely so heavily on computers now, that a lot of what they do ends up being software engineering.
I worked, basically, in what you’d call “electrical engineering” in graduate school and my first job. It was signal processing and image processing. The actual “engineering” part – creating filters, studying their properties, doing actual image processing for the specific task, etc. – consisted almost entirely of programming and the associated “software engineering” aspects. But, we considered it doing “electrical engineering”.
To answer the OP. . .I don’t think it’s looked down on by other disciplines. In college, guys didn’t drop out of EE or Mech E to go into CS. They dropped out of EE and Mech E to go into “Environmental Engineering”. I’m not sure where the “used car salesman of science” idea comes from.
This is a “fact”?
You must be doing some boring-ass software development.
Civil engineer here. If they take the same calculus and physics as the rest of us, then I don’t consider them less of an engineer. I do enough programming to have great respect for those that can do it much better than I.
Trunk: This is IMHO, not the pit. And I’m not going to get into a pissing match about who’s got the more swell job.
But can you back up your assertion that “the fact is that most software engineering will, after the design and spec phase, almost always come down to finding APIs and then trying to make the cranky, poorly-documented things work right”?
What about the people who design all the hardware that the software runs on?
That’d be computer engineering, that’s what my degree says, and I wonder if other types of engineers consider it to be lesser than their fields?
Well, I can only speak for my experience in my company, but it’s a player.
Generally, we’re going to have some sort of marketing requirement for a new product. We don’t usually have one group that designs and another that implements, so the software engineer vs. programmer dichotomy doesn’t resonate with me. Most of us do design, some more than others, and then we get down to the business of writing the software. That’s where looking for APIs comes in, of course. I mean, maybe some people write all their own functions in totality, but I don’t know any personally.
The way things work here is that a new product (or new approach to an older product) is comparatively rare. Maybe once every two to three years will an individual really have to do detailed design specifications. The rest of the time, it’s writing code, fixing bugs, and doing maintenance. We also have to deal a lot with things like, for example, memory leaks that our software exposes in the OS.
Then there’s mindless crap like getting releases out the door, making sure the company web page says the right stuff about our product, etc., etc.
I don’t think any of this is unusual in the industry. If it is, and we just do more bs work than others, I stand corrected. As long as I’m on the salary continuation program, I’m not going to worry much about it.
What’s the difference between CE and EE? I’d never heard of computer engineering before today.
Re: my first post, which got Trunk all worked up, I polled a few people around here(EEs and ex-EEs), and the consensus is that I’m full of shit.
catsix: No idea as to the answer to your question, but the hardware engineers I know are just eternally grateful that they work with digital and not with analog.