# CS 421 — Programming Languages

CS 421 is an upper level undergraduate course / lower level graduate course in programming languages, and I consider it my flagship'' course. It has four major components: functional programming, parsing, mathematical foundations, and pragmatics. This class is important to me because it is one of very few courses at our institution where students learn functional programming. My approach to the class is to spend the first third teaching them a functional programming language, and then show them how to write interpreters for several languages with it. I tell them that before the class they were consumers of programming languages, but afterwards they can be producers if the want to.

I use the Haskell as the implementation language, for a few reasons. First, it was developed by the programming language community to experiment with language implementation. Second, the combination of features like type inference, lazy evaluation, and type classes make Haskell code amazingly concise and elegant. Third, Haskell makes heavy use of monads, which have been described as one of the most important programming language constructs to be developed in 20 years. Students are not likely to use Haskell in the work-force, but features of Haskell end up influencing other languages. Students often email me years later to tell me how they are making use of what they learned in this course.

One of my goals is to show my students how learning new programming languages, especially new programming language paradigms, has similar effects as learning new human languages. It creates a realization of ways of thinking about programming that would be difficult or impossible to imagine otherwise.

A recent homepage is here.