TITLE: Different Kinds of Pain AUTHOR: Eugene Wallingford DATE: April 06, 2006 6:46 PM DESC: ----- BODY: 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 last post, 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. -----