Software Design
by Jack Seay
March 30, 2005
When thinking about software design, I often look at it from two directions at once: top-level overview of user interaction; and the implementation details on the bottom-level. The top-level view involves looking at the tasks I want to accomplish. Bottom-level includes looking at the tools available to build new tools to accomplish my tasks. These tools consist of computers, networks, input devices (audio, video, keyboard, mouse, data gloves, instruments), output devices (monitors, speakers, PDA's, phones, printers, 3D goggles), languages, design and prototyping tools, etc.
Where do the current software inadequacies stem from? I believe they occur when those who know what they want to do (they now may use non-computer tools such as paper or film) try to explain to a programmer/developer - who fails to understand the task well enough to know how to enhance it with new capabilities that would allow the users to get what they would want if they knew it was possible. What is needed are sophisticated users who know that computers can give them new, undreamed of capabilities; and programmers who know enough about business, entertainment, etc. to recommend capabilities only possible using software (or people who act as interpreters between these two groups of people).
For example, a librarian requests a program to replace the card catalog. Does he know that each listing can be linked to reviews, text excerpts, abstracts, the books listed in the bibliography, excerpts of the audio book version and the movie? Does he know that more than one listing could be viewed at a time and saved in a user's notebook? Amazon has already done many of these things. When libraries finally move into the 21st century - the books, movies, and audio books will be moved online, and allow quoting and annotating by the users. Does the programmer know enough about libraries and literature to recommend some of these things? Does he know that books on a computer can have many capabilities paper cannot possibly offer? The ultimate model to design software exists in the imagination and dreams. Programmers must then take these ideal designs and learn what is doable with available tools in a reasonable time. The top-level ideal concepts meet the bottom-level implementation somewhere in the middle.
Consider the space program. When the goal of landing on the moon was proposed, it seemed to many people to be practically impossible. It was accomplished, but only with the massive resources of people and money made available by elevating it to a top national priority. See "Angle of Attack: Harrison Storms and the Race to the Moon". Also see "The Perfect Machine: Building the Palomar Telescope". Now we have the space station. It does not have the high profile of moon landings, and probably requires a smaller percentage of the national budget, but it is probably of more technological and scientific value. The huge physical demands of traveling to and working in space cause engineers and designers to stretch the boundaries of what is doable. Undersea research also has similar physical demands and will likely be of at least as much, if not more, practical value. What these projects have in common is conceiving of currently impossible goals, but then creating the technologies that make them become a reality, even if that reality is a little different than when first conceived, as the final implementation must be built with designs that work.
What I am suggesting is not easy. It's difficult enough to learn one specialty. To learn several is much more so. To be an effective generalist requires learning enough of several fields to get a demanding job done. On the other hand, a field of specialty is a rather arbitrary division of knowledge. In reality, there is so much interconnectedness that to understand even one specialty effectively requires a certain amount of general knowledge and even detailed understanding of other specialties, both theory and application.
Life on this earth is of a finite duration. Memory atrophies. Recording the processes and results of our skills and imagination is a necessity both to refresh our own memories and to pass on our knowledge to others of this and later generations.