CS 345H: Programming Languages (Honors) Fall 2022

Syllabus

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.

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: Sam Laberge, Sammy Thomas

Lectures: Tuesday and Thursday, 9:30am–10:45am, UTC 3.122

Office Hours:

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.

CS 386L: no formal prerequisites, but we will assume familiarity with discrete mathematics (CS 311H or equivalent) and computer organization (CS 429H or equivalent).

Course Materials

There are no required textbooks for this course. Some great programming languages textbooks are available for free online:

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:

For CS 386L, final grades will be computed as follows:

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 6:00pm CT on Thursday December 8 and due at 6:00pm CT on Saturday December 10. As with the homework, the final exam will be submitted via GitHub Classroom. Unlike the homework, you should expect the final exam to be much more "within the lines", sticking to topics we've covered in lecture.

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.

Paper readings

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.

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 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 project grades to members of the same group. You cannot opt into the course project after the due date for project proposals has passed.

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 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.

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.

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 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 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 Disability & Access (D&A). If you are already registered with D&A, please deliver your Accommodation Letter to the instructor as early as possible in the semester so we can discuss your 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 permission of the instructor.

Acknowledgments

I have borrowed parts of this syllabus from Emina Torlak and Adrian Sampson—thanks!