It is widely accepted that less context switching, more productivity. For example, suppose you have two tasks, say task A and B. If you focus on task A for one hour, and then switch to task B, your productivity would be much higher compared with the case that you work on two tasks for 10 minutes alternatively. The reason is that it requires really long time to enter the state of one particular task, therefore context switching consumes too much time, leading to less productivity.
Let's now consider how we learn the usage of one program. Although this is only one task per se, it typically seems to be two completely different processes on computer. We need to start the program to learn, and also open another program to read the tutorial. Normally tutorials are distributed as HTML, PDF, or Info files. So when learning, we read several paragraphs in tutorial, and when we meet something intersting enough for practicing, we switched to the target program and try something there. We then switch back and read again. Sometimes we may switch several times within one minute. Such learning practice normally is not so satisfactory. Fortunately there are some programs whole learning process is not segmented as what we described above. The characteristic of such programs is that the tutorial itself is distributed in one of the formats that the program itself can view and/or manipulate. For example, web browser, PDF reader, Emacs when used as an Info reader obviously fall into such category, since they are designed to be the program for these file types. There are also other examples:
- Emacs: although I have already mentioned it before as an Info reader, I'd like to point out that the plain Emacs tutorial is also excellent. Simply typle C-h t to bring up this nice tutorial. The tutorial file is self is a plain text file, however the command you just typed manuipulates the file, and setup a nice environment full of interactivity, which guide you into the realm of this mighty editor.
- Inkscape is yet another excellent example. When I first tried to learn it, I googled around and find the tutorials online. I soon discovered that those tutorials are already bundled with the distribution in SVG format, which encourages you to fool around. This is the first time I ever feel that learning a drawing program is so pleasant.
- FreeMind is another example. It distributes its help in the form of mind map, which is what the program is created for. When you read the help along, you immediately got the idea on how the program is used and what it can do. The only drawback is that you cannot try some modification operations when you read the help. But this can be easily overcome by copy the help file into a different place and open it directly.
In summary, these nice programs provide immersing tutorials. When you are learning, you are reading and practicing simultaneously. You use the same mouse/keyboard operation to scroll/zoom the tutorial as you would use for the program itself. You try things out on the tutorial directly, which provide great involved experience.
Can programs other than viewers or editors provide us immersing tutorials? Currently my thinking is that it would be good for programs to at least support displaying HTML. This can be done by reuse some nice web engines like Gecko. Then the help window can be opened in a separate window in the program. The learning process might not be so amazing as the examples listed above, but the productivity can still be improved compared with two-separate-program-approach.