My Literature Recommendations

The following is my opinion of the best published books and papers in various areas of computing.

The literature recommendations are organized by the ACM Computing Reviews Classification System (see a January issue of Computing Reviews for details).


Table of Contents

Although there are place-holders here for all of the top-level areas in the ACM Computing Reviews Classification System, the focus in is the areas D.1, D.3, and F.3. If you're new to programming languages, you might start in area D.3, perhaps in D.3.3.

A. General Literature

Undergraduate
See Gary T. Leavens, ``Aiding Self-motivation with Readings in Introductory Computing,'' Department of Computer Science, Iowa State University, TR #94-08, May 1994.

B. Hardware


C. Computer Systems Organization


D. Software

D.0 General

D.1 Programming Techniques

D.1.0 General

D.1.1 Applicative (Functional) Programming

Undergraduate
Backus's Turing award lecture sparked much of the research in functional programming.
Graduate

D.1.2 Automatic Programming

D.1.3 Concurrent Programming

Graduate

D.1.4 Sequential Programming

D.1.5 Object-Oriented Programming

Undergraduate
The following are good introductions to OOP.
Graduate
The following introductions are suitable for graduate students.

D.1.6 Logic Programming

Undergraduate

D.1.7 Visual Programming

D.1.m Miscellaneous

D.2 Software Engineering

D.2.0 General

D.2.1 Requirements/Specifications

Undergraduate
Graduate
Advanced Graduate/Researcher
The last is a recent survey.

D.2.2 Tools and Techniques

D.2.3 Coding

D.2.4 Program Verification

The following are about program verification from the software engineering point of view. For a view towards using verification techniques for programming language semantics, see underF.3.2 Algebraic approaches to semantics about predicate transformer semantics.
Undergraduate
The following are good introductions.
Graduate
Advanced Graduate/Researcher

D.2.5 Testing and Debugging

D.2.6 Programming Environments

D.2.10 Design

D.2.m Miscellaneous

D.3 Programming Languages

D.3.0 General

D.3.1 Formal Definitions and Theory

Semantics
Undergraduate
The following books treat the semantics of several different languages.
Graduate
The following are modern book-length introductions.
Advanced Graduate/Researcher
The following uses category theory and is mathematically sophisticated.
Syntax

D.3.2 Language Classifications

Applicative Languages
Underraduate
Graduate
Concurrent, distributed, and parallel languages
Graduate
Data-flow languages
Design languages
Extensible languages
Macro and Assembly languages
Microprogramming languages
Nondeterministic languages
Nonprocedural languages
Object-oriented languages
Undergraduate
Graduate
Specialized application languages
Very high-level languages

D.3.3 Language Constructs and Features

Undergraduate
The following are good general references in this area.
Graduate
The following are collections of good original papers.
Abstract data types
Undergraduate
The following gets the idea of data abstraction across clearly.
Concurrent programming structures
Graduate
Control structures
Undergraduate
Coroutines
Data types and structures
Dynamic storage Management
Inupt/Output
Modules, packages
Procedures, functions, and subroutines
Recursion
Undergraduate

D.3.4 Processors

D.3.m Miscellaneous

D.4 Operating Systems

D.4.m Miscellaneous


E. Data


F. Theory of Computation

F.0 General

F.1 Computation By Abstract Devices

F.2 Analysis of Algorithms and Problem Complexity

F.3 Logics and Meanings of Programs

F.3.0 General

F.3.1 Specifying and Verifying and Reasoning about Programs

F.3.2 Semantics of Programming Languages

Algebraic approaches to semantics

There are really two different approaches to semantics that fall in this category: techniques using classical techniques of algebra, and those using predicate transformers.

A good paper on the algebraic approach is the following.

Graduate

My recommendations for literature on predicate transformer semantics are the following.

Graduate
Advanced Graduate/Researcher
Denotational semantics
Undergraduate
Graduate
The following are modern book-length introductions, although somewhat dated by now.
Advanced Graduate/Researcher
The articles are good references for the researcher.
Operational semantics
Undergraduate
An excellent introduction to structural operational semantics is the following book.
Graduate
Advanced Graduate/Researcher
Landin's SECD machine is defined in his paper below.

F.3.3 Studies of Program Constructs

Control primitives
Functional constructs
Program and recursion schemes
Type structure
Undergraduate
The following are some good introductions to type systems, although perhaps more appropriate at the graduate level.
Graduate
Advanced Graduate/Researcher

F.3.m Miscellaneous

F.4 Mathematical Logic and Formal Languages

General

Mathematical Logic

Computability Theory
Computational Logic
Lambda calculus and related systems
Advanced Graduate/Researcher
The following is an encyclopedic reference.
Logic programming
Mechanical theorem proving
Model theory
Graduate
Proof theory
Recursive function theory

Grammars and Other Rewriting Systems

Formal Languages

Miscellaneous

F.m Miscellaneous


G. Mathematics of Computing

G.0 General

G.1 Numerical Analysis

G.2 Discrete Mathematics

G.2.0 General

Category theory figures prominently in much work on semantics at advanced levels.

Graduate
The following are good texts for learning category theory.
Advanced Graduate/Researcher
The MacLane book cited is the category theory ``bible''.

G.m Miscellaneous


H. Information Systems


I. Computing Methodologies


J. Computer Applications


K. Computing Milieux

K.2 History of Computing


Last update $Date: 1997/09/10 21:59:11 $
Gary T. Leavens