TITLE: Different Kinds of Pain
AUTHOR: Eugene Wallingford
DATE: April 06, 2006 6:46 PM
The other night at dinner, I was telling my family about
the state of my legs after my most recent run, and I said,
"My legs don't hurt, but my hamstrings are sore." My
younger daughter, Ellen, responded, "Um, Dad, your
hamstring is part of your leg." And I was caught. Fun
was had by all at my expense.
Of course, I was talking about different kinds of pain.
I've been thinking about different kinds of pain a lot
lately. As I mentioned in my
I have been having trouble with my hamstrings. I have
not suffered from a running injury in the three-plus
years since I developed a larger commitment to running,
but I've felt plenty of pain. Whenever we push our
bodies farther than they are used to going, they tend
to talk back to us in the form of muscle soreness and
maybe even a little joint soreness. That pain is a
natural part of the growth process, and if we can't
handle that sort of pain then we can't get better --
more speed, more stamina. Oh, I suppose that we might
be able to get better slowly, but so slowly
that it wouldn't be any fun. Even still, we runners
have to listen to their bodies and let them tell us
when to lighten up. I live with this sort of pain
periodically, as it is a part of the fun.
This is a different sort of pain than the pain we feel
when something is wrong with the body. Last week, my
hamstrings hurt. Walking was painful
at times, and going upstairs was torturous. This is
the kind of pain that evolved to tell us our bodies
are broken in a way that wasn't helping. Listening to
this kind of pain is crucial, because unheeded the
underlying cause can debilitate us. When we feel this
kind of pain, we need to "get better", not get "better".
This week I have been talking with students in my
compilers class. They are feeling a kind of pain --
the pain of a large project, larger than they've ever
worked on, that involves real content. If they design
the parsing table incorrectly, or implement the table-driven
parsing algorithm incorrectly, then their programs
won't work. To their credit, they all see this sort of
pain as useful, the sort of pain you feel when you are
getting better. "I've learned more about Java programming
and object-oriented design than I've ever learned
before." They realize that, in this case, less pain would
be worse, not better. Still, I feel for them,
because I recall what those first few experiences with
non-trivial programs felt like.
For my agile software development readers: I know that
I haven't written much about agile in a while, but I can
say that many of my students are also experiencing the
pain that comes from not using the agile practices that
they know about. Taking small steps, using unit tests,
and getting as much feedback from their code as often as
possible -- all would make their lives better. There is
nothing like trying to debug several hundred lines of
tightly-coupled code for the first time and needing to
track down why Rule 42 of 200 doesn't seem to be firing
at the right time!
This is also advising time, as students begin to register
for fall courses. Sometimes, the best course for a
student will be painful, because it will stretch him or
her in a way that the mind is not used to. But that may
be just what the student needs to get over the hump and
become a top-notch computer scientist!
These encounters with various kinds of pain remind me of an
essay by Kathy Sierra
from a month or so ago. One of her central points is that,
to become really good at a task, you must practice the parts
that you are weakest at -- you have to choose pain.
Most of us prefer to practice that with which we are already
comfortable, but then we don't stretch our (programming,
piano-playing, golfing, running) muscles enough to grow.
I suspect that it's even worse than that, that by repeatedly
practicing skills we are already good at we drive our
muscles into a rut that leaves us worse, not better. I see
that happen in my running every so often, and it probably
happens to my programming, too.
But is all the psychic pain we feel when taking a compilers
course or learning to program a good sign? Probably not.
We do need to choose tasks to master for which we are
well suited, that we like enough to work on at all. If
you really have no affinity for abstraction and problem
solving, then computer science probably isn't for you.
You'll not like doing it, no matter how expert you become.
But after selecting a task that you can be good at or
otherwise interested in, you after to be ready to take
on the growing pains that come with mastering it. Indeed,
you have to seek out the things you aren't good at and
whip them. (*)
I hope you have the chance to feel the right kind of pain
soon. But not for long -- be sure to move on to the fun
of getting better as soon as possible.
(*) I do offer one caveat, though. It is too easy to
tell ourselves, "Oh, I don't like that" as a way to avoid
finding out whether we might like something enough in
practice. I don't know how many times people have said,
upon hearing that I ran 20 miles that morning, "Oh, I
can't run long distances" or "I don't like to run at all".
I usually smile politely, but sometimes I'll let them
know that I didn't know I liked it until I had done it
for a while. I used to make jovial fun of my friends
who ran. Then I did a little for ulterior reasons
and thought, "Hmmm...", and then I did more and more.
Sometimes we need to try something out for a while just
to know it well enough to judge it.