The article describes a generative computer-assisted instruction system (CAI). The CAI is designed to teach the material in an introductory computer science course at the University of Connecticut. It covers topics in combinational and sequential design as well as machine language programming. The system does not attempt to lecture or provide information which could more economically be presented in a text. Its main purpose is to teach techniques of problem solving by generating and solving practice problems. It monitors the student's solution by comparison with its own derived solution and gives remedial feedback when necessary. This system attempts to individualize instruction to suit each student. Consequently, an intelligent monitor is used to select the best course concept for a student at any instant of time. The depth at which each concept is presented is also adjusted dynamically to suit a student's current level of knowledge. The system has been used as an adjunct to regular classes and homework assignments. Student reaction has been favorable, as students have found the system helpful.