TITLE: A Typical Day Thinking Backward AUTHOR: Eugene Wallingford DATE: December 16, 2009 9:51 PM DESC: ----- BODY: Today I was thinking retrospectively about themes as I wrote the final exam for my software engineering course. It occurred to me that one essential theme of the course needs to be design for testability. We talked about issues such as coupling and cohesion, design heuristics and patterns for making loosely connected, flexible code, and Model-View-Controller as an architectural style. Yet much of the code they wrote was coupled too tightly to test conveniently and thoroughly. I need to help them connect the dots from the sometimes abstract notions of design to both maintenance and testing. This will help me bring some coherence to the design unit of the course. I am beginning to think that much of the value in this course comes from helping students to see the relationships among the so-called stages of the software life cycle: design and testing, specification and testing, design and maintenance, and so on. Each stage is straightforward enough on its own. We can use our time to consider how they interact in practice, how each helps and hinders the others. Talking about relationships also provides a natural way to discuss feedback in the life cycle and to explore how the agile approaches capitalize on the relationships. (Test-driven development is the ultimate in design for testability, of course. Every bit of code is provoked by a test!) I realize that these aren't heady revelations. Most of you probably already know this stuff. It's amazing that I can teach a course on writing software for an entire semester, after so many years of writing software myself, and only come to see such a basic idea clearly after having made a first pass. I guess I'm slow. Fortunately, I do seem eventually to learn. Last night I read a few words that I needed to see. They come from Elizabeth Gilbert, on writing:
Quit your complaining. It's not the world's fault that you wanted to be an artist. It's not the world's job to enjoy the films you make, and it's certainly not the world's obligation to pay for your dreams. Nobody wants to hear it. Steal a camera if you have to, but stop whining and get back to work.
Plug 'programmer' or 'teacher' in for 'artist', and 'laptop' for 'camera', and this advice can help me out on most days. Not because I feel unappreciated, but because I feel pulled in so many directions away from what I really want to do: prepare better courses and -- on far, far too many days -- from writing code. Like Gilbert, I need to repeat those words to myself whenever I start to feel resentful of my other duties. No one cares. I need to find ways to get back to work. Gilbert closes her essay with more uplifting advice that also feels right:
My suggestion is that you start with the love and then work very hard and try to let go of the results.
If you love to program, or to teach, or to run, you do it. Remember the love that got you into the game, and let it keep you there. The rest will follow. Oh, and if you haven't seen Gilbert's TED talk, walk back to her home page and watch. It's a good one. -----