Princeton University
Computer Science Department

Computer Science 217
Introduction to Programming Systems

Andrew W. Appel

Spring 2007


Directory
General Information | Schedule | Assignments | Announcements | Policies


Course Summary

The purpose of this course is to provide the fundamental background necessary to understand, design and implement the components of programming systems. Examples of such components include text editors, assemblers, compilers, loaders, interpreters, and portions of operating systems. The course is divided into three major parts: machine organization and assembly language programming, program design and development, and software tools.


Administrative Information

Lectures: 

MW 10:00-10:50, Computer Science Building 105

Precepts:

  1. MW 1:30-2:20, Computer Science Building 102
  2. TTh 1:30-2:20, Friend Center 111

Professor:

Andrew Appel : Computer Science Building 409 : 609-258-4627 : appel@cs.princeton.edu
Office Hours: send e-mail for appointment, or just stop by (I can often be found in my office).

Preceptor:

Robert Dondero : Computer Science Building 206 : 609-258-2211 : rdondero@cs.princeton.edu
Office Hours: MTWTh 2:30-3:20, or by appointment

Undergraduate Coordinator: 

Donna O'Leary : Computer Science Building 410 : 609-258-1746 : doleary@cs.princeton.edu

Lab Teaching Assistants

Available in the Friend Center 016 and 017 computer labs. A lab teaching assistant schedule provides details.


Prerequisites

COS 126. More specifically, you should have substantial programming experience using some high-level programming language such as Java.  Prior experience with the C programming language is helpful but not essential.


Textbooks and Other Reading

The course uses these textbooks. Note that not all of them are required:

  1. C Programming: A Modern Approach, K. N. King, Norton & Co. 1996. The book covers the C programming language. It is required.
  2. The Practice of Programming, Brian W. Kernighan and Rob Pike, Addison-Wesley 1999. The book covers program and programming style. It is required.
  3. Computer Systems: A Programmer's Perspective, Randal E. Bryant and David R. O'Hallaron, Prentice-Hall 2003. The book describes computer systems from the point of view of a C programmer. In particular, it covers Intel architecture and assembly language, and some additional pertinent topics. Either this book or (4) is required, but this book is preferred.
  4. Programming from the Ground Up, Jonathan Bartlett 2004. The book covers Intel architecture and assembly language. It is freely available through the Web. As noted previously, either this book or (3) is required, but (3) is preferred.
  5. Programming with GNU Software, Michael K. Loukides & Andrew Oram, O'Reilly 1997. The book covers the GNU programming environment. Specifically, it contains one chapter on each of the programming tools that we use throughout the course. It is not required, but is highly recommended.
  6. The C Programming Language (second edition), Brian W. Kernighan and Dennis M. Ritchie, Prentice-Hall 1988. The book covers the C programming language.  It is a reasonable alternative to (1). It is not required.
  7. Artificial Intelligence, Elaine Rich, McGraw-Hill 1990. The book contains a chapter that is pertinent to one of the assignments. It is not required.
  8. Machine Learning, Tom M. Mitchell, McGraw-Hill 1997. The book contains a chapter that is pertinent to one of the assignments. It is not required.
  9. C: A Reference Manual (fifth edition), Samuel P. Harbison & Guy L. Steele, Prentice-Hall 2002. The book is the definitive reference manual on the C programming language. It is not required.
  10. C Interfaces and Implementations, David R. Hanson, Addison-Wesley 1996. The book contains many examples of the abstract data type (ADT) style of programming that we use in the course. It is not required.

Books (1), (2), (3), and (5) are available in the University bookstore. All of the books except (4) are on reserve in the Engineering Library. You may use different editions of the textbooks, but if so then you are responsible for figuring out any changes in section numbers for the readings.

The course uses these manuals, for reference only:

  1. IA32 Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture
  2. IA32 Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual
  3. IA32 Intel Architecture Software Developer's Manual, Volume 3: System Programming Guide
  4. Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification
  5. Using as, the GNU Assembler

All are freely available through the Web.


Academic Regulations

The Policies regarding collaboration and plagiarism are similar to those in COS 126. Please read them.