Computer systems design has come a long way from the time when Dijkstra first began exploring time sharing mechanism in the workings of the keyboard. In his day, computers were the realms of scientists and technical people. Operating systems designers were more concerned with processing ability. Human factors and "user friendliness" were terms that would not be a part of their vocabulary for many years to come. At the time of their early work, most of the population was still amazed at the automatic toaster and the television. Many early designers did not think about the common person eventually becoming a consumer of their product in a major way.
Dijkstra had vision beyond his time period and was one of the first to consider human factors in systems design. The first concept to be considered was the reduction of time spent waiting for the system to process the line of commands in its que. Dijkstra realized that if people pressed the keypad, they wanted a relatively quick response. They did not wish to type very slowly so as not to clog the system. In this case, they could write the information much more quickly and efficiently. Dijkstra wrote close to 1000 articles during his time as Professor Emeritus at the University of Texas. He realized in the early days of operating system design that computers had the ability to become familiar household items, but only if they were easy to use and did not cause more problems than they solved.
Early operating systems designers were more concerned with how to make it happen, rather than how long does it take. Dijkstra's philosophy added an additional element and considered usability in operation system design. He published hundreds technical mathematical array systems, peripheral devices and other such topics. His inventions and algorithms showed an exceptional level of genius. However, in these designs he kept his focus on ease of use and made this his key priority.
There were many systems designers who were his technical equal, but few had the foresight to make the computer marketable to the general public. He tackled systems design form a problem-solution perspective instead of just designing bigger and bigger systems, he realized that a system that was clumsy and slow would be on no use to humankind. While other designers focused on faster and bigger, Dijkstra preached simplicity. He also emphasized stability. If the system continuously locked and crashed then it was of no use to the user. Dijkstra realized that these issues were important if computers were to enter into mainstream society.
Bertrand Meyer expanded on the works of Dijkstra when he developed a way to model the highly dynamic nature of the run-time structures created by object-oriented programs. He stated,
Efforts to reason formally about programs, and in particular to prove their properties mathematically, have no practical value unless they can handle all the language facilities on which realistic programs depend.."1
This was essentially the same point made by Dijkstra. Early devices operated sequentially and the typewriters had the problem where the typewriter arms could become tangled. This was one example of the user issues that would mean the acceptance of systems by the early system designers. Hardware was expensive and still remains the most expensive part of the system. Dijkstra states that, "the arrangement would violate the reasonable requirement the no (cheap) program should be able to damage your (expensive) machine."2
He expanded on this idea by stating that, "for economic reasons one wants to avoid in a multiprogramming system the so-called 'busy form of waiting,' in which the central processor is unproductively engaged in the waiting cycle of a temporarily stopped program." He later explains that it is better to grant the processor to a program that can actually continue working.3 This prioritization of he task scheduler is one element of system design the showed a concern for the end user. Dijkstra knew that no one likes to sit around waiting for his or her computer to "think."
Engineers often become so engaged in the design process that they lose sight of the original goal of the project. Programmers often utilize the philosophy, "code first, debug later." The proper order should be "think first, code later" as Djikstra points out.4. If they would do this, debugging would take less time and the end product would be more likely to meet intended user needs. In his article The Next Fifty Years, Dijkstra emphasized the need to think and plan, not only in programming but also with all elements of system design. He cautions that we must avoid complexity and opt for more simplicity in design. He states, "Computing's core challenge is not to make a mess of it."5
Dijkstra's theory of simplification is in direct alignment with the ideas of Hoare. 6 Hoare points out that, as with any other branch of science, computing has split into many specialized branches. Hoare states,
Any large system will have components constructed from a variety of technologies and the interfaces between the technologies, which is where most of the problems of engineering arise, are controlled by abstractions of the underlying general theory." 7
According to Hoare, engineers who have fallen into this pitfall hold onto the ideals of their individual whole and fail to achieve integration. He stresses that in order to meet the goals of the whole, everyone must find a way to integrate these pieces into the whole. Every system is comprised of components from different disciplines and if these components fail to work together then nothing has been accomplished.
Hoare calls the early days of innovation "an adventure." 8 where creation happened for the sheer sake of seeing how far we could take this new technology. Now we must find a way to make the innovation serve a useful purpose. Invention for the sake of invention is no longer acceptable. Hoare agrees with Dijkstra in the idea that software and technology development must keep the customer in mind. Technology innovation is now no longer an entity in itself, but there has been a basic paradigm shift in ideology. Innovation is now customer driven and no longer exists as an entity unto itself.
Bunge 8 states that, "a thing is a concrete object with substantial or real properties, while a mental construct is an abstract object with formal properties. 9 This statement applies to computer design in that the modern theories that drive computer innovation first begin as an abstract idea. The idea gains more concrete form, as it becomes real through "Proofs." It does not become a "thing" until this abstract idea gains concrete shape in the form of software or hardware. Until then the idea is abstract. Many time theorists become stuck in the abstract phase of design and fail to make the jump to thinking about their idea in the concrete fashion, that is there ideas as an actual sellable product. This is the pitfall of design engineers in many disciplines, not just computer design engineering.
Hoare describes engineering and science disciplines as going through phases of maturity> In the early stages everyone is amazed at the new technology and they begin to develop the technology for the sake of developing technology. Then the technology begins to segment into specific disciplines. The disciplines can become so specialized that they lose track of the whole. In a mature engineering field, the focus turns from the product to the end customer. In a young engineering field, the innovation drives invention. However, in a mature engineering field, the customer and marketability of the product drives the innovation. 10
When this happens, the process must develop a more disciplined approach to development. The concept of the end product must be conceptualized and then a plan must be developed to get there. Young engineering disciplines proceed without focus; they develop for the sake of development and test the waters to see how far they can go. The development of innovation cannot proceed in this manner for long and soon must find a direction in which to proceed. The proper course for a mature engineering discipline is plan, then proceed, and then troubleshoot. This is similar to the idea described by Dijkstra earlier.
Bertrand, Dijkstra, Bunge and Hoare individually authored hundreds of technical papers and mathematical proofs in that helped to resolve many issues concerning many disciplines in computer engineering. These articles were outstanding in themselves. However, they all realized that engineering and process development were more than circuitry and wires. They realized that technology was for the purpose of serving man and that technology for the sake of technology was a waste of time and resources. The end result of all those mathematical proofs and theorems must result in a product that served some purpose.
In addition to a purpose, the technology must be useable to the end user. This is a trait that is usually found in a mature engineering discipline. However, Dijkstra managed to realize this early on in the…