-4

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?

LeWoody
  • 252

1 Answers1

10

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.

Robert Harvey
  • 200,592
whatsisname
  • 27,703