COMP 211: Principles of Program Design

Spring 2011 schedule:

  1. Lectures: MWF 10:00am - 10:50am, Duncan Hall 1075

  2. Lab: Tu 10:50am - 12:05pm, Ryon Lab 102

Instructors: Prof. Robert “Corky” Cartwright, Dr. Stephen Wong

Teaching Assistants:

  1. Graduate students: Alina Sbîrlea, Kamal Sharma

  2. Undergraduate students: Nicholas Coltharp

Course Summary:

This course is an introduction to the fundamental principles of programming. The focus is on systematic methods for developing robust solutions to computational problems. Students are expected to have experience writing interesting programs in some credible programming language (e.g., Python, Java, Scheme, C#, C++, Visual Basic .NET, PRL, Lisp, Mathematica, Matlab, etc.) but no specific programming expertise is assumed. The course is targeted at potential Computer Science majors but mathematically sophisticated non-majors are welcome. We expect students to be comfortable with high-school mathematics (primarily algebra, mathematical proofs, and induction) and the mathematical rigor and vocabulary of freshman calculus. Success in the course requires a deep interest in the foundations of computer science and software engineering, self-discipline, and a willingness to work with other people on programming projects. Topics covered include functional programming, algebraic data definitions, design recipes for writing functions, procedural abstraction, reduction rules, program refactoring and optimization, object-oriented programming emphasizing dynamic dispatch, OO design patterns, fundamental data structures and algorithms from an OO perspective, simple Grapical User Interfaces (GUIs), and an exposure to the challenges of concurrent computation. Students will learn the practical skills required to write, test, maintain, and modify programs. Labs and assignments use the Scheme and Java programming languages.

The aim of the course is for you to gain both theoretical and practical knowledge of the principles of programming design.  Accordingly, the weighting for course work will be equally balanced between programming projects and written assignments & exams.  For further information on the course, please contact Corky Cartwright or Stephen Wong.

Additional details on the course including lecture schedule, homeworks, exams, and grading can be found in the course wiki.