November 16, 2011
The Computer Scientist as Toolsmith
—A look at great paper by Frederick P. Brooks Jr. on the role of tool building.
Every once in a while I have the pleasure of rediscovering an old article whose lessons have withstood the test of time. Two editions of "The Computer Scientist as Toolsmith" by Frederick P. Brooks Jr. pass this test.
Both articles appear under the same title. The first article was written in 1977 (reproduced in 1988
); the second published in the Communications of the ACM in March 1996
In the first article, Frederick makes the point that Computer Science isn't a scientific discipline. It is an engineering discipline. The distinction he makes is that scientists build things in order to study and the engineer studies things in order to build.
Computer Scientists engineer abstract objects. That is, they do not engineer objects that directly serve human needs. Instead they construct tools that server user's needs. In effect, the Computer Scientist is a toolsmith.
The key difference between Computer Science and the sciences is Computer Science's need to deal with arbitrary complexity. We don't have the most elegant solutions or the belief that some grand natural design is available and supports our exploration of Computer Science. Many other sciences have this advantage.
Personally, I believe that arbitrary complexity arises from poorly understood interactions between system components--there are several articles in the recent literature to support this (for example "Computer Science Can Use More Science
"). That article provides a thought-provoking contrast between what engineers know about the Saturn V Rocket and the LAMP application stack.
In the second article, Frederick makes the argument that intelligence amplifying systems, that is systems that support people in accomplishing tasks are much more successful than trying to create systems to replace people. His argument is made in the context of the original goals for Artificial Intelligence and contrasts them with that field's accomplishments. He goes on to extend the thesis of the Computer Scientist as toolsmith by suggesting that Computer Scientists partner with people in other disciplines so that they can build tools that enable people in those other disciplines to solve real problems.
I like the idea of building tools for others to consume. The notion of intelligence amplification is a really nice way to look at how these extend the ability of people to accomplish tasks that really matter and make a difference in people's lives.
The most telling aspects of the two articles by Frederick, separated by almost 20 years and the article by Morrison and Snodgrass is how little has changed over the past 30 years.