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?

closed as too broad by Martijn Pieters, whatsisname, psr, Konrad Morawski, Thomas Owens May 12 '14 at 19:03

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 3
    While 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
  • 3
  • 2
    Electrical 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
  • 3
    This 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
  • 1
    One 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 developerdotstar.com/mag/articles/reeves_design_main.html – Doc Brown May 12 '14 at 21:46

Two major reasons:

  1. 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.

  2. 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.

  • 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

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