Good design is fundamental to developing good programs, yet many people learn to program without paying much attention to design issues. In part, this is because many perceive design as necessary only for larger programs. In reality, design plays a role in developing even the smallest programs. In addition, as programs grow more complex, their designs also include designs of domain-specific languages used to simplify writing and maintaining the programs. Understanding the interplay between program design and the design of small programming languages helps programmers develop well-engineered programs.
This course covers program design and language design for program development. It is designed for students who already have non-trivial programming experience including topics such as functions, recursion, lists, and ideally trees. The course doesn't assume any particular prior language, but languages like C++ or Java will be most common. Students whose prior programming is limited to scripting languages or Visual Basic should talk to the professor before attempting the course. All course programming will be in the functional language Scheme, thus giving students exposure to a different style of programming along with fundamentals of program and language design.
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.
Materials and Notes
Policies and Procedures
This page maintained by Kathi Fisler
Department of Computer Science Worcester Polytechnic Institute