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: M 10:30-11:45, 2:30-3:30 and W 2:30-4:00
Lectures: TR 9:55-11:10 in SSL 030B.

TAs:TA hours will be in the Unix lab
Sunday: Miranda 7-10; Gary 7-9; Jose 9-11
Monday: Jose 7-11; Gary 8-11
Tuesday: Jose 8-10
Thursday: Miranda 8-10; Jose 9-10

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 replaced C++ as the hot language, and why new languages are now taking its place.