CS374: Principles of Programming Languages

[ Course Info | Course Objectives and Goals | Resources | Instructors | Textbooks | Schedule | Grading | Course Policies | Course Details ]

SBCL screenshot
Abstract syntax tree for Euclidean algorithm
Parser Flow
Welcome to CS374!

Course Info

  • Course Number and Title: CS374 - Principles of Programming Languages
    • Section A
  • Credit Hours: 4 Semester Hours
    • Credit Hours include "contact time" in the classroom and outside course work. It is expected that the sum of classroom time and outside course work time should add up to three times the listed credit hours per week.
  • Course Webpage: https://BillJr99.github.io/Ursinus-CS374-Fall2026

  • LMS (Canvas): Canvas

  • Course Calendar: Import the course calendar into your favorite calendar app with this link!

  • Class Notebook: Access our class notebook here! If you are unable to access the notebook, please let me know and I will share the document with your account.

  • Help Room on Microsoft Teams: Click Here to Go to the Teams Help Room Channel on Microsoft Teams.

  • Academic Term: Fall 2026-27

  • Term Start and End: through

  • Course Prerequisites: CS174 with a grade of C- or higher.

  • Class Meeting Locations and Times:
    • Section A:
      • s from 10:00 AM to 11:15 AM in Pfahler 007
      • s from 10:00 AM to 11:15 AM in Pfahler 007
  • Course Description: Syntax, processors, representations and styles of programming languages. Study and comparison of several modern programming languages. Prerequisite: A grade of C- or higher in CS-174. Offered in the fall of even years. Three hours per week. Four semester hours.

Course Learning Objectives and Learning Goals

Learning Objectives

  1. Describe and compare the design principles, paradigms, and tradeoffs of modern programming languages.
  2. Specify the syntax of a language formally using grammars and regular expressions, and reason about what those formalisms can and cannot express.
  3. Construct the front end and evaluator of a programming language, connecting formal specification to working implementation.
  4. Evaluate how language design choices affect correctness, expressiveness, accessibility, and the communities that use a language.

Learning Goals

  1. Classify languages by paradigm and evaluate them against criteria including readability, writability, and reliability.
  2. Write BNF and EBNF grammars, construct derivations and parse trees, and resolve ambiguity using precedence and associativity.
  3. Construct regular expressions and finite automata, and explain their equivalence and their limits relative to context-free languages.
  4. Implement a scanner, a recursive descent parser producing an abstract syntax tree, and a tree-walking evaluator with environments, in Python.
  5. Write idiomatic functional programs in Scheme and Python, and evaluate lambda calculus expressions by hand using beta reduction and Church encodings.
  6. Design and implement an original programming language as a team, integrating course components through iterative sprints, peer review, and a public demonstration.

The Questions

Throughout the course, we will be thematically guided by the Ursinus Questions:
  • What should matter to me?
  • How should we live together?
  • How can we understand the world?
  • What will I do?

This semester, we build toward a single shared accomplishment: by December, your team will have designed and implemented a programming language of your own. Along the way, we will collectively consider questions like:

  • What makes a programming language a language, and how do grammars give precise meaning to syntax?
  • How does source text become running behavior, from characters to tokens to trees to values?
  • Why do languages differ in their treatment of names, scope, types, and state, and what do those differences cost or buy us?
  • What can the lambda calculus, a language with almost nothing in it, teach us about languages that have everything?
  • How do the languages we use shape the programs we can imagine writing, and who gets included or excluded by those design choices?

Resources

Accommodations

Ursinus College and your instructor are committed to ensuring equal access and providing reasonable accommodations for all students. If you have, or think you have, a disability in any area such as, mental health, attention, learning, chronic health, sensory, or physical, please contact the Director of Disability Services.

As the instructor of this course, I strive to provide an inclusive learning environment. If you experience barriers to learning in this course, do not hesitate to discuss them with me. The Office of Disability and Access works with students who have any kind of disability, whether apparent or non-apparent, learning, emotional, physical, or cognitive, and need accommodations to increase their access to this learning environment. Students are encouraged to reach out to the disability and access team to discuss supports and accommodations they may need by scheduling a meeting using their scheduling link: https://kderstine.youcanbook.me/, or by emailing them at disabilityandaccess@ursinus.edu. Students can also review accessibility and disabilities services online at the Disability and Access at Ursinus Webpage. Their office is located in Lower Wismer, with the Institute for Student Success (ISS) office.

Peer Coaching

The Institute for Student Success offers Peer Coaching that you can sign up for anytime. The Institute for Student Success (ISS) is located in Lower Wismer, and connects students to the resources, activities, services, and programs that can help students be successful, thrive, and persist to graduation. They offer academic skills workshops, one-on-one coaching, tutoring, and more. Specifically, they offer course level tutoring as well as peer academic coaching (for help with time management, SMART goal setting, breaking down large assignments, and more). Contact them at instituteforstudentsuccess@ursinus.edu or 610-409-3400.

Wellness Center

If you are struggling with mental, physical, or substance use concerns that are negatively impacting your life, relationships, or academics, please reach out for support. The Wellness Center's Counseling staff and the Health Promotion staff collaborate to support students and they are all co-located in The Hive. The Wellness Center offers counseling and medical services at no cost to students. All services are confidential. For urgent mental health issues, a walk-in crisis hour is available at 2-3 pm each weekday, where students in crisis can be seen immediately by a clinician. A 24/7 on-call clinician is also a part of the campus Crisis Response Team. Health Promotion offers support services for students in recovery and Allies of Recovery training for friends/loved ones, and hosts many events and programs to help students build a healthy lifestyle and discover coping strategies. Visit ursinus.edu/wellbeing for wellness services campus wide and visit the office's website (https://www.ursinus.edu/offices/wellness-center/) for a full description of all services.

Center for Writing and Speaking

The Center for Writing and Speaking is available for one-on-one and group appointments to advise you as you revise your writing projects and presentations. They will even support your personal projects and extracurricular activities! Please feel free and encouraged to review any and all writing and speaking work from this class with them. Make an appointment at https://ursinus.mywconline.net/.

Bear2Bear and Basic Needs/Wellbeing

The college recognizes that temporary financial hardships can impact students' access to course materials, as well as their access to opportunities on campus. Please be aware of the Bear2Bear fund, which has been established by donors to the college and provides special grants for students who have exhausted other sources of funding. For information on assistance in getting other basic needs met, please visit https://www.ursinus.edu/wellbeing.

Help Room

The Math Help Room (Pfahler 102) is a great place to go if you are struggling and is managed by the Institute for Student Success. Students who have previously taken the course will be there to help you with the assignments.

Course Management Systems: Canvas, Microsoft OneNote, and Microsoft Teams

We will be using Canvas to post all of the grades. For the most part, we will submit work using Canvas as well. For class activities and notes, we will be using OneNote, and for other discussions and announcements for the course, including messaging me directly with questions, we will use Microsoft Teams. OneNote and Teams are linked to your Office suite through Ursinus, so you are automatically enrolled. There you can ask and answer questions about the lecture content and assignments.

Since it is likely that students will have similar questions, it is much more efficient for me to answer them there so the whole class can see the answer, so it is possible that I will ask you to re-send a question publicly that I get in an e-mail. If you'd prefer, I could anonymize the question as well, but I'd like you to have the opportunity to post it so that you are credited with having such a good question!

Course Instructors and Student / Office Hours

Role Name and Contact Information Student Hours / Office Hours
Professor William Mongan
Picture of Professor William Mongan

Phone: 610-409-3268
E-Mail: wmongan@ursinus.edu
Office: Pfahler Hall 101L
  • s from 11:20 AM to 11:50 AM in Pfahler Hall 101L
  • s from 11:20 AM to 11:50 AM in Pfahler Hall 101L
  • s from 3:00 PM to 5:00 PM in Pfahler Hall 101L
  • s from 3:00 PM to 5:00 PM in Pfahler Hall 101L
  • s from 3:00 PM to 5:00 PM in Pfahler Hall 101L

Sign up for a one-on-one appointment during my office hours!
Student hours (also known as "Office Hours") are certainly available for asking questions about the course, about your assignments, and other academic questions you may have. You do not need an appointment to come to student hours, and you do not even need to have an agenda or set questions! You can come and just have a general chat about things with us. If you cannot make it to student hours, you can contact us for an appointment as well. Student hours are also for non-instructional topics of conversation: you can talk with me about your adjustments to college life, your long-term goals, advice about your academic journey, and most other things. If I don't know the answer to something or if I don't feel I am the best person to offer you advice about it, I will be happy to help connect you with the right people. In other words, don't be afraid to ask me things that you think are "off topic" - I love teaching because I love to be a resource for you on your journey. I'll be happy to see you there.

Textbooks

Required? Title Author Edition ISBN Freely Available?
Required Introduction to Compilers and Language Design Douglas Thain 2nd Edition Online Version
Required Foundations of Computing: An Accessible Introduction to Formal Languages Chuck Allison Online Version
Recommended / Supplemental Programming Languages: Application and Interpretation Shriram Krishnamurthi Online Version
Recommended / Supplemental Crafting Interpreters Robert Nystrom Online Version
Please Note: The cost of the book may be prohibitive for some students, so please note that renting the book is much cheaper. Please communicate as early as possible if you are having trouble obtaining the book, rather than keeping this to yourself, so that we can work on a solution together. If you are experiencing a financial hardship, please consider the Bear2Bear Emergency Fund for temporary relief applications.

Course Schedule

Week Date Title Readings Deliverables Handed Out Deliverables Due
Week 1 Welcome: Why Study Programming Languages?
Week 1 Programming Paradigms
Week 2 Evaluating Languages: Readability, Writability, Reliability
Week 2 Syntax and BNF/EBNF
  • Allison, Ch. 6 §6.1: Context-Free Grammars and Derivations
Week 3 Grammars and the Chomsky Hierarchy
Week 3 Derivations, Parse Trees, Ambiguity, and Precedence
Week 4 Regular Expressions
Week 4 Finite Automata: DFAs, NFAs, and Equivalence
  • Allison, Ch. 2 §2.1–2.2: Deterministic and Non-Deterministic Finite Automata
  • Allison, Ch. 4 §4.2: Decision Algorithms (Is the Language Empty?)
Week 5 Tokens and Scanning: Building a Lexer
Week 5 Recursive Descent Parsing: From Grammar to Code
Week 6 Parsing Expressions: Left Factoring, Precedence, and Chained Operators
Week 6 Abstract Syntax Trees
Week 7 Table-Driven and LR Parsing
Week 8 Tree-Walking Interpretation: Evaluating the AST
Week 9 Binding and Scope
Week 9 Environments and Variable Storage
Week 10 Type Systems
Week 10 Control Flow and Statement Semantics
Week 11 Functional Programming and Higher-Order Functions
Week 11 Scheme and Racket as Objects of Study
Week 12 Lambda Calculus I: Syntax and Beta Reduction
Week 12 Lambda Calculus II: Church Encodings and Combinators
Week 13 Closures and First-Class Functions
Week 13 Modern Language Features
Week 14 Language Design Workshop: Project Kickoff (Sprint 0)
Week 15 Sprint Studio: Sprints 1-2 and Gallery Walk: Peer Review of Team Languages
Week 15 Sprint Studio: Sprint 3 and Release Hardening
Week 16 Demo Day: Team Language Presentations (Class Switch Day: follows a Thursday schedule)
Please note the following holidays this term:
Please note the following key calendar dates:
  • Add Deadline:
  • Drop with a W Deadline:
  • Reading Day:

Grade Breakdown

Letter grades will be assigned on the scale below at the end of the course. "Grade grubbing" is not conducive to professional practice; every assignment has or will have very precise expectations and point breakdowns, and I will evaluate submitted work carefully according to these standards. I will also return assignments in a timely manner, and the running weighted grades will be updated frequently. Therefore, I expect a commensurate level of respect from you. In sum, you should know where you stand at all times, there will be plenty of opportunities to improve your standing, and there should be no surprises at the end of the course.

Grading Table

Item Weight
Programming Assignments (6) 50%
Team Language Project 25%
Class Activities and Participation 15%
Reflection Notebook 10%

Letter Grades

Letter Grade Range
A+ 96.9-100
A 93-96.89
A- 89.5-92.99
B+ 87-89.49
B 83-86.99
B- 79.5-82.99
C+ 77-79.49
C 73-76.99
C- 69.5-72.99
D+ 67-69.49
D 63-66.99
D- 59.5-62.99
F 0-59.49

Course Policies

Netiquette in Online Discussion Boards infographic
Courtesy of the Online Education Blog of Touro College.

Classroom Environment and Inclusivity Standards

In this class we will work to promote an environment where everyone feels safe and welcome, even during uncomfortable conversations. As we explore these ideas, every voice in the room has something of value to contribute to group discussion. Every participant must show respect for all others. You are encouraged to not only take advantage of opportunities to express your own ideas, but also to learn from the information and ideas shared by other students. Participation is crucial to the success of this classroom experience. Your insights, questions and comments will be useful not only to yourself and to your a professor, but to your fellow students. My goal is to foster a environment in which students across all axes of diversity feel welcome and valued, both by me and by their peers. Axes of diversity include, but are not limited to, age, background, beliefs, race, ethnicity, gender/gender identity/gender expression (please feel free to tell me in person or over e-mail which pronouns I should use), national origin, religious affiliation, and sexual orientation. Discrimination of any form will not be tolerated. Please see me if you have any questions about our classroom environment. Discriminatory acts can be reported by following the process outlined on the college policy on discriminatory acts. Furthermore, I want all students to feel comfortable expressing their opinions or confusion at any point in the course, as long as they do so respectfully. As I will stress over and over, being confused is an important part of the process of learning computer science. Therefore, I will not tolerate any form of put-downs by one student towards another about their confusion or progress in the class. Learning computer science and struggling to grow is not always comfortable, but I want it to feel safe. Much of this material is probably new to everyone, and those with some prior experience likely recall a time when it was new to them, too. Remember that this is not a competition: helping others to grow is itself a richly rewarding professional development opportunity. In order to allow for equitable access to class for students who may be attending and participating remotely, I may record our class sessions. These recordings will only be available on our Canvas site. I will announce that we are recording in the beginning of any classes of this kind; out of respect and privacy for me and all class members, please do not download, copy, or redistribute class recordings.

Online Communication Policy

Since this is a class-wide communication, the following rules apply to message groups and electronic communications:
  1. Students are expected to be respectful and mindful of the classroom environment and inclusivity standards.
  2. They are equally applicable to a virtual environment as they are in class.
  3. Students are not permitted to share direct answers or questions which might completely give away answers to any homework problems or labs publicly on Microsoft Teams. When in doubt, please send me a direct message there.
  4. I will attempt to answer questions real time during student / office hours. Otherwise, I will make every attempt to respond within 24 hours. Of course, students can and should still respond to each other outside of these intervals, when appropriate!
  5. Students may ask anonymous questions.

Early Alerts

From time to time, I may send academic early alerts through the college to you regarding your academic performance or engagement in the class. These alerts are intended to help you engage in a way that will improve your ability to be successful. Should I send you an alert, I expect that you will follow up with me within 5 days to discuss your engagement on campus or in our class.

Attendance Policy

Students may miss up to 4 classes without justification, although students are encouraged to communicate with me prior to missing class (or immediately after) so that we can discuss what was missed and how to catch up. Any student who misses more than 4 classes will receive a full letter grade reduction for each subsequent class missed from the final letter grade. A lateness to class shall count as one-half of an absence for purposes of this policy.

Religious and Spiritual Life Observance Policy

Per the Religious and Spiritual Life Observance Policy, students who expect to miss classes, examinations, or other assignments due to religious observance may notify me two weeks prior to the observance. I will be happy to discuss reasonable alternatives with you.

Collaboration Policy and Academic Integrity Policy

Communication between students is allowed (and encouraged!), but it is expected that every student's code or writeups will be completely distinct! Please do not copy code off of the Internet (repurposing code from the Internet will probably make it harder anyway because the assignments are so specialized). Please cite any sources in addition to materials linked from the course website that you used to help in crafting your code and completing the assignment.

See the Course Management page in the Faculty Handbook for an explanation of college policies on plagiarism and other academic honesty violations.

To encourage collaboration, students will be allowed to choose one "buddy" to work "near" during the assignment. Students are still expected to submit their own solutions, but they are allowed to provide substantial help to their designated buddy, and even to look at the buddy's code during the process. Students must indicate their buddies in the README upon assignment submission. Please let me know if you would like a buddy but are having trouble finding one.

Below is a table spelling out in more detail when and how you are allowed to share code with people (table style cribbed from Princeton CS 126).

Please Note: The terms "exposing" and "viewing" exclude sending or ingesting electronically, which would be considered copying. Exposing and viewing are normally done in the context of in-person working or in the help room. In addition, "Other People" includes internet sources!
Your Buddy Course Staff Course Grads Classmates Others (Including Generative AI)
Discuss Concepts With OK OK OK OK OK
Acknowledge Collaboration With OK OK OK OK OK
Expose Your Code/Work/Solutions To Labs Only OK OK NO NO
View the Code/Work/Solutions Of Labs Only OK NO NO NO
Copy Code/Work/Solutions From NO NO NO NO NO

If the work you submit appears to be copied from previous work or the collaboration policy has been violated in any way (including working with more collaborators or "buddies" than the course deliverable specifies) according to the College Academic Honesty policy, regardless of intent, then it may be an academic dishonesty case, and it will be referred to the Office of the Provost. I am required to make this report in every occurrence, so it is best to speak with me first if there are any questions about the policy or expectations. You should feel free to have these conversations with me anytime prior to making your submission without fear of penalty. Finally, except as specified in this collaboration policy, it is expected that your work is your original work. You must cite any collaborations or references that you use, including consultation with or work generated through the use of generative AI systems. You may have a friend or relative with computing experience, but they should not do your assignments, labs, etc., for you. Similarly, generative AI systems should not do your work for you. In general, consultation with AI systems should be treated as assistance from a classmate per the table above, and should be cited with both the prompt and the response. Should a question arise as to the level of support given by AI or an outside source that is fully cited by the student in the submission, the student will be invited to resubmit that work without such resources without constituting an academic integrity violation.

Flexible Submission Policy

In the absence of accommodations arranged in advance with the instructor or college, all assignments are due at 11:59 PM Eastern Time on the date(s) stated on the schedule. With prior permission and a reasonable first draft submission by the deliverable deadline, any student may request a three day extension on any deliverable, as often as needed. Assignments will be accepted without prior permission following the original deadline, or, if requested, following the three-day extension deadline, with a points deduction of 10% per day if submitted before 11:59 PM Eastern Time on the day submitted. If a student adds the course late, deliverables due prior to or on the day of that student's registration will be due twice the number of days following the first day of the semester that they registered (for example, a student who registers on the third day of the semester shall receive six days to submit assignments from the first three days, and then the remainder of this policy takes effect for those and for all other deliverables). Under no circumstances (including accommodations) can late work be accepted after the final class meeting, nor during final exams week, nor after the exam.

A Word About Submitting Work On-Time

Managing your time and pacing yourself consistently are crucial to your academic success. In professional practice – and in the spirit of the Ursinus Question “how should we live together?” – others will depend on you and will build upon the work you create. In the classroom, these interactions are modeled in the form of group projects and activities, and also in the form of cumulative course content that builds upon itself thematically throughout the semester. Research indicates that self-imposed or flexible deadlines does not lead to optimal scheduling [1], which, in turn, can lead to a compounding of overdue work across multiple classes. In addition, extensions to or prolonging of assignment deadlines has been shown to yield a detrimental appearance of complexity [2]: we tend to believe that assignments with longer durations are more difficult, and can find it more difficult to get started due to the anxiety that results. Your professor has established a schedule and procedure for completing and submitting classwork that complements the topics being covered during the semester. The specific details of that schedule and of those procedures may vary from instructor to instructor, depending upon the unique needs and instructional approach of the class. These details are specified in the course syllabus, and because those details have been designed thoughtfully and intentionally to best enable your consistent engagement with the class, the guidelines in that syllabus pertaining to engaging in the course, completing work, and posting grades (including a grade of incomplete) shall be considered effective policy for the course. Regardless of the implementation details from one course or from one instructor to another, these instructional designs are intended to enable you to engage with the course in a healthy and consistent manner, to manage your time effectively between your class, your other classes, and your extracurricular activities, and to better position you for success in class and beyond.

(References: [1] Ariely, Dan, and Klaus Wertenbroch. “Procrastination, Deadlines, and Performance: Self-Control by Precommitment.” Psychological Science, vol. 13, no. 3, May 2002, pp. 219–224, doi:10.1111/1467-9280.00441. [2] Meng Zhu, Rajesh Bagchi, Stefan J Hock, The Mere Deadline Effect: Why More Time Might Sabotage Goal Pursuit, Journal of Consumer Research, Volume 45, Issue 5, February 2019, Pages 1068–1084, https://doi.org/10.1093/jcr/ucy030.)

Grade Posting Policy

Feedback and grades will be provided frequently, generally within one week of the due date of any deliverable, and no more than two weeks following the due date. Inquiries seeking a change of grade must be made within 7 days of the posting of the grade in question, including the posting of a reduced grade for a missing submission. Final grades are due within 48 hours of the final exam (or last class scheduled meeting in a class with no final exam); grades are not subject to change (including a change from a posted grade to a grade of incomplete) once submitted to the college.

Incomplete Policy

A grade of I may only be granted by permission of the Office of the Provost. A petition to the Office of the Provost will only be made upon written request by the student, including all information requested by the Office of the Provost. Requests for a grade of I will only be made in situations where such a request is warranted. Specifically, the student's grade must be passing at the time the request is made. A petition for a grade of I will not be considered if an academic alert was submitted by the instructor prior to the course Drop with a W (withdraw) deadline.

Title IX

Title IX is a federal law, under which it is prohibited to discriminate, harass, or commit misconduct on the basis of gender or sex. The Title IX Coordinator is available to receive inquiries and to investigate allegations in this regard. As a professor, I am a mandatory reporter under Title IX, and am required to report disclosures made to me related to Title IX.

Inclement Weather and Class Cancellation Policy

In the event that the College closes due to inclement weather or other circumstances, our in-person class sessions, student / office hours, labs, or other meetings will not be held. I will contact you regarding our plan with regard to rescheduling the class or the material, any assignments that are outstanding, and how we can move forward with the material (for example, any readings or remote discussions that we can apply). If necessary, I may schedule online virtual sessions in lieu of class sessions, and will contact you with information about how to participate in those. I will communicate this plan to the department so that it can be posted on my office door if it is feasible to do so. This policy and procedure will also apply in the event that the College remains open but travel conditions are hazardous or not otherwise conducive to holding class as normal. Should another exigent circumstance arise (for example, illness), I will follow this policy and procedure as well.

Class Recording Policy

In order to allow for equitable access to class for students who may be unable to attend, I may record our class sessions. These recordings will only be available on our Canvas site. I will announce that we are recording in the beginning of any classes of this kind; out of respect and privacy for me and all class members, please do not download, copy, or redistribute class recordings. Please do not record classes without first discussing it with the instructor and, as appropriate, with appropriate accommodations to do so.

Student Perception of Teaching Questionnaire (SPTQ)

I will be soliciting student feedback through the SPTQ and possibly through other forms of commentary. This feedback greatly assists me and the department as we develop our courses and overall curriculum for this program. This course has benefitted from the feedback of those students who took the course before you, and your feedback will help maintain and improve the course for those to follow. I strongly encourage you to participate in this important and valuable process.

Syllabus Subject to Change

I will do my best to provide all relevant information about the course on this syllabus. Sometimes, exigent circumstances, the pace of the class, or other circumstances will warrant minor revisions to the syllabus. For example, inclement weather or other campus closure might affect the course schedule and assignment deadlines; in addition, I may find that the class benefits from spending more time on a particular topic, and adjust accordingly. Although I try to avoid rescheduling student / office hours, it may become necessary from time to time to accommodate other events in the College. Should any revisions be necessary, I commit to making any revisions in my estimation of the best interests of the class, and commit to communicating those changes to you as soon as I make them.

Course Details

This semester is a build: by December, your team will have designed and implemented a programming language of your own, assembled one assignment at a time. The sections below explain how the pieces fit together — how the course is designed to give you choices, how to read an assignment, how to prepare for each class, and how the day-to-day work of participating is valued and evaluated. Read them once now, and return to the participation and preparation guides throughout the term.

How This Course Works: Choice and Universal Design

This course is built on the principle that there is more than one good path through it, and that you should have real say over yours. The choices are deliberate, in the spirit of Universal Design for Learning — multiple ways to engage with the material and multiple ways to demonstrate what you have learned — and none of them is the “remedial” path.

  • A capstone you shape. The Team Language Project is yours to design; a compelling original language is always welcome, and the final project’s extension menu lets you go deep where your interest lies rather than following a single fixed spec.
  • The Music and Live-Coding Directions. If you would rather build toward making music than a general-purpose language, several assignments (the Parser and Functional Programming among them) and the Team Language Project each offer a music direction inside the same required deliverable — the Music and Live-Coding guide maps the whole path, including a text-events-only route that never requires audio. Choose direction by direction as each assignment arrives; teams commit to a project direction at the kickoff.
  • Depth inside every assignment, and supplemental depth everywhere. Each programming assignment offers directions you choose inside it — a generator-toolchain lexer, a music-notation parser, a type checker for your interpreter, continuations or Church encodings in the functional assignment — so nothing on the schedule is optional, but every deliverable has room for your interests. Beyond the assignments, the schedule carries supplemental activities and tutorials (parser combinators, garbage collection, bytecode VMs, and more; browse the Tutorials shelf): invitations, not obligations. Tell me when one of them becomes the thing you want to go further with.

If a path you want is not on the menu, propose it. The point of the choices is to let you build the language, and the fluency, that you actually care about.

How Assignments Are Structured: Purpose, Task, and Criteria

Every assignment in this course is written to be transparent about three things, so that you are never guessing about what is being asked or how it will be judged:

  • Purposewhy the assignment exists and what capability it builds toward. The work is never busywork; each piece is a stage of the language you are building or a skill that stage depends on.
  • Taskwhat you will actually do, broken into concrete steps.
  • Criteriahow your work will be evaluated. Every graded assignment carries a rubric with four levels (pre-emerging, beginning, progressing, proficient) so you can see exactly what proficient work looks like before you start — and can use the rubric to assess your own draft.

When you open an assignment, read the Purpose first: it tells you what the assignment is really for, which is the fastest way to make good decisions when the task gets ambiguous. Every assignment also closes by asking you to reflect — what you did, what fought you, how long it took, and what grade you would give yourself against the criteria. That reflection is part of the work, not an afterthought.

A note on grade categories: the Overview (25 points) and Warmup (10 points) onboarding assignments are assessed within Class Activities and Participation; the six programming assignments — Regular Expressions, Automata, Lexer, Parser, Interpreter, and Functional Programming — make up the Programming Assignments category. There is no midterm or final exam: Demo Day on the last class meeting (Tuesday, December 8) is the course’s terminal event, and no work is accepted after it.

Preparing for Each Class

Our class meetings are hands-on POGIL sessions: you work in your standing team through activities that build the concepts and the code, not lectures you passively receive. That means class works best when you arrive ready, and “ready” is a routine you can run rather than a matter of luck. The Preparing for Each Class guide lays out that routine: how to read a technical section in passes, how to attempt the reading exercises before class, and how to arrive with a question or a stuck point that the session can resolve. Bringing that prepared question is itself the accountability check that the reading happened — and it is usually where the best discussion starts.

Class Activities and Participation (15%)

This is a course you do, not one you watch, and this component values the daily work of showing up prepared and contributing to the shared build. It is assessed against the rubric on the Preparing for Each Class guide, across four dimensions: preparation (you have done the reading and attempted the exercises), contribution (you engage in your POGIL team and in whole-class discussion), collaboration (you take your rotating team role seriously and help your teammates succeed), and reflection (your activity and assignment reflections show genuine engagement).

Participation takes more than one form, by design. In the in-class activities your team rotates the POGIL roles — Manager, Recorder, Presenter, and Reflector — so that on different days you facilitate, capture the group’s thinking, report out, or step back and synthesize. In the project phase your team rotates a second set of roles — Coordinator, Builder, Evaluator, and Scribe. Speaking up in whole-class discussion counts; so does posting your team’s answer to the class discussion board, asking a sharp question, or helping a teammate past a bug. If the spoken room is hard for you, the written and role-based channels are real ways to earn this component — talk with me early and we will find the path that fits.

From time to time the class agenda sets aside time for reading exercises and discussion: a short problem tied to the reading — write a grammar rule, trace a tokenizer, evaluate a language-design tradeoff — that you attempt beforehand and we work through together. These are marked on the schedule and drawn from the Reading Exercises bank.

Reflection Notebook (10%)

Programming language theory rewards reflection: the same idea returns in new clothes — a grammar becomes a parser becomes an AST becomes an evaluator — and the students who notice the pattern go furthest. Your Reflection Notebook is where you make that noticing visible. It collects your responses to the reflection prompt that closes each class activity and each assignment, anchored by the Language Autobiography you write in the Overview assignment and revisit at semester’s end. It is reviewed at midterm and at the end of the term; the guide explains what to keep in it and how it is evaluated.