Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Software development is often contrasted with the traditional branches of engineering, most commonly civil or mechanical engineering. For example:

  • "Software development isn't like engineering, it's like craftsmanship!"
  • "Software development isn't like engineering, but it should be!"

Do software developers understand what it is that engineers do and how they do it? At least, do they understand it well enough to be able to make an informed comparison with what software developers do?

share|improve this question
8  
Well, I went to engineering school (metallurgical engineering)... former engineers or at least people with an engineering degree are not uncommon in software development. –  Vitor Jun 30 '11 at 4:01
6  
How many software developers does it take to change a light bulb? None; the burned-out light bulb is a hardware problem. How many electronic engineers does it take? None; we'll leave the burned-out bulb in place, and implement a work-around in software. –  Mike Baranczak Jun 30 '11 at 4:34
1  
This question is very similar to this one. There I contrasted software engineering with traditional engineering. –  kevin cline Jun 30 '11 at 5:10
3  
No, they are the guys in the funny hats who drive trains. –  GrandmasterB Jun 30 '11 at 5:59
2  
Do engineers know what software developers do? –  Rig Aug 4 '12 at 4:29
show 5 more comments

closed as not constructive by GrandmasterB, Jarrod Roberson, Walter, Matthieu, Jim G. Aug 23 '12 at 20:33

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

7 Answers

up vote 10 down vote accepted

Software developers who work with engineers eventually understand what engineers do.

When I was a student, we were told that software engineering was not as mature as engineering because software has bugs and other disciplines make perfect products.

Then I worked for an engineering company who made something mechanical that had never been done before.

It had mechanical bugs. Like software bugs, only in the physical ( not even electronic) hardware. They got designed out (or ignored) eventually.

You have to remember that software development often automates away the manufacturing step(s) other engineers have to deal with.

Wearing my mechanical design hat, when the 3D printer is online, you just model the part, and hit print (compile). For some jobs that's all that is required. You'd be lazy not to do a stress analysis, but a rough analysis is pretty quick to do (Thanks, Solidworks).

share|improve this answer
    
+1 for mechanical bugs. We have them in our product too (along with the software bugs). I try fix the software issues and have opinions about the hardware issues (mechanical hardware issues, that is). –  Macke Jun 30 '11 at 7:48
    
Mechanical bugs are just fixed by smarter software that works around them :-) –  Guy Sirton Jun 30 '11 at 21:55
1  
@Guy, I worked on astronomical telescopes. We fixed everything in software. Nonlinear lead-screws (software) structural flexure ( software ) misalignment of axes ( software). Then I wrote an auto-guider program and fixed the software in software. –  Tim Williscroft Jun 30 '11 at 23:45
add comment

Engineering is finding trade-off between conflicting constraints, some technical, some not. That looks like a lot what I do.

share|improve this answer
add comment

"Engineering" a program can get complicated. Engineering an enterprise application can certainly rival the complexity of most buildings out there (i.e. structural)

I always thought the metaphor referred to structural engineering and was fairly straight forward.

Aside from both having scope, requirements and designs... The use of pre-existent components and technologies to build other components within defined constraints. A process which continues resulting in finished product that does not have much to do with the nature of it's component parts per se.

Granted there are some big differences between tensile strength and network bandwidth...

I don't agree with either of your examples but that's a opinion sort of thing. For example, is commercial art really art? Actually though, I would say that being a developer isn't a craft, it is only an art for a few, and could probably best be compared to structural engineering. As a carpenter I should know.

share|improve this answer
    
I think the point of the question is that there is opinion and then there is informed opinion. For example, do you have actual experience in engineering large structures or enterprise applications? If not, why should your opinion on the matter carry any weight? Lord knows I find myself opining on things I have minimal or no expertise on, but it's a bad habit. –  Charles E. Grant Jun 30 '11 at 5:36
1  
You raise a fair point Charles although I doubt a dual certification would be a prerequisite to begin comparing the two. In fact I was attempting to point out that is not really relevant, the metaphor either holds up to examination or it doesn't, independent of the authority making the comparison. Cheers. –  DHorse Jun 30 '11 at 5:55
    
+1 for the comparison with structural engineering. –  user23157 Jun 30 '11 at 9:51
add comment

Having worked with many mechanical engineers, electrical engineers and even a civil engineer turned software developer, also done some mechanical and electrical design work myself, I would say both statements are inaccurate. Also to answer your question, yes (some) software developers know what (some) engineers actually do.

There is a lot of craftmanship and ingenuity in (e.g.) mechanical engineering and naturally electrical engineering. Modern electrical engineering, especially digital design, has a reasonably large overlap with software development in terms of capabilities and techniques.

It's also important to understand that "engineering" is a term covering a vast spectrum of professions doing a vast spectrum of tasks. Bridge design is different than a design of some clever mechanism used in consumer products which is different than chip design. Though some of the tools may be similar (CAD, finite elements etc.) the processes would be quite different.

Software tends to be more malleable than mechanical or electrical designs (though that is also changing with rapid prototyping and software) and cycle times tend to be shorter. Hence software can grow to be pretty complex perhaps more rapidly than with other disciplines (though there are plenty of complex mechanical designs).

I would also say that in general engineers would tend to apply more rigorous methods compared to software developers. E.g. do load calculations, power budgets etc. though embedded/real-time software developers may also do more of that compared with their web development peers.

share|improve this answer
1  
+1. Cycle time difference is important. I guess that is why more rigorous methods and tests are used in "general" hardware engineering. The price of a failed build may involve human lives, not just a red rectangle (or lava lamp). –  Macke Jun 30 '11 at 7:50
add comment

You're assuming that software developers & engineers are two different things. Yet I'm a engineer in computer science who works as a developer.

We've also got quite a few electronic engineers at work who are now full time programmers. There just are a lot more programming jobs than engineering over here so it's a logical thing to do. After all, it's not that different to design an electronics board than it is to program.

share|improve this answer
add comment

Engineering is the discipline, art, skill and profession of acquiring and applying scientific, mathematical, economic, social, and practical knowledge, in order to design and build structures, machines, devices, systems, materials and processes that safely realize improvements to the lives of people.
-- Wikipedia

Now this is a reasonable definition of what engineering should be. How this is implemented in the fields of mechanical and construction engineering it doesn't say and I myself can only guess.
Although the term software engineering has been coined, and although it seems reasonable to engineer software, the vast majority of software development as is, can be characterized as throwing stuff together against better knowledge.

I am sitting in a house right now, that is 120 years old or so. And I feel perfectly safe about that. I am using a new computer with up to date software and yet I don't feel perfectly safe about that. Software engineering is now at the stage where civil engineering was in ancient Egypt. We learned how to make things big (we're still working on making them last more than a few years). While I only have a superficial idea of what civil engineering involves nowadays, I feel confident to say, that we're not quite there yet :D

There's this nice quote that is in fact incredibly obvious:

You can use an eraser on the drafting table or a sledge hammer on the construction site.
-- Frank Lloyd Wright

Yet there is a lot of programmers out there who don't see any value in planning or designing.

The gap between software development and "classical" engineering disciplines is so obvious, that you needn't be an expert in any of both to see it. You just need to use the products of each branch and you feel it.

share|improve this answer
add comment

I always thought the comparison between software development and engineering was to emphasize the structured approach to software. I.e. you have blueprints and other documents for engineering a building; you have UML diagrams and flowcharts and specs for engineering software; you don't just start building and see where you end up like you tend to do in software.

I often see the term used (and use it myself) to push the idea that we need to do things properly according to the industry standards, using good tools (read: materials) and not willy-nilly as we see fit (i.e. the cowboy coder). You would not find an engineer who laughs at the "best practices" in designing a building or uses cheap materials that he knows won't last long (and if you did I'm sure he would not be an engineer for long, or at least not one you want to hire!), but you often find a software developer who acts as though best practices are worthless or should be ignored.

Personally I equate software more with craftsmanship than true engineering, but there are similarities between the two and I firmly believe that some of the rigid structure in engineering is a benefit to software, although obviously not to the same level as software can work if it's badly designed (although it still shouldn't be, and that's not an excuse to write crap) while a building probably will not last long if corners are cut everywhere and shoddy materials are used.

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.