Programming Languages: Principles and Paradigms

Course organization and policies

The course consists of lectures, written homeworks, and programming assignments. The goal of the course is to (1) familiarize you with various modern programming language concepts and paradigms and (2) get you to think about and understand the design trade-offs and implementations of different language features. We will use real-world languages (e.g., JavaScript, Haskell, and C++) to explore the different concepts. But, we will not cover any one language in full – this course is not meant to make you a proficient programmer, learning how to proficiently program in any of these languages is a course in of itself.


  • 5% Participation/pre-lecture readings
  • 30% Homework and programming assignments
  • 30% Midterm exam
  • 35% Final exam
Participation/pre-lecture readings

Before each class there will be some assigned reading. You are expected to do the reading and have at least a vague understanding of the concepts that will be discussed in class. This will allow us to spend the lecture time to solidify your understanding. Asking and answering questions in class, on Piazza, or during office hours counts towards your class participation.

Homework and programming assignments

We will have almost weekly assignments, in the form of written homeworks and/or programming assignments. These assignments are meant to both reinforce your knowledge of the concepts covered in lecture and get you to think about PL beyond lecture (e.g., if you were tasked with designing a new language).

You are expected to work on written assignments in groups of 3. All written homework must be typeset and submitted as a PDF using the online submission tool. All written assignments must be submitted as a group.

You are expected to work on the programming assignments by yourself. You may discuss the assignments with students from the course, in general, but not any specific solution.

You have 7 late days that may be used towards homeworks and assignments. See the intro slides for more information.

If you consult anything (books, academic papers, internet resources, people not in your group) when working on the assignments, note this in your submission. We encourage outside learning but expect you to not seek out specific details about a solution – anything submitted should be considered your own work. Similarly, you are expected to not publish or otherwise share your solutions at any point (even after the class is over).

If you are unsure about what is allowed, please ask the course staff.


The midterm exam will be held on February 22, in class. The midterm is closed-book, but you may use a double-sided cheat sheet (letter-size).

The final exam will be held on March 22 in TBD. You must take the exam at this time and location. The final is closed-book, but you may use 2 double-sided cheat sheets (letter-size).

The exams will make up 65% of your grade. Since the final is cumulative your midterm grade will be calculated as:

midterm > 0 ?  max(final, midterm) : 0

This means that (1) you basically get a second chance if you don’t so well on the midterm and (2) you must show up to both the midterm and the final. If you need to miss either exam because of a documented medical emergency, contact the instructor immediately.

Academic integrity and student conduct

By taking this course, you implicitly agree to abide by the UCSD policies on Integrity of Scholarship and Student Conduct. University rules on integrity of scholarship and code of conduct are taken seriously and will be enforced.