Keith J. O'Hara


CMSC 305

Design of Programming Languages (F2020)

overview | logistics | schedule | assignments | presentations | resources

This course will cover a selection of issues important to the design of programming languages including, but not limited to, type systems, procedure activation, parameter passing, data encapsulation, dynamic memory allocation, and concurrency. In addition, the functional, logic, and object-oriented programming paradigms will be presented as well as a brief history of high-level programming languages.

Learning new programming languages is a critical skill for computing practitioners; including everything from the latest frameworks to fresh idioms to novel languages to completely new paradigms. This course will equip you with the history, knowledge and techniques to make this learning and adaptation process effective, efficient and enjoyable. You will present three programming languages to the class. In a short oral presentations, you will report on the most important feature of the language along with an executable example (for example using & Rosetta Code), and draw at least one comparison with a previously presented language. You will also implement a LISP—one of the oldest and newest programming languages—in one of those three languages.