Principles of Programming Languages

Don't worry. We will only cover a small subset of this.
Don't worry. We will only cover a small subset of this.

Programming Languages are the duct tape, bricks, mortar and steel of the information age. Over the last thirty years, a variety of languages with diverse features have been developed, expressing different perspectives of the idea of computation. CS 314 is an introduction to these different perspectives, the fundamental concepts of languages, and how modern language techniques and idioms can be used to engineer software systems.

The aim of the course is to teach you about the different paradigms of programming, their underlying concepts, and the relationships between them. We will look at functional, imperative and logic programming. We will study functional paradigm through OCaml, imperative paradigm through python and logic paradigm through Prolog (specifically SWI-Prolog).

If time permits, we will also look at mordern programming language implementation techniques, such as decision procedures, program synthesis, and program verification.

Essential Details

Section Name Recitation Time Office Hours Zoom
5 Qi Dong Tue 5:15p - 6:10 Wed 3p-4 Zoom
6 Chun Leung Lau Tue 9:30a - 10:25 Fri 2p-3 Zoom
7 Guo Chen Mon 10:35a - 11:30 Mon 9a-10 Zoom


Grading (subject to change)

Item Due Weight (%)
Assignment 1 (OCaml) 02/18 5.0
Assignment 2 (OCaml) 03/03 7.0
Assignment 3 (OCaml) 03/28 8.0
Assignment 4 (Prolog) 04/19 15.0
Assignment 5 (Python) 04/28 6.0
Written Assignment 1 04/07 8.0
Written Assignment 2   8.0
Final Project 05/12 35.0
Best coding assignment   8.0