Indiana University, Oberlin College, NSF, McGraw-Hill Sponsored

Summer '96 Scheme Workshops

In computer science education it is especially important that a programming language be simple and powerful. Simple -- so the mechanics of programming is not overly distracting, allowing students to experience the true joys and challenges of programming, from the very start. Powerful -- so students learn from the outset to use the best tools for mastering complex problems. The programming language Scheme is rapidly growing in popularity because it offers a unique combination of simplicity and power. More than 200 institutions are now using Scheme, from a number of high schools to most of the best known research universities.

Before adopting Scheme, an instructor should feel comfortable with the language and have a feel for the new instructional possibilities that Scheme enables. To this end Indiana University and Oberlin offered in the Summer of 1996 five workshops of one week each, which could be taken individually or in succession.

Introducing Scheme: June 10 - 14

An introduction to Scheme with special attention paid to the use of Scheme in introductory programming courses. Functional programming is introduced first, with emphasis on recursion. Covers selected material from chapters 1-6 of {\em Scheme and the Art of Programming,} by Springer and Friedman.

Intermediate Topics in Scheme: June 17 - 21

The use of procedures as first-class objects. Conceptual differences between the functional and imperative programming paradigms are highlighted when assignment is introduced. Graphics problems are provided for visual interest. Infinite lists (streams) and a Scheme extension for object-oriented programming, inspired by C++, are introduced. Covers selected material from chapters 7-15 of the above text.

Advanced Topics in Scheme: June 24 - 28

The Oberlin College approach to teaching sophmore-level topics using Scheme. Introduces lab materials that effectively acquaint students with such topics as hash tables, trees and balancing, object-concepts, combinatorics, streams, lazy languages, heaps, coding and encryption, priority queues, greedy algorithms, pattern-matching. Important language concepts include tail-recursion, continuations, coroutines, parameter-passing, and implementation issues.

Using Scheme to Understand Programming Languages: July 1 - 5

A unique approach to the study of programming languages is introduced. Using Scheme as an executable meta-language enables a unified approach to teaching programming languages that spans the range from abstract semantics to implementation techniques. Covers selected material from {\em Essentials of Programming Languages,\/} by Friedman, Wand, and Haynes.

Compiling Scheme: July 8 - 12

An approach to teaching a compilers course using Scheme will be presented using recently developed materials. Students develop a native-code compiler for the core of Scheme using source-to-source transformations.

Chris Haynes /