Syllabus
CS 345H is an honors undergraduate course on programming languages. As an honors course, it's aimed at an advanced level and will cover material usually seen in graduate-level programming languages courses.
CS 345H is also cross-listed as CS 386L, a graduate programming languages course, with only one difference between the courses (see the grading schemes).
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.
Logistics
Instructor: James Bornholt
Teaching Assistants: Ronak Ramachandran, Maxine Xin
Lectures: Tuesday and Thursday, 12:30pm—2:00pm, JGB 2.216
Office Hours:
- James: Tuesday, 2pm–3pm, GDC 5.720
- Ronak: Thursday, 4pm–5pm, GDC 6.816
- Maxine: Monday, 2pm–3pm, GDC 5.816
Contact: We're using Ed Discussion for course announcements, questions, etc. To contact the course staff, create a private thread on Ed.
Prerequisites
CS 345H: CS 429 or CS 429H, with a grade of C- or better. Registration is open only to honors computer science majors. If you need to petition this course, please contact me, but note that I generally only approve petitions from students actively involved in research related to the course.
CS 386L: no formal prerequisites, but we will assume familiarity with discrete mathematics (CS 311H or equivalent) and computer organization (CS 429H or equivalent). Students who completed CS 345H in Fall 2022 cannot register for CS 386L.
Course Materials
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. The structure of our course is loosely based on this book, so it should be a good reference.
- Formal Reasoning About Programs is another introduction to reasoning about programs using Coq. It's much more terse and centered on Coq details than Software Foundations, so expect it to be a challenging read, but it can be an additional reference for some of the material we'll cover.
- Programming Languages: Application and Interpretation introduces the essence of programming language semantics through a typed version of Racket. This is a very different (but helpful!) lens on the material we'll see this semester.
If you really want to buy something, I like Types and Programming Languages as a canonical programming languages textbook, but it's not necessary and we won't reference it. It's also available for free as an ebook through the UT Libraries.
Content
Grading
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.
Grades are tracked on Canvas.
Homework
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.
Homeworks are always due on Thursdays at 6:00pm CT (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 trip you up or quiz you on the details of lectures.
Final exam
There will be a take-home exam during the final exam period. It will be available at 10:00am CT on Thursday May 2 and due at 6:00pm CT on Saturday May 4. As with the homework, the final exam will be submitted via GitHub Classroom. You should expect the final exam to be both shorter and more "within the lines" than the homework, sticking to topics we've covered in lecture.
You may use any online or written references you wish to complete the exam (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.
Paper readings
Towards the end of the semester we will read and discuss two research papers related to programming languages. 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.
Course project
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 redeemable option as license to flake out on a group project. In 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 project grades to members of the same group.
Course Policies
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 flexible and pragmatic. If you find yourself needing some kind of accommodation, please let the instructor know as soon as possible and we'll work something out.
Due Dates
There are no late days for any submissions in this course. Late submissions within 24 hours of the deadline will have a 50% penalty applied. Submissions outside this window will not be graded unless you have made prior arrangements with the instructor.
That said, we are flexible about deadline extensions if you give advance notice, including for religious holidays, paper deadlines, conference travel, or illness. 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.
If you need flexibility for the final exam, contact the instructor as soon as possible. Note that the exam is take-home, so you don't need to be in Austin to complete it.
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.
Academic Integrity
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 (for example, in a code comment) and make very clear which parts are your own work. This includes using automated tools that generate code or text.
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 with others 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 you submit it. There is no penalty for asking, but the penalty for plagiarism (even if accidental) is academic disciplinary action, including automatic failure of the course.
Disability & Access
The university is committed to creating an accessible and inclusive learning environment consistent with university policy and federal and state law. Please let me 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 Disability and Access (D&A). If you are already registered with D&A, please deliver your Accommodation Letter to me as early as possible in the semester so we can discuss your approved accommodations and needs in this course.
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 permission of the instructor.
Acknowledgments
I have borrowed parts of this syllabus from Emina Torlak and Adrian Sampson—thanks! This course also borrows heavily from the wonderful CSE 505 course at the University of Washington, with thanks to Dan Grossman, Zach Tatlock, and James Wilcox.