The books we use in the course are:
Graham Hutton: Programming in Haskell, Cambridge University Press.
Cay Horstmann: Big Java, 2nd Edition, Wiley
The Haskell book is required. The Java book, however, is regarded as more of reference material—other recent books about Java are suitable as well. Not all of the books will be covered, and other material is used as well.
The course aims to deepen understanding on the concepts and features of programming languages, and how programming languages work. After a general overview of language processing, we study the features of Haskell, focusing on what constitutes a functional programming language. Non-exhaustive list of what follows is:
Along the way, we cover the basic ingredients of a programming language implementation, including:
We use Haskell to implement a small imperative programming language as course assignments.
The Java portion of the class focuses on the major features of a modern object-oriented programming language, and focuses on interesting language features and the language infrastructure of Java, including:
Programming languages are a very large area. Even though we use two specific programming languages, learning Haskell and more of Java should be considered as a nice side benefit—the course aims at providing an understanding of the use, efficiency considerations, and implementation approaches of common abstraction mechanisms and language constructs in modern programming languages. I hope that the course will allow you to more effectively use the languages of today, make it easier for you to learn new programming languages in the future, and possibly get excited about contributing to research and development in the area of programming languages in the future.