I'm a strong advocate for Software Engineering, but even I must admit that we do not have many of the same tools, priniciples, and laws as other engineering disciplines. Why is this? And, what should we do to get there?
-
3While we can piggyback a little on the advancements in traditional engineering, they do have a few thousand years more experience than us. – Jeroen Vannevel May 12 '14 at 18:52
-
@Jeroen, true for civil engineering, but not so much for chemical engineering, electrical, etc. – LeWoody May 12 '14 at 18:53
-
3possible duplicate of [Why can't the IT industry deliver large, faultless projects quickly as in other industries?](http://programmers.stackexchange.com/questions/158640/why-cant-the-it-industry-deliver-large-faultless-projects-quickly-as-in-other) – Konrad Morawski May 12 '14 at 18:59
-
2Electrical engineering still has a few hundred years on software engineering. The scientific study of electricity began in the 17th century. By the late 1800s, Maxwell, Ohm, and Faraday had published their seminal works. In the mid/late 1880s, the first universities were offering Bachelor's degrees in Electrical Engineering. In contrast, the term "software engineering" become widespread in the 1960s and first software engineering Bachelor's degree in the United States wasn't in existence before 1996. – Thomas Owens May 12 '14 at 19:01
-
The close votes on this question were varied, but I think there are already books on the nature of software development as an engineering discipline. It's mentioned in McConnell's Professional Software Development, with an entire chapter. Various books by Victor Basili, Robert Glass, Barry Boehm, Watts S. Humphrey, and Gerald Weinberg also discuss the subject in various ways. – Thomas Owens May 12 '14 at 19:05
-
3This seems dangerously opinion-based. But I'd like to point out that perhaps the biggest difference is that any teenager can learn a programming language (or web technologies) and eventually land himself an entry-level job. Other engineering disciplines have expensive gating mechanisms that you have to go through even if you somehow acquired all the knowledge required to be an engineer without going to school. Even so, I think the question itself is based on faulty premises, for reasons listed in the question Konrad linked to. – Doval May 12 '14 at 19:07
-
1One of the big misconception is that programs are compared to physical products of other engineering disciplines. But program source code is more equal to a design document for a physical product, not equal to the physical product itself, and production and "mass production" in software development (by compiling the program and copying the same executable a million times) works extremly well. I recomment to read http://www.developerdotstar.com/mag/articles/reeves_design_main.html – Doc Brown May 12 '14 at 21:46
-
1@KonradMorawski thank you for pointing me to the other question. Very good discussion over there. – LeWoody May 15 '14 at 15:46
-
@LWoodyiii no problem. A very good read indeed! – Konrad Morawski May 15 '14 at 16:27
1 Answers
Two major reasons:
People don't want most of their software to be well designed, engineered solutions. While people don't want bugs in the software controlling a 747, they are clearly happy to allow them in their word processor if it means it costs $20 instead of $20,000.
Software exists primarily in an imaginary universe that usually crosses into this universe in explicitly defined areas. Much of the operation of software is essentially free from any physical limitations, and you can do just about anything as long as you have enough cpu and memory space, which more often than not you do.
Compare that to other disciplines, where you are dominated by physical constraints. Things have mass, they have tensile strengths, they have size, they have tolerance. Materials corrode, change, and have other interactions. Software is essentially information. It has no real size, and a 1 in software is an ideal 1. There are no tolerances on everything like in the physical world.
Consequently, there are very few first principles that are universal in software development. Almost every 'rule' or 'best practice' can be violated, and there are often situations where violating them is the right course of action for the given task. The lack of first principles is what prevents most software development from being the same kind of discipline as other engineering disciplines.
That's why the flight computer, where its requirements are dictated by the laws of the universe, can be engineered through a traditional process, and a line-of-business app, where you can do pretty much just about anything you want, won't be, nor should it.

- 198,589
- 55
- 464
- 673

- 27,463
- 14
- 73
- 93
-
Really nice answer, very though-provoking. I most certainly agree with #1. As for #2, while we don't have good measures for software currently (LOC sucks), I'm hopeful that some day we could. Theoritically, everything we write should run on a Turing Machine, so I'm conjecturing that everything could be boiled down to "# of Turing Instructions". But this would be very costly to create for every language.... Thanks for your post! – LeWoody May 15 '14 at 15:34