Programming languages are arguably a software developer's most important tools. Different languages embody different ways of viewing problems and computation in general. Understanding what languages can do helps programmers choose and use languages effectively. Understanding how languages work helps programmers devise their own linguistic tools for specialized applications.
This course exposes students to some different styles of programming and goes "under the hood" to see how various styles and language features are implemented. We will program in a couple of languages with different perspectives on computation, then implement their salient features. We will implement garbage collectors and a type system to explore how these features really work. By the end of the course, students will have a greater appreciation for the range of programming models available and their tradeoffs.
The course assumes that students have non-trivial programming experience (equivalent to that from a programming-based 3000-level course, such as software engineering or operating systems). The assignments will be programming intensive. Experience in a particular language is not required, though prior experience in a functional language (such as Scheme) will be useful.
Contact Professor Fisler with any questions.
The course is designed towards the following outcomes:
These support CS Department Outcomes 1 and 6.