Introduction to the Elements of Programming Languages: Different Types of Programming Languages -Modeling Programming Languages, Computability versus Complexity,Computer Science for Computation.
Introduction to LISP and Scheme - Building Abstractions with Procedures - The Elements of Programming Procedures and the Process they Generate – Formulating Abstractions with Higher-Order Procedures.
Building Abstractions with Data: Introduction to Data Abstraction- Hierarchical Data and the Closure Property – Symbolic Data – Multiple Representations for Abstract Data – Systems with Generic Operations.
Modularity, Objects, and State: Assignment and Local state – The Environment Model of Evaluation – Modeling with Mutable Data – Concurrency- Streams.
Metalinguistic Abstraction: The Metacircular Evaluator – Lazy Evaluation - Variation on a Scheme- Nondeterministic Computing – Logic Programming – Introduction to PROLOG.