Jack W Reeves argues that “programming is fundamentally a design activity and the source code is the only final and true representation of “the design” .” He explains this in 3 essays, each of which are explained below.
Essay1 : “What is Software Design?”
The growing popularity of C++ is because it makes software design and programming easier at the same time. Also, the lesson to be learnt from C++’s sudden popularity is that “programming is not about building software but about designing software”.
In any engineering activity the final goal is to come up with some documentation. Once the design document is complete it will be handed over to manufacturing team for developing the product. In case of software engineering the design document includes the source code listing, which is nothing but coding.
This essay was published in 1992.
Essay2 : “What is Software Design : 13 Years Later”
This essay was written by Reeves after receiving an email from Bob Martin who informed Reeves that there was a wiki page about his article Ward Cunningham’s c2.com web site. He started following the discussions on this page addressed the following criticisms
Critic A : ‘If source code is design then programmers are designers; but obviously they are not, therefore source code cannot be the design’.
Critic B : ‘Don’t do design, just code’.
Reeves condemns this critic by restating “In software engineering, we desperately need good design at all levels. In particular, we need good top level design. The better the early design, the easier detailed design will be. Designers should use anything that helps.”
Critic C : ‘Source code is still too high level to be a design’.
Some of arguments in the wiki states that “source code is a specification”. As per Reeves, specification states what and the design document states how to accomplish that. There will be no human creativity required in the design document. When a document is clear enough and can be easily interpreted by a compiler or assembly line worker then that document itself is a design document, hence source code is design and not specification.
Finally, Reeves concludes this essay by saying that “In software development, the design document is a source code listing.”
Essay3 : “Letter to the Editor”
This letter was a response from Reeves to the response of editor for his previous article. In this letter Reeves tries to convince the editor saying that for software engineering to ‘mature into a disciplined science” we, the software engineers must understand what software design is, i.e, we must understand the difference between doing software design and the finished software design. This is explained by taking the example of bridge design.
Before constructing a bridge the design of the bridge gets refined considerably. Structural analysis is performed, computer models are created and simulations are run. All these are done to ensure that the design is good before actually building the bridge. These activities are called engineering. When applied all these concepts in software engineering, testing and debugging can be considered as engineering activities. But these activities are not that efficient as of other engineering for example in civil engineering or electrical engineering. The reason being, these activities are quite costly and time consuming (sometimes more than 50% of the software life cycle might be needed for testing and debugging). Hence, these are given least importance.
In this letter he also specifies that auxiliary documentation is also of major importance as the source code comments can not provide sufficient information of the problem for which the design was built. For this we need more expressive programming languages such as C++.