TITLE: Simple/Complex Versus Easy/Hard
AUTHOR: Eugene Wallingford
DATE: October 24, 2011 7:38 PM
A few years ago, I heard a deacon give a rather compelling talk
to a group of college students on campus. When confronted with
a recommended way to live or act, students will often say that
living or acting that way is hard. These same students are
frustrated with the people who recommend that way of living or
acting, because the recommenders -- often their parents or
teachers -- act as if it is easy to live or act that way. The
deacon told the students that their parents and teachers don't
think it is easy, but they might well think it is simple.
How can this be? The students were confounding "simple" and
"easy". A lot of times, life is simple, because we know what
we should do. But that does not make life easy, because doing
a simple thing may be quite difficult.
This made an impression on me, because I recognized that
conflict in my own life. Often, I know just what to do. That
part is simple. Yet I don't really want to do it. To do it
requires sacrifice or pain, at least in the short term. To do
it means not doing something else, and I am not ready or willing
to forego that something. That part is difficult.
Switch the verb from "do" to "be", and the conflict becomes
even harder to reconcile. I may know what I want to be.
However, the gap between who I am and who I want to be may be
quite large. Do I really want to do what it takes to get
there? There may be a lot of steps to take which individually
are difficult. The knowing is simple, but the doing is hard.
This gap surely faces college students, too, whether it means
wanting to get better grades, wanting to live a healthier life,
or wanting to reach a specific ambitious goal.
When I heard the deacon's story, I immediately thought of some
of my friends, who like very much the idea of being a "writer"
or a "programmer", but they don't really want to do the hard
work that is writing or programming. Too much work, too much
disappointment. I thought of myself, too. We all face this
conflict in all aspects of life, not just as it relates to
personal choices and values. I see it in my teaching and
learning. I see it in building software.
I thought of this old story today when I watched Rich Hickey's
talk from StrangeLoop 2011,
Simple Made Easy.
I had put off watching this for a few days, after tiring of a
big fuss that blew up a few weeks ago over Hickey's purported
views about agile software development techniques. I knew,
though, that the dust-up was about more than just Hickey's
talk, and several of my friends recommended it strongly. So
today I watched. I'm glad I did; it is a good talk. I
recommend it to you!
Based only on what I heard in this talk, I would guess that
Hickey misunderstands the key ideas behind XP's practices of
test-driven development and refactoring. But this could well
be a product of how some agilistas talk about them. Proponents
of agile and XP need to be careful not to imply that tests and
refactoring make change or any other part of software development
easy. They don't. The programmer still has to understand the
domain and be able to think deeply about the code.
Fortunately, I don't base what I think about XP practices on
what other people think, even if they are people I admire for
other reasons. And if you can skip or ignore any references
Hickey makes to "tests as guard rails" or to statements that
imply refactoring is debugging, I think you will find this
really is a very good talk.
Hickey's important point is that simple/complex and easy/hard
are different dimensions. Simplicity should be our
goal when writing code, not complexity. Doing something that
is hard should be our goal when it makes us better, especially
when it makes us better able to create simplicity.
Simplicity and complexity are about the interconnectedness of
a system. In this dimension, we can imagine objective measures.
Ease and difficulty are about what is most readily at hand,
what is most familiar. Defined as they are in terms of a
person's experience or environment, this dimension is almost
And that is good because, as Hickey says a couple of times in
the talk, "You can solve the familiarity problem for yourself."
We are not limited to our previous experience or our current
environment; we can take on a difficult challenge and grow.
Alan Kay often talks about how it is worth learning to play
a musical instrument, even though playing is difficult, at
least at the start. Without that skill, we are limited in
our ability to "make music" to turning on the radio or
firing up YouTube. With it, you are able make
music. Likewise riding a bicycle versus walking, or
learning to fly an airplane versus learning to drive a car.
None of these skills is necessarily difficult once we learn
them, and they enable new kinds of behaviors that can be
simple or complex in their own right.
One of the things I try to help my students see is the value
in learning a new, seemingly more difficult language: it
empowers us to think new and different thoughts. Likewise
making the move from imperative procedural style to OOP or to
functional programming. Doing so stretches us. We think and
program differently afterward. A bonus is that something that
seemed difficult before is now less daunting. We are able to
work more effectively in a bigger world.
In retrospect, what Hickey says about simplicity and
complexity is actually quite compatible with the key
principles of XP and other agile methods. Writing tests is a
part of how we create systems that are as simple as we can in
the local neighborhood of a new feature. Tests can also help
us to recognize complexity as it seeps into our program, though
they are not enough by themselves to help us see complexity.
Refactoring is an essential part of how we eliminate complexity
by improving design globally. Refactoring in the presence of
unit tests does not make programming easy. It doesn't replace
thinking about design; indeed, it is thinking about
design. Unit tests and refactoring do help us to grapple with
complexity in our code.
Also in retrospect, I gotta make sure I get down to St. Louis
for StrangeLoop 2012. I missed the energy this year.