Organization

The course consists of lectures, written homeworks, and programming labs. 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, C++, and Rust) 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 and of itself.

Grading

  • 5% Participation in class and online
  • 35% Homeworks and programming labs
  • 25% 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 labs

We will have written homework assignments and programming labs. Both are meant to both reinforce your knowledge of the concepts covered in lecture and get you to think about PL in more depth, beyond what is covered 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. Homeworks will be released Wednesdays and will be due the following Friday night (10 days). If you turn it in early -- the following Tuesday (7 days) -- you will receive an additional 10% of your grade. There are no late days.

You are expected to work on the programming labs by yourself. You may discuss the assignments with students from the course, in general, but not any specific solution. Programming assignments will be released Fridays and will be due 2 weeks later on Friday night. There are no late days.

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.

We will have a 5 written homeworks and 5 programming labs. They equally count towards 35% of your grade.

Tentative release dates for assignments

All assignments and solutions will be posted on Piazza. All are to be turned in via gradescope. We will be releasing them on the following dates:

  • Written homeworks: Jan 17, Jan 24, Jan 31, Feb 14, Feb 20
  • Programming labs: Jan 12, Jan 26, Feb 09, Feb 23, Mar 09

Exams

The midterm exam will be held on February 6th, 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 20th in CENTR 115 (the same room as lecture) from 7:00PM-9:59PM. 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 60% 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.