Wednesday, November 16, 2011

The Computer Scientist as Toolsmith

Every once in a while I have the pleasure of rediscovering an old article whose lessons have withstood the test of time. Two articles by Frederick P. Brooks Jr. entitled "The Computer Scientist as Toolsmith" 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.

1 comment:

Matt Doar said...

I agree with Brooks' thoughts on the toolsmith role. They've guided my professional direction.


Post a Comment