CS 345H is an honors undergraduate course on programming languages. As an honors course, it's aimed at an advanced level and will be on par with a graduate-level course (indeed, CS 345H is cross-listed with CS 386L, our graduate programming languages course).
Our goal is to understand the essence of programming languages: what programs mean (their semantics), and what properties they enjoy. We'll do so through a theoretical lens—this will be a proof-heavy class. But these proofs won't (usually) be written on paper; instead, we will write proofs in an interactive theorem prover—a programming language designed for writing formal proofs. Writing these mechanical proofs will help us ensure our understanding is clear, precise, and correct.
CS 345H: CS 429 or CS 429H, with a grade of C- or better. Registration is open only to honors computer science majors.
CS 386L: no formal prerequisites, but we will assume familiarity with discrete mathematics (CS 311H or equivalent) and computer organization (CS 429H or equivalent).
There are no required textbooks for this course. Some great programming languages textbooks are available for free online:
- Software Foundations is a rigorous introduction to programming language semantics through the lens of the Coq proof assistant.
- Programming Languages: Application and Interpretation introduces the essence of programming language semantics through a typed version of Racket.
If you really want to buy something, I like Types and Programming Languages as a canonical programming languages textbook, but it's not necessary at all and we won't reference it.
For CS 345H, final grades will be computed as follows:
- Homework: 65% (5% for Homework 0, 15% each for Homeworks 1–4)
- Final exam: 30%
- Paper readings: 5%
For CS 386L, final grades will be computed as follows:
- Homework: 40% (4% for Homework 0, 9% each for Homeworks 1–4)
- Final exam: 25%
- Course project: 30%
- Paper readings: 5%
Students registered for CS 345H have the option to complete the course project on a redeemable basis; see the course project section below.
There will be five homeworks: an initial homework 0 to get you familiar with the tools and submission process we'll be using, and then four real homeworks.
Homework is due on Thursdays at 10pm (see the homework page) and are submitted via GitHub Classroom.
This is an advanced course, so you should expect the homework to ask you to do things that we haven't covered during lecture. Be sure to start early and ask questions if you're stumped—the homework is intended to teach you new things, not to get you stuck or trip you up.
There will be a take-home exam during the final exam period. It will be available at 6:00pm on Thursday December 8 and due at 6:00pm on Saturday December 10. As with the homework, the final exam will be submitted via GitHub Classroom.
You may use any online or written references you wish to complete the exam (i.e., it is "open book"), but you must not discuss the questions with, or receive assistance from, anyone other than the course staff. The academic integrity policy applies: all work you submit for the exam must be your own. If you use any resources other than the course materials, you must cite those resources appropriately in your submission.
Towards the end of the semester we will read and discuss two papers related to programming languages research. For each paper, you'll need to submit answers to some questions about the paper, and propose a few discussion questions of your own for the lecture. Submissions will be via Canvas.
Students registered for CS 386L (the graduate-level version of the course) are required to complete a course project. The project is intentionally open-ended and is an opportunity to explore something interesting in the realm of programming languages (broadly construed). The project will involve a project proposal due early in the semester and a final report due before the final exam. See the course project page for more details.
The course project may be completed individually or in groups of up to 3 students. Larger groups should expect to complete commensurately larger projects. As part of the project proposal, we'll determine together whether the scope of your project is appropriate.
Students registered for CS 345H can choose to complete the course project on a redeemable basis. This means we'll compute your final grade with both of the grading scales above, and you will receive whichever grade is higher. In other words, there's no risk involved in choosing to do the course project—although it will still be a lot of work!—so we encourage you to give it a try if you're interested in doing something cool with programming languages. However, please don't interpret this as license to "flake out" on a group project: in exceptional circumstances where group members haven't contributed fairly to a project, we reserve the right to deny you the redeemable option (offering only the grading scale that includes the project) and/or to assign different grades to members of the same group. You cannot opt into the course project after the due date for project proposals has passed.
Your success in this class is important to us. While there are a number of official policies below about how best we can accommodate your needs, we are happy to be flexible within reason, especially with the challenges of COVID-19 in mind. If you find yourself needing accommodation, please let the instructor know as soon as possible.
There are no late days for any submissions in this course. Submissions made after the deadline will not be graded.
That said, we are flexible about excused absences if you give advance notice, including for religious holidays, paper deadlines, and conference travel. Please let the instructor know as soon as possible if you need to submit something late for these or other reasons. Except in significant and unforeseen circumstances, requests for late submissions must be made at least one week before the original deadline.
There is no flexibility available for the final exam schedule.
Respect in Class
You have the right to a learning environment that is respectful and welcoming, that supports your mental and physical wellness, and that facilitates meaningful and equal participation. All communication in this course, both in lecture and online, will be held to a high standard for inclusiveness: it must not target individuals or groups for harassment, and it must not exclude specific groups.
If any communication in this class does not meet these standards, please don't escalate it by responding in kind. Instead, contact the instructor as early as possible. If you don't feel comfortable raising the issue with the instructor—for example, if the instructor is the problem—please contact the department chair.
All material that you submit in this class must be entirely your own work (or that of your group, for group projects). If you use someone else's material, you must cite them properly and make very clear which parts are your own work.
Specifically for homework, you are welcome to discuss homework questions with other students, but anything you submit must have been written entirely by you. Do not show any code or proofs you've written for the homework to other students. If you do discuss homework questions with others, please be careful to ensure your submission is still your own work. A good rule of thumb is to "sleep on it"—take a break between discussing the question and writing your solution.
If you are ever in doubt about whether something you intend to submit violates this policy, please contact the instructor before doing so. There is no penalty for asking, but the penalty for plagiarism (even if accidental) is academic disciplinary action, including failure of the course.
Services for Students with Disabilities
The university is committed to creating an accessible and inclusive learning environment consistent with university policy and federal and state law. Please let the instructor know if you experience any barriers to learning so I can work with you to ensure you have equal opportunity to participate fully in this course. If you are a student with a disability, or think you may have a disability, and need accommodations, please contact Services for Students with Disabilities (SSD). If you are already registered with SSD, please deliver your Accommodation Letter to the instructor as early as possible in the semester so we can discuss your approved accommodations and needs in this course.
Counseling and Mental Health Center
The Counseling and Mental Health Center serves UT's diverse campus community by providing high quality, innovative and culturally informed mental health programs and services that enhance and support students' well-being, academic and life goals. To learn more about your counseling and mental health options, call CMHC at (512) 471-3515.
If you are experiencing a mental health crisis, call the CMHC Crisis Line 24/7 at (512) 471-2255.
Sharing of Course Materials is Prohibited
Materials from this class that are produced by the instructor or by other students may not be shared online or with anyone outside this class without explicit written permission.
I have borrowed parts of this syllabus from Emina Torlak and Adrian Sampson—thanks!