CS 2135: Programming Language Concepts (A03)

General Information

Materials and Notes

Policies and Procedures


A language that doesn't affect the way you think about programming is not worth knowing
Alan Perlis
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
The Revised5 Report on the
Algorithmic Language Scheme
Civilization advances by extending the number of important operations which we can perform without thinking of them.
—Alfred North Whitehead

Course Description and Objectives

Programming languages are one of the most important, yet generally overlooked, technologies in software engineering. Their impact extends far beyond the consideration of what language to program in because most well-designed software systems contain several programmer-designed languages. This course teaches students how to identify and create languages when designing software systems. In particular, the course will address the following questions:

By the end of the course, students are expected to develop skills in identifying, modeling and implementing simple languages, in understanding certain concepts that distinguish programming languages, and in functional programming. On a more general level, students are expected to strengthen their skills at approaching open-ended programming and software-development problems.

Recommended Background

The course will assume that you already have experience with and are comfortable programming in some higher-level language (such as C++ or Java). The course does not assume experience with functional programming. You should, however, already have written programs with conditionals (ifs), structures (records), lists, and trees; CS2005 should provide adequate preparation. Students lacking this background should speak to the instructor before attempting the course.

This page maintained by Kathi Fisler
Department of Computer Science Worcester Polytechnic Institute