Between the end of classes last week and a paper deadline next week, I haven't done much outside of work lately. Last weekend though, I treated myself to a favorite spectator event: a master class in music. In a master class, music students perform for a master (usually renown) musician, who works with the student to improve the performance. The audience gets to watch the whole exchange, which lasts 30-45 minutes per student.
Music master classes thrill me on many levels. As a teacher, I envy the masters: they hear the effects of their teaching in real-time (and the difference is usually dramatic, easily noticeable even to my amateur ear). A student can play the same 30-second excerpt over and over with different voice or emphasis each time. Each time, the piece and the process become more alive. What reward must lie in such interaction. In teaching programming, writing the same code over and over in different styles is tedious; once code is written once, writing the same code again with minor variation doesn't offer insight that's worth the time or trouble.
As one interested in the structure of software systems, I'm intrigued by how the masters move students between thinking high-level and low-level, between thinking compositionally versus decompositionally. The first student played a piece with technical precision but not much emotion. The master helped her find and emphasize local melodic patterns within the overall piece. The second played with incredible emotion and intensity, but without an overarching organization to the emotion to carry the listener through the piece. The master helped him find a story across the piece and to refine his playing to draw that out. These students are experimenting with ways to interpret a finished product (the composed piece). I work more like the composer in trying to create the piece in the first place. When I'm done though, at best most people interact with a small portion of what I've created (the user-interface, not the underlying code). A computing system needs to be fairly complex to give a user a large space in which to interpret the result; music students, in contrast, can work on interpretation even from the smallest pieces. The route to exploration is much shorter for the student.
I'm reminded of the interplay between high-level and low-level thinking this weekend as I bury myself in writing a paper. I love this process: moving ideas and results over and around in search of the story and emphasis that makes an idea come alive for a reader. This part of my job gives me real-time experimentation with organization and presentation (with more chances to get it right than when I lecture). I often wonder if I would enjoy this career without the writing aspect. Coding is similar, but far less forgiving: programming is sensitive to unfinished parts in ways that writing (or music) is not.
Master music classes remind me what interactive teaching can be for both teacher and student. Can we bring that spirit into teaching computing and programming? Does it make sense to do so? I hear more and more that students reject computer science because of the long detailed hours. How do we teach to expose more of the intermediate rewards? What would a master class in computing look like? My best vision right now involves a lot of shell scripting, which could be cool but only applies to a limited range of programming tasks. What about a master class in software modeling? The right notes must be there, if we can figure out how to scale them to computing education.