TITLE: OOPSLA Day 5: Martin Fowler on Finding Good Design
AUTHOR: Eugene Wallingford
DATE: October 20, 2005 3:57 PM
DESC: Martin's keynote mirrored his career: a useful aggregation of ideas from other places,woven into a story that adds value to them all.
Sadly... The last day of OOPSLA is here. It will be
a good day, including
-- could I possibly skip a panel with Kent and so many
Big Names?) (later note: I didn't),
Programmers versus Users
panel) (later note: I am at this panel now), and finally,
But then it's over. And I'll be sad.
On to Martin or, as he would say, Mah-tin. Ralph Johnson
epigrammatic characterization of Martin: an intellectual
jackal with good taste in carrion. Soon, Ralph began
to read his official introduction of Martin, written by
... Brian. It was a play on the location of conference,
in Fashion Valley. In the fashion world, good design is
essential, and we know our favorite designers by one name:
Versace, Halston, Kent, Ward -- and Mah-tin. Martin lives
a life full of beautiful models, and he is "a pretty good
writer, for an Englishman".
On came Martin. He roamed the full stage, and then sat down
in a cushy chair.
When asked to keynote at a conference like OOPSLA, one is
flush with pride. Then you say 'yes', which is your first
mistake. What can you say? Keynoters are folks who make
great ideas, who invent important stuff. Guy's talks was
the best. But I'm not a creator or deep thinker, says...
I'm that guy who goes to a fashion show, steals the ideas
he sees, knocks off the clothing, and then mass-markets
them at the mall. I just want to know where we are, says
Martin; predicting the future is beyond me.
To shake things up, he called on
to the stage. Those of you who have attended a
conference know George as a "lateral thinking consultant"
and games leader. Earlier, Martin had asked him to
create a game for the whole crowd, designed to turn us
into intellectual jackals. For this game, George drew
his inspiration from the magnificent book
Life of Pi.
(Eugene says: If you have not read this book, do it.
Now.) George read a list of animal sounds from one page
in the book and told each of us to choose one. He then
told each of us to warm up by saying our own name in
that fashion. (I grunted "Eugene"). He then asked
everyone whose first name started with A to stand and
do it for the crowd. Then I and R; D, M, V; G, P, Y;
... and finally E, N, and W. Finally, the whole room
stood and hissed, grunted, growled "OOPSLA".
Back came Martin to the forefront, for the talk itself.
Martin's career is aimed at answering the question,
"What is good design?" He seeks an answer that is
more than just fuzzy words and fuzzy ideas.
At the beginning of his career, Martin was an EE. In
that discipline, designers drawing a diagram that
delineate a product and then passes it on to the
person who constructs the thing. So when Martin moved
on to software engineering, which had adopted this
approach. But soon he came to reject this approach.
Coding as construction fails. He found that designs
-- other people's design and his own -- always turned
out to be wrong. Eventually, he met folks he recognized
as good designers who design and code at the same
time. Martin came to see that the only way to
design well is to program at the same time, and the
only way to program well is to design at the same time.
That's the philosophy underlying all of Martin's work.
How do we characterize good designs? A set of principles.
One principle central to all good designs is to eliminate
duplication. He remembers when Kent told him this, but
at the time Martin dismissed it as not very deep. But
then he saw that there is much more to this than he first\
thought. It turns out that when you eliminate duplication,
your designs end up good, almost irrespective of anything
else. He noted that this has been pattern in his life:
see an important idea, dismiss it, and eventually come
around. (And then write a book about it. :-)
Another principle: orthogonality, the notion that different
parts of a system should do different kinds of things.
Another principle: separate the user interface from the
guts of the program. One way to approach this is to
imagine you have to add a new UI to your system. Any code
you would have to duplicate is in the wrong place.
Philosophy. Principles. What is the next P?
Patterns -- the finding of recurring structures. Martin
turned to Ralph Johnson, who has likened pattern authors
to Victorian biologists, who went off to investigate a
single something in great detail -- cataloging and
identifying and dissecting and classifying. You learn
a lot about the one thing, but you also learn something
bigger. Consider Darwin, who ultimately created the
theory of natural selection.
The patterns community is about finding that core
something which keeps popping in a slightly different
way all over the place. Martin does this in his work.
He then did a cool little human demonstration of one
of the patterns from his
Patterns of Enterprise Application Architecture,
an event queue. In identifying and naming the pattern,
he found so many nice results, including some unexpected
ones, like the ability to rewind and reply transactions.
Patterns people "surface" core ideas, chunk them up into
the right scale, and identify when and when not to use
Why isn't the patterns community bigger? Martin thinks
it should be bigger, and in particular should be a
standard part of every academic's life! We academics
should go out, look at big old systems for a couple of
months, and try to make sense of them.
At the end of the session,
pointed out two reasons why academic programmers don't
do this: they do not receive academic credit for such
activity, and they do not have access to the large
commercial systems that they really need to study. On
the first point, Martin agreed. This requires a shift
in the academic culture, which is hard to do. (This
issue of academic culture, publishing, and so on came
up again at the
later in the morning.)
Martin volunteered to bellow in that direction whenever
and wherever asked. On the second point, he answered
with an emphatic 'yes!' Open source software opens a
new avenue for this sort of work...
Philosophy. Principles. Patterns. What is the last P?
Practices. His favorite is, of course, refactoring. He
remembers watching Kent Beck editing a piece of code of
Martin Fowler code. Kent kept making these small, trivial
changes to the code, but after each step Martin found
himself saying, "Hmm, that is better." The
lightbulb went off again.
He thanked John Brant and Don Roberts, Bill Opdyke and
Ralph Johnson, and Ward and Kent. It's easy to write
good books when other people have done the deep thinking.
He then pointed to
Mary Beth Rosson's
project that asks students to fixing code as a way to
learn. (Eugene thinks: But that's not refactoring,
right?) Refactoring is a good practice for students
as they learn. "Here is some code. Smell it. Come
back when it's better."
My students had better get ready...
Another practice that Martin lives and loves is test-driven
design. Of course,it embodies the philosophy he began
this talk with: You design and program at the same time.
And thus endeth the lesson.
In addition to the comment on academics and patterns,
James Noble asked another question. (Martin lamented,
"First I was Footed, and now I am Nobled." If you know
Foote and Noble, you can imagine why this prospect would
have a speaker a bit on edge.) James played it straight,
except for a bit of camera play with the mic and stage,
and pointed out that separating the UI ought causes an
increase in the total amount of code -- he claimed
50%. How is that better? Martin: I don't know. Folks
have certainly questioned this principle. But then, we
often increase duplication in order to make it go away;
maybe there is a similarity here?
Or, as Martin closed, maybe he is just wrong. If so, he'll
learn that soon enough.