Software is Mostly Unnecessary
"Programming is the only engineering profession that spends half its time and effort on detecting and correcting mistakes made in the other half of the time." wrote Bernhard Beckert in Intelligent Systems, an IEEE Computer Society magazine. Software engineering is thus only 50% efficient and levies on the world's manufacturers (and consumers) an extra $100 billion a year and an unknown amount of collateral damage.1, 2
There is no guarantee that computer products delivered to government, military, industry, business, or private citizens are software-bug free. Why would we keep pouring resources into such an ineffective and problem-ridden enterprise, unless we have come to believe there is no alternative? Surely if there was a reasonable and more straight-forward approach, we would exercise it. That would be good business. For now, it is software on top of hardware—or nothing. Instead of fixing bugs that continually occur, even after five decades of experience, why don't we find ways to reduce our dependency on software?
The subject of software invariably brings to mind the embedded control systems upon which most of the software runs. Man-years of engineering labor go into the design and manufacture of those control-electronics (computers, microprocessors, and microcontrollers) that interact with us and directly affect our lives and well-being many times a day. But it is not enough to expend man-years creating the electronic hardware. Similar efforts are required to design and produce software for those same control systems. Software specification, verification, integration with hardware, and debugging continue to be problematic. Although seemingly vital, as it is used in many products or in their manufacturing processes, software is mostly unnecessary as well as a detrimental complication for defense3 and control safety.
Hardware is essential. It performs all the logic and arithmetic operations, and the reception, decoding, and storage of sensory information and data. Every effect created by a hardware-software combination is initiated in and executed by hardware, not software. Hardware even houses and paces the software instructions. Hardware is indispensable. Controllers can't work without it. It is not the case that hardware is dependent upon software for functionality. It is the other way around. Software depends upon hardware to code it, house it, access it, step through it, and implement it. That turns out to be a benefit, because hardware can be tested with finite resources, while software testing may never end. "Complete testing of a moderately complex software module is infeasible. Defect-free software product can not be assured."2 "Software essentially requires infinite testing, whereas hardware can usually be tested exhaustively."4
The problems in software multiply with complexity, which climbs ever higher. Is software really necessary? If systems relied more on hardware and less on software, some of our reliability problems would simply vanish and time- and safety-critical applications improve. Wouldn't it be a good thing to surely and systematically decrease the use of and dependence upon software, in favor of the more reliable and testable hardware?
What is software, anyway? We can find that software selects, sequences, and times the hardware functions. But software itself is sequenced and timed by hardware. Software, in the final analysis, can only tell the hardware what to do, in what order and, in some cases, for how long to do the activity. Software provides direction to the hardware, but hardware actually performs all the functions. Software only tells the hardware what it is time to do:
…
001010 (now it is time to) Do X,
001012 (now it is time to) Do Y,
001014 (now it is time to) Do Z,
…
Hardware is the necessary and more robust physical layer that constitutes and connects subsystems. Software consists of fragile over-layers of command that generate their own problems. If the hardware for control systems was smarter in matters temporal, it would not need as much, or perhaps it would not need any, software. If the hardware could be designed and configured to know when to do the functions and operations it already knows how to do, it would not need software to tell it when to do them. Shifting software functions to hardware would be key in reducing software dependency. Hardware is faster, surer, and more reliable than software. If the hardware did not need software, it could be more autonomous and simpler. Controller design efforts would be more focused and efficient as well.
If we could decrease the necessity and use of control-system software by a factor of, say five, complexity due to software might be reduced even more on a percentage basis. In that case, problems attributable to software could decline by a factor of ten. The controls-software industry could also shrink by a similar factor. The ensuing consolidation would greatly benefit the providers and end-users during its growth phase, as has been shown by other innovative technologies.
What do you think?
CharlieM
References:
1. "Intelligent Systems and Formal Methods in Software Engineering" by
Bernhard Beckert in IEEE Intelligent Systems, November/December 2006
2. "Software Reliability" by Jiantao Pan, Carnegie-Mellon University, 1999
http://www.ece.cmu.edu/~koopman/des_s99/sw_reliability/
3. "Software Aspects of Strategic Defense Systems" by David Lorge Parnas, 1985
http://www.klabs.org/richcontent/software_content/papers/parnas_acm_85.pdf
4. Overview of Software Reliability http://sw-assurance.gsfc.nasa.gov/disciplines/reliability/index.php
Good Answers:
"Almost" Good Answers: