The ultimate goal of my research is to transform the teaching
of introductory computing from learning a programming language to
learning to systematically design programs —
The professional level programming languages and the IDEs used for writing programs are poorly suited for this task. The goals of my research and software development is to provide a novice programmer with tools and environments where the systematic program design can be practiced without unnecessary burden, and where the programmer’s creativity can flourish without the need for understanding the idiosyncracies of building widgets and GUI components (focusing on the design of the model and the basics of the image composition).
The tester library provides the support for testing Java programs by a novice Java programmer: the sample data for the program and the tests for the methods are defined in the class Examples that acts as a client to the novice programmer’s code.
The javalib world libraries provide the support for the design of interactive graphics based games (with an option to add musical background and sound effects). The programmer designs the behavior and interactions among the game objects and creates the game scene display by combining geometric shapes and images.
The curriculum materials that support this style of teaching consist of laboratory guides with supporting code and the solutions available to the instructors, lecture notes on the key topics (again with complete code that illustrates the concepts presented in the lecture) and a collection of programing assignments (again with the solutions available to the interested instructors).
Over the past several years we have presented this work in summer faculty development workshops and various workshops and tutorials at a number of conferences.