|
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:
- MW 1:30-2:20, Computer Science Building 102
- 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:
- C Programming: A Modern Approach, K. N. King, Norton & Co. 1996.
The book covers the C programming language. It is required.
- The Practice of Programming, Brian W. Kernighan and Rob Pike,
Addison-Wesley 1999. The book covers program and programming style. It is
required.
- 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.
-
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.
- 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.
- 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.
- Artificial Intelligence, Elaine Rich, McGraw-Hill 1990. The book
contains a chapter that is pertinent to one of the assignments. It is not
required.
- 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.
- 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.
- 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:
- IA32 Intel Architecture
Software Developer's Manual, Volume 1: Basic Architecture
- IA32 Intel Architecture
Software Developer's Manual, Volume 2: Instruction Set Reference Manual
- IA32 Intel Architecture
Software Developer's Manual, Volume 3: System Programming Guide
- Tool Interface Standard (TIS)
Executable and Linking Format (ELF) Specification
- 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.