1.  Educational Assumptions and Design.

      First, the way to teach people how to do something is to have them do it. Scripts should not contain long pieces of explanation; they should instead frequently ask the student to do some task. So teaching is always by example: the typical script fragment shows a small example of some technique and then asks the user to either repeat that example or produce a variation on it. All are intended to be easy enough that most students will get most questions right, reinforcing the desired behavior.

      Most lessons fall into one of three types. The simplest presents a lesson and asks for a yes or no answer to a question. The student is given a chance to experiment before replying. The script checks for the correct reply. Problems of this form are sparingly used.

      The second type asks for a word or number as an answer. For example a lesson on files might say

The student is expected to respond (perhaps after experimenting) with

answer 17

or whatever. Surprisingly often, however, the idea of a substitutable argument (i.e., replacing N by 17) is difficult for non-programmer students, so the first few such lessons need real care.

      The third type of lesson is open-ended -- a task is set for the student, appropriate parts of the input or output are monitored, and the student types ready when the task is done. Figure 1 shows a sample dialog that illustrates the last of these, using two lessons about the cat (concatenate, i.e., print) command taken from early in the script that teaches file handling. Most learn lessons are of this form.

    +--------------------------------------------------------+
    |Figure  1:   Sample  dialog from			     |
    |basic files script 				     |
    |							     |
    |(Student responses  in  italics;			     |
    |`$' is the prompt) 				     |
    |							     |
    |A file can be printed on your terminal		     |
    |by using the "cat" command.  Just say		     |
    |"cat file" where "file" is the file name.		     |
    |For example, there is a file named 		     |
    |"food" in this directory.	List it 		     |
    |by saying "cat food"; then type "ready".		     |
    |$ cat food 					     |
    |  this is the file 				     |
    |  named food.					     |
    |$ ready						     |
    |							     |
    |Good.  Lesson 3.3a (1)				     |
    |							     |
    |Of course, you can print any file with "cat".	     |
    |In particular, it is common to first use		     |
    |"ls" to find the name of a file and then "cat"	     |
    |to print it.  Note the difference between		     |
    |"ls", which tells you the name of the file,	     |
    |and "cat", which tells you the contents.		     |
    |One file in the current directory is named for	     |
    |a President.  Print the file, then type "ready".	     |
    |$ cat President					     |
    |cat: can't open President				     |
    |$ ready						     |
    |							     |
    |Sorry, that's not right.  Do you want to try again? yes |
    |Try the problem again.				     |
    |$ ls						     |
    |.ocopy						     |
    |X1 						     |
    |roosevelt						     |
    |$ cat roosevelt					     |
    |  this file is named roosevelt			     |
    |  and contains three lines of			     |
    |  text.						     |
    |$ ready						     |
    |							     |
    |Good.  Lesson 3.3b (0)				     |
    |							     |
    |The "cat" command can also print several files	     |
    |at once.  In fact, it is named "cat" as an abbreviation |
    |for "concatenate"....				     |
    +--------------------------------------------------------+

      After each correct response the computer congratulates the student and indicates the lesson number that has just been completed, permitting the student to restart the script after that lesson. If the answer is wrong, the student is offered a chance to repeat the lesson. The ``speed'' rating of the student (explained in section 5) is given after the lesson number when the lesson is completed successfully; it is printed only for the aid of script authors checking out possible errors in the lessons.

      It is assumed that there is no foolproof way to determine if the student truly ``understands'' what he or she is doing; accordingly, the current learn scripts only measure performance, not comprehension. If the student can perform a given task, that is deemed to be ``learning.'' skinner teaching 1961

      The main point of using the computer is that what the student does is checked for correctness immediately. Unlike many CAI scripts, however, these scripts provide few facilities for dealing with wrong answers. In practice, if most of the answers are not right the script is a failure; the universal solution to student error is to provide a new, easier script. Anticipating possible wrong answers is an endless job, and it is really easier as well as better to provide a simpler script.

      Along with this goes the assumption that anything can be taught to anybody if it can be broken into sufficiently small pieces. Anything not absorbed in a single chunk is just subdivided.

      To avoid boring the faster students, however, an effort is made in the files and editor scripts to provide three tracks of different difficulty. The fastest sequence of lessons is aimed at roughly the bulk and speed of a typical tutorial manual and should be adequate for review and for well-prepared students. The next track is intended for most users and is roughly twice as long. Typically, for example, the fast track might present an idea and ask for a variation on the example shown; the normal track will first ask the student to repeat the example that was shown before attempting a variation. The third and slowest track, which is often three or four times the length of the fast track, is intended to be adequate for anyone. (The lessons of Figure 1 are from the third track.) The multiple tracks also mean that a student repeating a course is unlikely to hit the same series of lessons; this makes it profitable for a shaky user to back up and try again, and many students have done so.

      The tracks are not completely distinct, however. Depending on the number of correct answers the student has given for the last few lessons, the program may switch tracks. The driver is actually capable of following an arbitrary directed graph of lesson sequences, as discussed in section 5. Some more structured arrangement, however, is used in all current scripts to aid the script writer in organizing the material into lessons. It is sufficiently difficult to write lessons that the three-track theory is not followed very closely except in the files and editor scripts. Accordingly, in some cases, the fast track is produced merely by skipping lessons from the slower track. In others, there is essentially only one track.

      The main reason for using the learn program rather than simply writing the same material as a workbook is not the selection of tracks, but actual hands-on experience. Learning by doing is much more effective than pencil and paper exercises.

      Learn also provides a mechanical check on performance. The first version in fact would not let the student proceed unless it received correct answers to the questions it set and it would not tell a student the right answer. This somewhat Draconian approach has been moderated in version 2. Lessons are sometimes badly worded or even just plain wrong; in such cases, the student has no recourse. But if a student is simply unable to complete one lesson, that should not prevent access to the rest. Accordingly, the current version of learn allows the student to skip a lesson that he cannot pass; a ``no'' answer to the ``Do you want to try again?'' question in Figure 1 will pass to the next lesson. It is still true that learn will not tell the student the right answer.

      Of course, there are valid objections to the assumptions above. In particular, some students may object to not understanding what they are doing; and the procedure of smashing everything into small pieces may provoke the retort ``you can't cross a ditch in two jumps.'' Since writing CAI scripts is considerably more tedious than ordinary manuals, however, it is safe to assume that there will always be alternatives to the scripts as a way of learning. In fact, for a reference manual of 3 or 4 pages it would not be surprising to have a tutorial manual of 20 pages and a (multi-track) script of 100 pages. Thus the reference manual will exist long before the scripts.