Lectures discuss general concepts of programming languages and design choices available to programmers, in terms of algorithmic design, what language features can be employed to solve a particular problem, and what languages are most appropriate for particular application domains. Discussion sections fill in the details of the different languages used by the student and describe system tools that can be used to aid with the projects. Projects are graded based on the design and performance, including documentation. Examination questions are based on design methods discussed in lecture and from the projects. Students study a variety of different programming languages, and learn their relative strengths and weaknesses.
Students gain experience designing and writing programs in a selected set of languages.