Software is NOT an Engineering Discipline
I've had my fair share of software engineering courses, and what all my teachers keep telling me is that software is lagging behind other engineering disciplines in rigorousness and formality.
The problem, of course, is that software engineering is not an engineering discipline!
The most obvious point to this is that if software has some problem, it can be fixed after the fact. If a bridge has a problem you had better fix it before production starts. Same thing with building houses. You can't build something like Burj Dubai just to realize after a while that every other floor has no plumbing installed.
Another point is that you never have rigorous requirements when you build software. When you build a bridge, you know that it has to extend from point A to B, has to carry such-and-such a load etc, etc. With software, even the clients that know exactly what they want (which is to say, almost none), can't possibly come up with as exact a specification for what they want as someone commissioning a bridge or a house or a car.
People everywhere are trying to come up with different ways and methodologies for more exact specifications for software. Various modelling disciplines are showing up, but all they have to show for it is sporadic book sales. When you look at software projects as a whole, they are impossible to strictly specify. Some individual parts, like some protocol entity or some database interface, are possible to specify in a strict way, but they are still very much black boxes.
The fact that software can become so complex and so dynamic makes it impossible to include among the ranks of other engineering disciplines. In all other forms of engineering, you're bound by these lovely things called the laws of physics. In computer science, you are bound by only one thing, and that is execution time. If something isn't supported on the platform you are using, you simple emulate it. I'd love to have a device that could produce energy from nothing, but that goes against the laws of physics. In computer science, however, you would just create what you wanted. Like previously mentioned, the only thing that restricts what you can do in computer science is the time it would take for the computer to finish the task.
People can keep telling themselves and their students what they want, but I don't think I will ever be convinced that software deserves the prestigious "engineering" prefix.
EDITED TO ADD: Apparently I'm not alone in my opinion. (You really should read those links, especially the first one.)
The problem, of course, is that software engineering is not an engineering discipline!
The most obvious point to this is that if software has some problem, it can be fixed after the fact. If a bridge has a problem you had better fix it before production starts. Same thing with building houses. You can't build something like Burj Dubai just to realize after a while that every other floor has no plumbing installed.
Another point is that you never have rigorous requirements when you build software. When you build a bridge, you know that it has to extend from point A to B, has to carry such-and-such a load etc, etc. With software, even the clients that know exactly what they want (which is to say, almost none), can't possibly come up with as exact a specification for what they want as someone commissioning a bridge or a house or a car.
People everywhere are trying to come up with different ways and methodologies for more exact specifications for software. Various modelling disciplines are showing up, but all they have to show for it is sporadic book sales. When you look at software projects as a whole, they are impossible to strictly specify. Some individual parts, like some protocol entity or some database interface, are possible to specify in a strict way, but they are still very much black boxes.
The fact that software can become so complex and so dynamic makes it impossible to include among the ranks of other engineering disciplines. In all other forms of engineering, you're bound by these lovely things called the laws of physics. In computer science, you are bound by only one thing, and that is execution time. If something isn't supported on the platform you are using, you simple emulate it. I'd love to have a device that could produce energy from nothing, but that goes against the laws of physics. In computer science, however, you would just create what you wanted. Like previously mentioned, the only thing that restricts what you can do in computer science is the time it would take for the computer to finish the task.
People can keep telling themselves and their students what they want, but I don't think I will ever be convinced that software deserves the prestigious "engineering" prefix.
EDITED TO ADD: Apparently I'm not alone in my opinion. (You really should read those links, especially the first one.)
Labels: engineering, software
0 Comments:
Post a Comment
<< Home