CS 251: Principals of Programming Languages Syllabus
Course Description
This course introduces the principles underlying the design, semantics, and implementation of modern programming languages in major paradigms including function-oriented, imperative, and object-oriented. The course examines: language dimensions including syntax, naming, state, data, control, types, abstraction, modularity, and extensibility; issues in the runtime representation and implementation of programming languages; and the expression and management of parallelism and concurrency. Students explore course topics via programming exercises in several languages, including the development of programming language interpreters.
Distributions: MM - Mathematical Modeling and Problem Solving
Spring 2025
I'm extremely excited to be offering CS 251 this semester, which has not been taught at Wellesley in several years! CS 251 is no longer a required class for the major, which gives us a bit more flexibility in what path we take this semester.
Learning goals
In this class, you will:
- Gain a more accurate view on what programs actually mean.
- Learn powerful programming language features—such as structural recursion, higher-order functions, and pattern matching—that will make you a stronger programmer across languages even beyond the two functional languages (Racket and OCaml) we will use.
- Develop skills and strategies that will help you learn programming languages more quickly and effectively in the future.
- Gain an appreciation for the expressive power of different programming language constructs.
- Approach problem-solving through the lens of language design and program analysis.
- Develop and apply skills for independent learning, critical thinking, and problem-solving as a self-reliant computer scientist.
Communication
Please sign up for the course Zulip via the email you get in the first week of class. Most course announcements will happen on Zulip rather than via email. Zulip is an open-source, Slack-like chat tool with a few unique features that make it a good fit for class discussion. It's also used by many open-source systems programming communities.
Work
Assignments
Assignments will typically be assigned on Thursday/Friday and due the following Thursday at 11:59pm. Some assignments will have components due earlier in the week, see the calendar for full details. All assignments will be submitted via Gradescope.
Time allocation
Students should expect to spend about 10 hours per week on assignments. In addition to the 150 minutes in class, this is approximately the 12 hours/week per course required by accreditation guidelines.
When you submit a homework assignment, you will also be asked to report how long you spent on it. This has no impact on your grade; it will help me ensure the course load is reasonable.
Late work
Most topics in this course build heavily on other topics, so I encourage you to try to submit by the listed deadline. In addition, my office hours are scheduled with respect to the listed deadlines.
If you need a short extension (excluding the final assignment), you can have one by default by filling out the 48-hour-extension request form (no further communication needed). If you need a longer extension, please reach out to me to discuss a plan. Work turned in past any discussed deadline or extension date will have a cap on the highest score you can achieve. The highest score for non-discussed late work is an 85 (that is, any score above 85 will be given an 85; lower scores will not change). Some assignments may have more firm deadlines on late work to enable cumulative later assignments, this will be noted in the assignment description.
Quizzes and Final Retakes
There will be 3 in-class, paper quizzes (in part, because research has consistently shown the "testing effect" on learning). Each quiz will focus on the corresponding third of the course, covering both conceptual questions and short programming problems.
Quizzes are closed note, with the exception of one page (standard 8.5 x 11 size, both sides allowed) of notes. You must handwrite your own notesheet; I will collect it at the end of each quiz.
Rather than a traditional final exam, we will use CS 251's final exam block as an opportunity for quiz retakes (a lightweight form of mastery-based grading). You may choose to retake 0-3 of the quizzes. Your final grade will be the higher of the two scores between your initial quiz and the final retake for that component (if completed).
Note that this means that if you miss a quiz, depending on the reason for missing it, I may ask you to simply take the final exam retake to determine your score for that quiz. This also means that if you are happy with your grade at the end of the semester, you do not need to show up for the final exam block.
Participation
This course includes frequent in-class exercises and class interactions which contribute to your final grade. Each lecture will have some component I'll use to help track participation. You can miss 2 lectures without it impacting your participation grade (though I would still appreciate a Zulip DM or email to let me know). After those 2, additional absences should be discussed with me for them to be considered excused.
Honor Code and Collaboration/Resource Policies
The Wellesley Honor Code applies to CS 251, and combines with specific course policies to determine what level of collaboration and use of online resources is acceptable.
In general, the CS 251 collaboration policy has two subparts:
1. Default for graded assignment:
- Your submitted solutions must be your own work, even if you collaborate with other students.
- For pair assignments, you must not divide work among people to complete separate parts and combine the solutions.
- Your submissions must cite all collaboration and reference material (excluding course materials and reference linked from the course website) that you used.
- You should not use generative AI (e.g., ChatGPT) without explicit instructor permission.
- You may collaborate on conceptual (non-independent) aspects of the assignment with other current students. You may both look at code on one person's computer screen for the purposes of debugging. However, you should not copy code from another person's screen to your own submission. You must be able to fully explain any code or written work that you submit.
2. [Independent] components:
- Some assignments will have some components marked as [Independent]. On these components, you must not view another student's code, even for the purposes of debugging. You should only discuss [Independent] components with me, the instructor.
Grading
Your final grade will consist of:
- Assignment work: 65%
- All assignments have equal weight.
- Participation & in-class exercises: 5%
- Quizzes/final retakes: 30%
- 3 quizzes, each worth 10%
- Each grade will be the highest score between your quiz grade and the corresponding component of the final retake.
The following numeric scores guarantee these letter grades (boundaries may be softened, but not made more difficult): 93.5+: A, 90.0+: A-, 86.6+: B+, 83.3+: B, 80.0+: B-, 76.6+: C+, 73.3+: C, 70.0+: C-, 60.0+: D, <60.0: no credit.
Note that per college rules, the minimum grade to earn credit under credit/no credit grading is C. The minimum grade to pass and earn credit under normal letter grading is a D.
Classroom environment
It is extremely important that this course is a respectful and supportive environment. Computer science is a wonderful and exciting field, and I hope every student in this class feels that they belong in this discipline. I expect everyone in this course to do their part to make all students feel welcome. This includes avoiding making assumptions about your classmates’ backgrounds, being professional and kind when working together, and letting me know of any issues if they arise.
Mental health
Your mental health is more important than any course. Please let me know if you would like to talk (though you should know that I am a mandated reporter for certain topics). The college also has many resources available to you. If you feel you are falling behind in the course or have any other concerns, please contact me as soon as possible to work on possible solutions.
Feedback
This is a newly-redesigned course this year, so I am especially eager for feedback and suggestions! Please feel free to speak with me directly or use the anonymous feedback form if you would prefer.
Accommodations
Every student has a right to full access in this course. If you need any accommodations, please contact Wellesley’s Disability Services. If you need immediate accommodations, please arrange an appointment with me as soon as possible. If you are unsure but suspect you may have an undocumented need for accommodations, you are encouraged to contact Disability Services. They can provide assistance including screening and referral for assessments. Disability Services can be reached at disabilityservices@wellesley.edu, at 781-283-2434, by scheduling an appointment online at their website.
Religious Observance
Students whose religious observances conflict with scheduled course events should contact me in advance to discuss alternative arrangements. You may do this through the Wellesley College Religious Observance Notification system if you prefer.
Policies on Discrimination, Harassment, and Sexual Misconduct
Wellesley College considers diversity essential to educational excellence and we are committed to being a community in which each member thrives. The College does not allow discrimination or harassment based on race, color, sex, gender identity or expression, sexual orientation, ethnic or national origin or ancestry, physical or mental disability, pregnancy or any other protected status under applicable local, state or federal law.
If you or someone you know has experienced discrimination or harassment, support is available to you:
- Confidential reporting: Students can report their experiences to Health Services (781.283.2810); Stone Center Counseling Service (781.283.2839); or Religious and Spiritual Life (781.283.2685). These offices are not required to report allegations of sexual misconduct to the College.
- Non-confidential reporting:
- You can report directly to me. As a faculty member, I am obligated to report allegations of sex-based discrimination to the Nondiscrimination/Title IX Office.
- You can report directly to the Nondiscrimination/Title IX Office (781.283.2451) to receive support, and to learn more about your options for a response by the College or about reporting to a different institution.
- You can report to the Wellesley College Police Department (Emergency: 781.283.5555, Non-emergency: 781.283.2121) if you believe a crime has been committed, or if there is an immediate safety risk.
Attribution & Acknowledgments
This course draws on course material from previous iterations by Carolyn Anderson, Lyn Turbak, and Ben Wood, as well as materials from CSE 341 by Anjali Pal, Zachary Tatlock, and others at the University of Washington and CS 173 by Shriram Krishnamurthi and others at Brown University.