EFNet #compsci Resource Page

Editor: Albert Y. C. Lai, trebla [at] vex [dot] net

You may send suggestions for more entries to the editor.

Cute Problems

Please follow this link.

Introductory Material

General

Jan L. A. van de Snepscheut. What Computing is All About. Text and Monographs in Computer Science. Springer-Verlag, 1993.

Logic

Tree Proof Generator.

Mathematics

Ronald L. Graham, Donald E. Knuth, and Oren Patashnik. Concrete Mathematics: A Foundation for Computer Science, second edition. Addison-Wesley, 1994.

David Gries and Fred B. Schneider. A Logical Approach to Discrete Math. Text and Monographs in Computer Science. Springer-Verlag, 1993.

Algorithms and Their Complexities

Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction to Algorithms. The MIT Press, 1990 (first edition), 2001 (second edition).

Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology.

Programming Languages

This resource page is intended to be relatively independent of particular programming languages -- it is about computer science afterall. There are excellent source of materials about particular programming languages: Lambda the Ultimate and Collection of programming language home pages. We do not wish to duplicate the effort.

(Some of the entries below seem to refer to particular languages. That is a coincidence. They are listed for their scientific content, not for their choices of languages as vehicles.)

Lambda Calculus

György E. Révész. Lambda-Calculus, Combinators, and Functional Programming. Cambridge Tracts in Theoretical Computer Science, number 4. Cambridge University Press, 1988.

Also a Google search for “lambda calculus tutorial” turns up many nice tutorials and motivations.

Functional Programming

Harold Abelson and Gerald Jay Sussman with Julie Sussman. Structure and Interpretation of Computer Programs, second edition. The MIT Press, 1996.

Krysia Broda, Susan Eisenbach, Hessam Khoshnevisan, and Steven Vickers. Reasoned Programming. International Series in Computer Science. Prentice Hall, 1994.

Paul Hudak. The Haskell School of Expression: Learning Functional Programming through Multimedia. Cambridge University Press, 2000.

Simon Thompson. Haskell: The Craft of Functional Programming, second Edition. Addison-Wesley, 1999.

Richard Bird. Introduction to Functional Programming using Haskell, second edition. Prentice Hall, 1988.

An Erlang Course. Ericsson Utvecklings AB.

Imperative Programming

O.-J. Dahl, E. W. Dijkstra, and C. A. R. Hoare. Structured Programming. Academic Press, 1972.

David Gries. The Science of Programming. Text and Monographs in Computer Science. Springer-Verlag, 1981.

Krysia Broda, Susan Eisenbach, Hessam Khoshnevisan, and Steven Vickers. Reasoned Programming. International Series in Computer Science. Prentice Hall, 1994.

Eric C. R. Hehner. A Practical Theory of Programming. Updated several times a year.

Object-Oriented Programming

Peter Coad and Jill Nicola. Object-Oriented Programming. Prentice Hall, 1993.

Software Engineering

Donald Erwin Knuth. Literate Programming. CSLI Lecture Notes, number 27. Center for the Study of Language and Information, 1992.

Hans van Vliet. Software Engineering: Principles and Practice, second edition. John Wiley & Sons, 2000.

Advanced and Specialized Material

Algorithms and Their Complexities

Donald E. Knuth. The Art of Computer Programming, three volumes. Addison-Wesley, 1997 (volume 1, third edition), 1997 (volume 2, third edition), 1998 (volume 3, second edition).

Alan Gibbons. Algorithmic Graph Theory. Cambridge University Press, 1985.

Programming Language Theory

See also programming language theory texts online.

Lambda Calculus

Henk Barendregt and Erik Barendsen. Introduction to Lambda Calculus. 1994.

Gérard Huet. Constructive Computation Theory. 2002. Also tarball of both this article and program code.

Morten Heine B. Sørensen and Pawel Urzyczyn. Lectures on the Curry-Howard Isomorphism. 1998.

Functional Programming

Richard Bird and Oege de Moor. Algebra of Programming. International Series in Computer Science. Prentice Hall, 1997.

Chris Okasaki. Purely Functional Data Structures. Cambridge University Press, 1999.

Simon Thompson. Type Theory and Functional Programming. Addison-Wesley, 1991.

Imperative Programming

Ralph-Johan Back and Joakim von Wright. Refinement Calculus: A Systematic Introduction. Graduate Texts in Computer Science. Springer-Verlag, 1998.

Edsger W. Dijkstra and Carel S. Scholten. Predicate Calculus and Program Semantics. Texts and Monographs in Computer Science. Springer-Verlag, 1990.

Object-Oriented Programming

Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.

Software Engineering

Mary Shaw and David Garlan. Software Architectures: Perspectives on an Emerging Discipline. Prentice Hall, 1996.

Michael Jackson. Problem Frames: Analyzing and Structuring Software Development Problems. Addison-Wesley, 2000.

Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison-Wesley, 2003.

Artificial Intelligence

Stuart J. Russell and Peter Norvig. Artificial Intelligence: A Modern Approach. Prentice Hall, 1995.

Logics; Theorem Proving

Paul Taylor. Practical Foundations of Mathematics. Cambridge Studies in Advanced Mathematics, number 59. Cambridge University Press, 1999.

Jean Gallier. Logic for Computer Science: Foundations of Automatic Theorem Proving. Wiley, 1986.

Compilers

Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools. Addison-Wesley, 1985.

Andrew W. Appel. Modern Compiler Implementation in Java. Cambridge University Press, 1998.

Andrew W. Appel. Modern Compiler Implementation in ML. Cambridge University Press, 1998.

Andrew W. Appel, with Maia Ginsburg. Modern Compiler Implementation in C. Cambridge University Press, 1998.

Simon Peyton Jones and David Lester. Implementing Functional Languages. Prentice Hall, 1992.

Computer Architecture

John L. Hennessy and David A. Patterson. Computer Architecture: A Quantitative Approach, second edition. Morgan Kaufmann, 1996.