CSCI 334

Principles of Programming Languages

Home | Lectures | Handouts | Reading | Links

Home

Instructor:Prof. Stephen Freund
Email: freund@cs.williams.edu
Phone: x4260
Office: TPL 302
Office Hours: MW 2:30 -- 4
Lectures: TR 9:55-11:10 in TCL 206

TAs:Catalin Iordan and Ben Wood
Office Hours: Sunday 7-11, Monday 8-11, Thursday 7-9 (all in the Unix lab)

Course Description

A programming language is a programmer's principle interface with the computer. As such, the choice of an appropriate language can make a large difference in a programmer's productivity. A major goal of this course is to present a comprehensive introduction to the principal features and overall design of both traditional and modern programming languages. You will examine language features both in isolation and in the context of more complete language descriptions.

At the end of this course you will have a more thorough understanding of why certain programming language features provide better support for the production of reliable programs, while others are fraught with ambiguity or other problems. Since programming languages mediate between the programmer and the raw machine, we will also gain a deeper understanding of how programming languages are compiled, what actually happens when a program is executed on a computer, and how the programming language design affects these issues. As an example, by the end of the course, you should be able to understand why Java has replaced C++ as the hot language, and why GJ represents the next step forward for Java.