Putting a Face to a Name
I had the pleasure yesterday of finally meeting Michael Feathers, author of one of my favorite programming books, and a contributor to Beautiful Code. Along with a couple of other people, we talked for a bit about unwritten books, software design, and the fact that discussion about the latter seems to have stagnated. A lot is still being written about how to put code together, but I can’t remember the last time I heard someone say something on the subject that was genuinely new.
One thing that was new (at least to me) was Michael’s observation that refactoring pure functional code is a lot easier than refactoring imperative code. Like a lot of people, he has been messing around with current-generation functional (or nearly-functional) languages, and he has discovered that when you take side effects away, reorganizing code becomes much, much simpler. I’m still not convinced that Erlang, Haskell, or F# is actually going to be the next big thing, but hey, I’ve been wrong before…
Another thing that came up was a way of teaching students how to navigate large code bases. The idea was to give a good developer some code she had never seen before—some big code, not just a screenful or two—and make a screencast of her thinking aloud as she figured out just enough about how it worked to make a simple change. I would use videos like that in my software engineering courses (and not just because it would save me having to make up a lecture or two); I’d also watch them myself, and I expect that most students who were about to start interviewing for their first jobs would want to sit through them as well. Anyone know of anything like this out there already? Or if not, would anyone like to volunteer to make one?