
20002001 An introduction to the fundamental concepts of computer science Computer Science Department 
Course Description
This course will focus on the fundamental underpinnings of computer science. Topics will include abstract models of computation, the limits of computation, analysis of algorithms, formal languages, automata theory, graph theory, logic, combinatorics, numeric and symbolic computation, and program translation and semantics. Practical examples will be drawn from diverse areas such as computational geometry, numerical analysis, computational logic, and compiler design. Course work will be both theoretical and practical, with assignments involving both proofs and programs. Students will learn to program in languages such as Lisp, Prolog, and Java. 
Recommended Background
Students should have taken a course in calculus, acquired an indepth knowledge of at least one programming language, preferably C++, Java, or Lisp, and have some familiarity with data structures and basic set theory. 
General Course Information
Class will be held from 9:00 to 10:30 on Tuesdays and 8:30 to 10:00 on Thursdays
in room 74 of the Jorgensen building.
For the syllabus, see the pages associated with each of the three terms
(click on the ABC icons below or at the top of this page, or on any
of the subpages in this site).
These are the books for the course, although neither is required. The material for the course will come mainly from the lectures and notes that are prepared for you. However, you may find the following books to be useful occasionally, particularly during cs20a and part of cs20b.

Last modified Thursday, 04Jan2001 08:22:12 PST by
cs20@cs.caltech.edu