Practical Programmer Robert L. Glass
Software Design and the
Monkey’s Brain
Attempting to capture the nature of software design.
There has been a lot of brilliant software engineering
research over the years and
decades into the subject of software design. That’s the good
news. But then there’s th e bad
news.
The bad news is that all of
that brilliant research hasn’t
enhanced our knowledge
of how to do software
design in practice. It’s
like we now have a
really good handle on
the philosophy of
design, and the reality
of how to do design
well. But that hasn’t
helped us tell practitioners how to be better
designers.
MICHAEL SLOAN
My interest in design, and my
belief in the work of software
engineering researchers on the
subject of design, began over 20
years ago. At that time, Bill Curtis was leading a team of
researchers at the former Microelectronics and Computing Consortium (MCC) in Austin, TX,
and Elliot Soloway was conducting similar work at Yale Univer-
sity. The goal of these two efforts
was to investigate the nature of
software design in order to figure
out how to do it better. The
expectation, especially from Curtis and his team, was that the
result of their investigation was
going to be a set of processes—
probably tools—that could be
provided to software practitioners
to help them do their job so much
better.
The investigations were very
successful. By studying expert
designers at work, the researchers
learned that the essence of soft-
ware design was a sophisticated
trial-and-error activity:
• Develop a complete understanding of the problem to be
solved;
• Build a mental model of a proposed solution to the problem;
• Mentally execute the model
on a sample input to see if
it does indeed solve the
problem;
• If the output of the execu-
tion is incorrect (as will
often be the case in the
early stages of design),
expand the model to cor-
rect the deficiencies, then
execute again;
• Once the output of the execution of the model is correct,
choose a different sample input
and repeat the process; and
• Eventually, the expectation is
that a strongly enhanced mental model will be able to solve
all of the sample inputs
considered.
(To find a more complete discussion of this process and its
ramifications, read any of the
circa-1980s writings of either