I'm deeply fascinated by the idea of tacit knowledge, which is the stuff that we don't know that we know, or that we assume that everyone knows so never bother to explain. To paraphase the philosopher Michael Polanyi, whom I cited in The tacit dimension of tech support, tacit knowledge means knowing more than we can (or do) tell.
One of the things that I've known tacitly, but never articulated, is that screencasting can be an excellent way to transmit tacit knowledge. An example I used in a talk last week comes from my recent screencast with Jim Hugunin about IronPython. At one point, Jim was showing how to manipulate a bunch of Avalon objects in a Python list. But along the way he unconsciously showed me an important fact about Python that, while I'm a relatively skilled user of that language, I'd somehow never discovered. It happened right here:
While Jim was typing for b in buttons: I was pondering the previous line, buttons = _, which (as in Perl) assigns the value of the most recently evaluated expression -- in this case, a list of Avalon objects -- to a default variable that's represented using the underscore character. How did I not know that, particularly given the direct Perl analog? Such knowledge gaps are weird, but hardly uncommon. The interesting thing here is that Jim transmitted that bit of knowledge without even realizing that he did so.
In my talk I suggested that this kind of unconscious transmission of tacit knowledge may be a key rationale for the practice of pair programming. Two programmers, working side by side, exchange tacit knowledge by osmosis.
To generalize from programming to all use of software-based tools, the equivalent of pair programming -- that is, direct observation of one another's use of such tools -- is ideal. But that's not always possible, in which case live screensharing or asynchronous screencasting is the next best thing to being there.
Former URL: http://weblog.infoworld.com/udell/2006/09/19.html#a1526