Rationale

As a future professional computer scientist, you should be comfortable with all programming languages even those that haven't been invented yet. The way to do this is to understand the principles of programming languages. It helps to realize that programming languages are just notations to express computations, and that the abstract notion of computation can be concisely described using a few primitives. Commercial programming languages just add lots of bells and whistles that are convenient (and essential from a software engineering point of view) but not fundamental from a computational of view.

Distribution

Your grade will be computed as follows: