Introduction

The phrase literate programming refers to the creation of computer programs that are meant primarily for human readers. Like ordinary computer programs, literate programs can be transformed, using automated tools, into a form suitable for execution on a computer. However, unlike ordinary programs, their primary focus is a human reader. To that end, all aspects of a literate program, such as the problem definition, motivation, possible solutions, high-level and low-level design, and details of the code, are described in a manner that emphasizes a logical flow of ideas rather than a manner best suited for computer translation. The phrase programming fundamentals refers to the core ideas of computer programming, including the mathematical foundations, historical perspectives, current and future computing frameworks, the essentials of data structures and algorithms, and the analysis of algorithms using mathematical and experimental methods. This course introduces students to the fundamental concepts of computer programming using a literate programming style.

The course material and grading scheme is designed to suit students with widely varying backgrounds, from novices who use computers only tentatively to experts who happily write device drivers before breakfast. Each student will be assigned reading and writing tasks appropriate to her background.

Two additional points are worth emphasizing: First, although the course is designed to be accessible to a wide range of students, it is a bona fide programming course. Students will use a simple, but powerful and unforgiving, programming language to write computer programs that must run correctly and efficiently. The choice of textbooks reflects this goal. A quote from an Amazon.com review of the book by Kernighan and Ritchie is instructive: “Just about every C programmer I respect learned C from this book. Unlike many of the 1,000 page doorstops stuffed with CD-ROMs that have become popular, this volume is concise and powerful (if somewhat dangerous)—like C itself.” Similarly, mathematical rigor will be emphasized in the coverage of analysis of algorithms. The accommodation for varying backgrounds will be made by compromising on quantity but not on quality. Second, although the course is programming course, it is one that emphasizes the literary aspects of computer programs. Students will read computer programs written in both the literate programming and more conventional styles and will examine them carefully from both literary and computing perspectives. Classroom discussions will emphasize proper critical technique, which will be tested using the critiques that are worth a substantial portion of the grade. Similarly, the literate programs written by students will be evaluated not only on their correctness and efficiency, but also on their effectiveness in communicating ideas clearly to a human reader. Such programs are required to go far beyond the routine of commented code (even well-commented code). They must present the program in a compelling and engaging manner with the human reader as the primary concern. The term paper will require students to provide a cogent analysis of one or more topics related to the course.