Acknowledgement

The author would like to acknowledge and thank the Office Of Learning Technology of the Canadian Employment Insurance Commission for the generous support provided for this project.

Forward

These notes represent a significant milestone culminating five years of work by Theo Norvell and myself. Little did we know when we started out how long the road would be. I had been teaching C++ since the late eighties and had been growing more and more dissatisfied with the tools at my disposal. A solution to the problem had been slowly taking shape in my mind but I didn't have the expertise to tackle it alone.

One day, over coffee, I sketched out my ideas to Theo, and, Glory Be!, he got interested. He threw in a few ideas of his own and before we were properly aware of it, the Teaching Machine was born.

The fundamental proposition was quite simple. It was a matter of observation that beginning programmers often throw code at problems, using what worked last week, or for a friend, or for a different problem. For many of them programming too often seems like magic and there's more a sense of rather desparate invocation than of crafting. We refer to this as superstitious coding. There's sometimes some grains of truth in the code but there's an awful lot of mumbo-jumbo, too.

To a skilled programmer, every line of code is meaningful. If pressed most would probably say that a piece of code is just a set of instructions to an underlying machine. But when one is using a higher level language like C++ or Java, what does that machine really look like?

We believe it looks like an amalgam of the compiler and the microprocessor. The Teaching Machine represents an abstraction of how we think experienced programmers regard computers. Thus we represent memory quite physically as an array of bytes, much as the microprocessor does, but organize them into stores, an altogether higher level concept. Again, our model for mathematical computation is something we call the expression engine which is a combination of an ALU (which fetches data from memory and executes) and an parser (which takes apart C expressions).

Somewhere along the way WebWriter++ was added to make it easy for instructors to build the Teaching Machine into web pages.

The next step seemed inevitable. Moving an entire course into HTML so that the TM could be integrated totally into the notes. This site is the result.

Although it was designed to be used in lectures, student feedback indicates it also functions pretty well as a standalone site. I can conceive a number of things that would improve its performance in that direction, most notably a set of videos demonstrating the TM examples. I am contemplating their creation even as this is written.

And once again, I would like to thank The Office of Learning Technology for their kind support.