on Sustainable Design
There is a growing awareness of the necessity for sustainable design in industry. Few thinking people can escape the simple reality that design directly impacts both the initial capital and long term maintenance costs associated with products and services. Unless the designer approaches the problem of the total lifetime cost from the onset, it is difficult to establish a sustainable design in subsequent revisions. In many industries today, the process of redesigning products largely consists of phasing out old designs and replacing them with entirely new processes. Companies that can not afford to invest in new design work are quickly finding it impossible to adapt to the changing market place.
One area that little thought has gone into sustainability is the computer industry. Mention heavy metal contamination, carcinogenic off-gassing, or any number of environmental disasters afflicting the San Francisco Bay Area, and you're likely to get an earful from most techies. Its not that they hate the environment, just that they are incredibly defensive of the technology they love. Like most industries that employ large numbers of people generating vast quantities of toxic sludge, our techno-industrial society is incredibly resistant to change.
But it isn't just hardware programmers who are guilty of polluting. Wasteful, bloated, inefficient software is just as guilty. After all, the ever increasing hardware requirements of most mainstream software directly influences product obsolescence. Server-side applications which are not coded for efficiency consume incredible amounts of power. Not only is it energy intensive to drive the software, it is also energy intensive to filter the air, and climate control the server farms that power these applications. When added to the required processing power on the client side, many internet applications are substantially less power efficient than their desktop or embedded brethren.
But environmental sustainability isn't the only form of sustainability we should be concerned about. There is also a social cost to all of this bloat. As the hardware-software system becomes increasingly complex, more time and effort must be applied by engineers to understand how it works. As the complexity grows, the amount of human resources applied to solving the problems that emerge as a result of poor design also grows. This feedback loop further compounds the complexity, as programmers and engineers with insufficient general insight produce even more layers of complexity due to misunderstandings, simple ignorance, or willful and deliberate abandonment of responsibility for their designs.
The associated opportunity cost of having so many minds contend with needless complexity is reflected in all of the productive applications that are never written. Because software has become so much more complex, few engineers attempt to design simple systems in conjunction with hardware. Since the major market players use this artificial complexity to discourage competition, few engineers apply their minds to develop technology outside of the box. Rather than designing a radically new interface, it is more cost effective to rehash the same software we've been writing since the 1970s. Just add new shiny.
A New Way
The past few months, I've been lucky enough to have the opportunity to approach the issue of sustainable design with fresh eyes. Under no requirements to produce a commercial product, I began writing a book on learning to program. In the development of the book, I struck upon the idea of building a computer system that could be learned in a day. The requirement to keep the entire system simple encouraged me to reconsider assumptions I've long held about the value of certain techniques.
As a result of these experiments, I've designed a complete computing system that can be emulated on most platforms existing today in around 450 lines of C code. If you printed the source listings out on paper, you'd end up with about 10 pages of source code. With careful study, an average C programmer could easily read and understand that much code in a day.
The implementation of the system in its own language will probably require 1/2 as many lines of code to implement (around 200 defined words). This system includes all of the features that are required for a modern desktop: scalable vector graphics, CD quality audio, multipoint input devices, and TCP/IP networking. Additionally, as the native hardware is designed in conjunction with the software, its implementation will also be comprehendible to both the hardware and software engineers alike.
By building software and hardware that is simple enough to learn in a couple days, we can reduce the social cost associated with the computing industry. By designing systems that are easy to learn and easy to use, we ensure that the system is sustainable not just in terms of its environmental impact, but also in the long term social impact. If anyone can understand how a system works, it is much more likely to survive into the indefinite future. If natural or man-made disaster strikes, it is the simplest solutions that will survive.