I’ve been reading Simon Winchester’s The Meaning of Everything, a history of the Oxford English Dictionary and, whilst I find his style somewhat annoying, the story is fascinating. In the first chapter, Winchester discusses the history of earlier English dictionaries (a subject which is covered in far more detail in the excellent Chasing the Sun if you’re interested). One thing I find strange is that it took so long for dictionaries to progress from lists of ‘hard’ words to becoming the all inclusive things we know today. Early dictionary makers were happy to simply list and define the kinds of words that I imagine you’d find in a Readers’ Digest Word Power column whilst ignoring the nuts and bolts of the language. Maybe they just assumed that everyone already knew them.
But it turns out that dictionaries become really potent tools when they are complete; perfectly good, commonplace words fall out of use, others that were once pure jargon become current (If you’ve read the Jargon File (or the OED) you’ll know that ‘emailled’ once meant ‘embossed (with a raised pattern) or perh. arranged in a net or open work’ though I doubt it was ever a commonplace word back then), other words change their meaning over time and a good dictionary like the OED will trace these shifts in meaning.
A good dictionary isn’t afraid to state the obvious, if only because it’s not always obvious which words are obvious.
Nor should we be. Which brings me, by a somewhat roundabout route to my point. All too often I’ve seen books on the practise of programming that I really respect (Refactoring and The Pragmatic Programmer are two good examples) dismissed out of hand because they are “just stating the obvious”. Christopher Alexander’s books on building receive flak along the same lines; architects dismiss A Pattern Language, arguing that many of the patterns are obvious and that, anyway, such a collection can’t really generate a beautiful town/room/building.
That Alexander now agrees with them on the latter point doesn’t detract from A Pattern Language's greatness. It’s a great book because it states the obvious with such clarity and focus. It gives the reader names for things that were once nameless intuitions and it enables meaningful discussion about those ideas because it provides a shared vocabulary. The same thing can be said about programming books; Refactoring is a classic if only because if gives us a new vocabulary. The Pragmatic Programmer is a great book because it collects those gems or coder wisdom that we’ve all come across between two covers, and because it expresses them so well. Bentley’s Programming Pearls did the same thing years ago, but we’ve learned a few things since then…
Stating the obvious isn’t a bad thing. Doing so poorly, without due attention to your audience is the only sin. So don’t be offended when someone tells you something you already know. Think about what’s been said, maybe the other persons’s perspective will improve your understanding. Maybe the confirmation is good. Or maybe it’s unnecessary. So, politely let on that you already know this stuff and let the conversation move on.