CS 251: Principles of Programming Languages

Instructor: Lyn Turbak
Tutors: Jannitta Yao, Vera Ye
Graders: Sophia Bussey, Jannitta Yao, Vera Ye, Lyn Turbak

Help hours via Zoom: see the drop-ins calendar for the most up-to-date info (it will change week-by-week depending on pset deadlines)

Announcements, Q&A: We will use the Google Group cs-251-t2-01-remote-fa20 email list for announcements, course discussion, and help. You are subscribed automatically on registration. Please stay subscribed and check your email on a daily basis for course announcements. This is also a great place to ask questions about assignments (but don’t post any code to the whole group).

Class Meetings

In Term T2 of Fall 2020, CS251 is being taught remotely.

There are synchronous Class meetings: MTWRF 1:00–2:15 EDT via Zoom (link shared by email). Classes will be held every weekday of Term T2 from Mon. Oct. 26 throough Fri. Dec. 15 except for Thu/Fri Nov 26/27 (Thanksgiving break). Students are expected to attend all synchronous sections except under extenuating circumstances. Please email Lyn if you cannot attend class.

An alternative twice-weekly early morning and/or evening synchronous meeting time is being planned for students physically located in times zones (especially in Asia) where it would be unreasonable to expect them to attend 1pm EDT daily synchronous lectures. If you are in this category, please contact Lyn ASAP about these alternative synchronous meetings.

Flexibility and Feedback

Because of the remote and compressed aspects of this course, it’s all one big experiment, and nothing is set in stone. The contents of this syllabus (and the associated schedule) are my (Lyn’s) current best guess of how things will proceed, but they are tentative and subject to change. I made numerous changes to the initial plans for my Fall 2020 term T1 CS235 course to reduce stress for students, and the final course schedule was dramatically different than the original one.

I need feedback from you on what is working and not working about the course. At any point, you may email me with any ideas about how to improve the course. If you prefer to send me an anonymous email, use this form (the required passphrase can be found near the top of the Course Schedule

Course Description (from Catalog)

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

Prerequisites(s): CS 230 or permission of the instructor.

Learning Goals

The course will prepare you to:

  • Leverage powerful programming language features — such as first-class functions, recursion over tree-shaped data, sum-of-product datatypes, and pattern matching — in languages that support them.
  • Quickly and effectively learn and evaluate new programming languages by focusing on key language dimensions.
  • Identify the model of computation underlying a programming langauge and recognize whether a given programming language is a good fit for a given problem.
  • Reason rigorously about the execution of programs using precisely defined models.
  • Understand and get practical some experience with key aspects of metaprogramming (programs that manipulate programs), including interpretation, compilation, and boostrapping.
  • Implement a well-specified model correctly by applying lessons from language design to construct a program or define a programming language.

Course Work

This course will be taught purely remotely. There will be no in-person aspect.

This course will be taught in a flipped classroom style in which students are expected to study whatever lecture materials have been posted reasonably in advance of the 75-minute synchronous Zoom classroom sessions held every weekday from 1:00–2:15pm EDT. The synchronous sessions will be used to review lecture concepts, answer questions, and do interactive problem solving involving the current material.

Preparation for each synchronous session will typically involve watching pre-recorded video segments, reviewing the lecture slides, and reviewing video recordings of previous synchronous lectures. Sometimes there may be reading assignments.

Lectures will often have a form in which you ask anonymous questions about recent material. Please submit such forms by noon so that I can review the questions before the synchronous session.

You will practice your understanding of the material by doing problem set problems. Because of the compressed nature of the course, some weeks will have more than one problem set. It is wise to do some work on the current problem set every day. Note that you can work with a partner on problem sets; see details below.

Expectations

Because of the unusual nature of the compressed 7-week course and the flipped classroom style, it is important for students to understand what is expected of them.

  • Between preparing for class, attending class, and working on assignments, you are expected to spend at about 24 hours per week on this course. That’s a lot of time! But it is consistent with the 12 hours per week expected for a course during the regular semester. Also, this number is an average; some weeks might take more time, some less.

  • You are expected to study lecture materials before each class session when they are made available far enough in advance for this to be practical. If they are posted late, you should review them after the class sesssion but before the next one.

  • Preparation for each synchronous session will typically take between one and two hours. Depending on your schedule, you might prepare for a session during the previous afternoon or evening, or during the morning of the current session.

  • You are expected to attend every interactive session, although exceptions are made for extenuating circumstances. If you cannot attend a particular session, please email me in advance. Attending the synchronous sessions may be a hardship to students living in certain parts of the world, particularly Asia. I will contact such students about alternatives.

  • By an application of the pigeon-hole principle, having 8 psets due in a 7-week course means that during some weeks you will have more than one assignment due. So expect to be working on a few CS251 pset problems almost every day.

  • You are expected to submit assignments in a timely fashion. However, there is a huge amount of flexibility built into the submission times, and there are almost no ``hard’’ deadlines except near the very end of the course. See assignment details below.

  • You are expected to seek help from me and/or the tutors when you have trouble with the course material. Our job is to help you succeed! Sometimes students are embarrassed to seek help, especially when they are very far behind. We are not judgmental and are happy to help you with absolutely any material related to the course, no matter how long ago that material may have been taught.

If you think you will have issues meeting these expectations, please email me to have a conversation about this.

Lecture Slides and Videos

Lecture slides and videos of me working through these slides are the main way in which topics will be presented in this course. These slides and videos for a particular day can be found in the course schedule.

Since the lectures slides and associated videos are the main notes for the class, you are expected to study them carefully. I will strive to post these before lecture, so that you have a chance to at least skim them in advance. You should read them again after lecture.

When pre-recorded asynchronous videos are posted during the day before a lecture, you are expected to make an effort to watch them before the lecture. However, in many cases, such videos may not be posted until the morning of lecture or even after lecture. In this case, you should review them after the lecture.

Some notes:

  • The videos recorded for this class are intended only for students taking CS251. Although they are not ``public” on YouTube, anyone with the link can view them. Do not share links of these videos with anyone not currently taking the class.

  • In cases where there is not enough time to prepare pre-recorded videos before a synchronous class session, I will present the lecture material interactively in the synchronous session and make a video recording of the session. I might also make video recordings of synchronous class sessions even when there pre-recording aysynchronous videos.

  • Watching the videos on a fast speed is a way to save time. You can slow things down or rewatch parts when you come to parts that are challenging.

  • Sometimes you will be asked to stop the video and work on a problem before restarting the video. You will learn more if you actually do the problems before hearing the explanation of the solution. This is an important way to make the video-watching experience more interactive!

  • Slides are provided in both 1up (1 slide per page) or 4up (4 slides per page) PDF formats. If it is helpful, you are encouraged to annotate your own personal copy of the PDF slides.

  • We will not necessarily cover all slides in lecture, but you are responsible for understanding the content of all slides.

  • Keep a list of notes for things you find confusing or any questions you have. You can submit these anonymously by noon in a daily form that I will review before the 1pm class time.

Reading

We will not use a traditional textbook for this course. We will refer to a variety of course-specific material and some material freely available online, to be posted or linked on the from the course schedule.

There is a Readings/Reference page with links to some notes and reference materials for some of the topics in the course. You are encouraged to explore these additional materials, most of which were written/collected by Ben Wood.

Additional readings (typically classic papers) on programming languages topics will sometimes be assigned. These readings will be accompanied by thought questions in preparation for group discussions in class or for written response as part of assignments.

Assignments

Problem Sets

During the remote Term T2 semester, CS 251 will include about 8 problem sets, comprised of:

  • exercises in reasoning about the execution of small programs to understand precise language semantics;
  • small and medium-scale programming problems illustrating idioms in different programming languages and paradigms;
  • larger programming assignments, such as the implementation of interpreters for small languages of our own design; and
  • written analyses of language designs, their motivating applications, and their suitability to new applications.
  • written analyses of papers related to evaluating and designing programming languages.

Solo Problems

Additionally, associated with most problem sets will be special solo problem assignments on which you must work individually and can receive no help from anyone else (including the instructor and tutors). Solo problems will cover older material from previous problem sets. They effectively serve as a mini-exam.

Extra Credit Problems (must be done individually!)

Many problem sets will also include one or more extra credit problems. These are fun and challenging problems for which you can earn extra points in the course. Because they tend to be very challenging, you should not attempt these until you have finished the regular problems on a problem set.

Extra credit problems have no deadline; you can submit them at any point during the semester. You do not need to submit them with the problem set in which they are described.

Extra credit problems must be done individually. You cannot work with a partner on an extra credit problem.

In Fall 2020, the policy for extra credit is that up to 50 extra credit points can be added to the regular (non-solo) problem portion of your grade. Although extra credit problems are intended to be done in addition to regular problems, this policy allows you to choose to replace certain regular problems by extra credit problems. But be careful: the extra credit problems are typically more challening than the regular ones.

Working in Pairs

I believe that collaboration fosters a healthy and enjoyable educational environment. For this reason, I encourage you to talk with other students about the course material and to form study groups.

For any pset (but not any solo problems), you are also encouraged to form a two-person “team” with a partner and work on the pset together. The two team members must work closely together on the assignment and turn in a single assignment submission for the team. The grade received on such a submission will be given to both team members. Use this CS251 Pset Partner GDoc to (1) indicate that you’re looking for a pset partner for PS1 and (2) to record the members of your PS1 partner team when you form one.

Team efforts on assignments are subject to the following ground rules:

  • The work must be a true collaboration in which each member of the team will carry their own weight. It is not acceptable for two team members to split the problems of the assignment between them and work on them independently. Instead, the two team members must actively work together on all parts of the assignment.

    While many of you know that I am a huge proponent of the divide/conquer/glue (DCG) approach to problem solving, this methodology is not appropriate with partner work on pset. I really do expect you to be meeting by Zoom to collaborate on all problems on a partner pset. It would be OK if, after you’ve collaboratively solved a problem, that one of you takes charge of “writing up” the details of the solution. What is not OK is having a group member completely solve a problem on their own, and just have their partner review the final solution.

    The main problem with applying DCG to psets is that it reduces the learning that pair problems solving is supposed to promote. When only one partner solves a problem, the other partner isn’t learning how to solve that kind of problem, and so is at a disadvantage when it comes to solving that kind of problem independenty in solo problems or in their future CS work.

  • You are required to work with a partner on at least three assignments during the term. You are encouraged to work with a partner on all assignments but you are not required to do so beyond three of the assignments. Based on past experience, working with a partner can significantly decrease the amount of time you spend on an assignment, because you are more likely to avoid silly errors and blind alleys. You are also more likely to have a deeper understanding of a problem if you talk it through with someone else.

  • You are not allowed to work with the same partner you worked with on the two previous assignments. Rotating through partners is a good way to build community in the class and is helpful for avoiding situations where one individual feels pressured to continue working with another.

If you find that any of the requirements are especially challenging to satisfy, please contact me to see if other options are available.

Assignment Submission

All assignment submission will be electronic.

  • In PS0, you will follow the Setup instructions in the CS251-F20-T2 Pset Submission Instructions document to create a CS251 Google Course Folder that you will share with me and the tutors/graders that will contain your assignment writeups for the term. You will also create a so-called List Doc that will contain links to all of your work. (The List Doc is important for handling a single pset submitted by two partners working together.)

  • As described in PS0, for each assignment (pset or solo problem assignment), you will create a Google Doc for that assignemnt that contains written answers and/or code for each problem. The graders and I will grade a pset by commenting on your Google Doc.

  • For all problems that involve writing code, in addition to including a copy of that code in your GDoc, you will submit the code to a drop folder on cs.wellesley.edu following instructions on individual assignments.

Assignment Solutions

Pset solutions will be provided electronically to students who have submitted the psets. You are not allowed to share these solutions with any other person during this semester or in the future.

Only solutions to regular pset problems (not solo problems) will be provided. Please contact me if you have any questions about the solo problems; I would be happy to discuss them with you.

Exams

There will be no exams this semester. However, as noted above, associated with many problem sets will be solo problems that effectively serve as a mini-exam. This has the feature of spreading exam-like problems over the semester rather than concentrating them on particular days or weeks.

Lateness Policy

This semester I am adopting a version of Ada Learner’s lateness policy from CS342, which I like a lot. Much of the wording below is Ada’s.

Assignments have two purposes: to help you learn, and to help both of us assess your learning (so that you can learn better, and I can help you learn better). Because assignments play such an important role in your learning, it is very important to me that you do the assignments. As a consequence, I do not deduct points for late assignments, since I find that doing so discourages completing the assignment and gaining its learning-related benefits.

For any and all assignments, you may take a no-questions-asked extension until the end of the second day after the posted deadline. For example, for an assignment due on Fri at 5:30pm, you may submit the assignment by the end of Sunday without needing to do anything else.

If those two extra days are not sufficient for you to complete the assignment, you MUST contact me to let me know. When you contact me, I will ask you to tell me about your plan for completing the assignment, and we will work together to make sure that plan is a reasonable and effective one that supports both your learning and your health and wellbeing.

In some cases, it may make sense to delay certain parts of one assignment and instead focus on the next assginment, so as to keep up better with the current course material.

Even if you are behind on one or more assignments, it is essential that you continue to attend class and try your best to keep up with the new material being presented in class.

The purpose of this policy is to help you balance the requirements of this course with your mental, physical, and emotional health. I recognize that your personal life is important, and my goal with this policy is to help you find the flexibility you need. You are never expected or required to tell me any personal or private details of your life. However, I am always available to listen should you feel that sharing anything will help me support you.

Collaboration Policy and the Honor Code

I have adapted this wording from Ben Wood

For the purposes of the collaboration policy, the word ``team” will refer to an individual working on the pset alone as well as a two-person partner group working on the pset together. A team works as one to complete and submit one assignment solution.

  • Your team’s submitted solutions must be your team’s own work.
  • You must not divide work among people (within or across teams) to complete separate parts and combine the solutions.
  • Your submissions must cite all collaboration, assistance, and reference (excluding course materials and reference linked from the course website) that your team used to prepare your submission. List each person or resource with a short phrase identifying the topic or nature of collaboration, assistance, or reference.

  • Collaboration:
    • On solo problems, all collaboration and consulting of external materials is disallowed. These problems must be solved alone, without discussing solution strategies with anyone else, including the instructor and tutor(s).
    • On non-solo problems:
      • You may discuss high-level ideas or strategies with other teams in small groups.
      • You must not communicate detailed algorithms, implementations, code, formulae, or other detailed solution steps with other teams.
      • You must not, under any circumstances, view, share, prepare, or accept written solutions or assignment code outside your team.
  • Assistance:
    • On solo problems, you may ask the instructor for clarifications but not for hints.
    • On non-solo problems;
      • You may accept help from course staff to locate errors, interpret error messages, and correct errors of syntax.
      • You may accept help from other CS 251 Spring 2020 students to interpret error messages, subject to the above policy on viewing code.
      • You must not communicate with any person outside the current CS251 course about any problems related to the course. In particular, communicating with students who have previously taken the course is forbidden.
  • Reference:
    • You may consult course material from CS 251 Spring 2020 and external documentation of required tools.
    • You may consult external reference resources for general concepts and techniques, provided you cite them.
    • You must not consult solutions to this or any similar assignment.
  • Code reuse and adaptation:
    • You may reuse and adapt provided starter code in your solution without restriction.
    • You may reuse and adapt code from other CS251 materials from this term (slides, lectures, pset solutions, etc.) but not from any other term.

    • You must not reuse or adapt any other code.

Rules of thumb for collaborating outside your team:

  • You are welcome to discuss high-level ideas and strategies with other teams, as allowed by the policy above. If taking notes on these discussions, keep your notes general (no verbatim copies, photographs, detailed descriptions). Remember, you may not write solutions together, so later, write full solutions on your own, referring to your notes only if needed.

  • Wait at least 30 minutes after discussions outside your team before writing your solutions. This helps you know whether you actually understand the solutions (and their derivation) yourself.

  • If writing your solution is effectively making a verbatim copy of – or following a set of explicit directions in – your notes from discussion with others, then your notes or your discussion are too detailed.

After the semester:

  • Some students students may wish to include work from CS 251 in portfolios, resumes, etc. Please do not post code publicly (including on GitHub, GitLab, Bitbucket, your own website, etc.), but feel free to show your code privately to potential employers or others who are not students.

  • Do not make your code accessible or viewable by current or future CS 251 students.

Team Policy

Each graded assignment follows one of two team policies:

  • The individual policy requires individual students to prepare and submit their own solutions.
  • The pair policy allows two students to prepare and submit a single joint solution.

    • Individuals may opt to complete an individual submission on pair assignments unless pairs are explicitly required.

    • Partners choosing a pair submission must contribute in similar measure and complete at least 80% of work on each problem together in real-time pair-programming style. Collaboration within a pair is otherwise unrestricted.

    • If it becomes necessary to split a pair, the partners must coordinate with the instructor to document what work was completed together.

In general, common sense applies. If you are unsure of the boundaries of acceptable collaboration or use of reference material, please ask me = Lyn. In this case, it is far better to ask permission than to seek forgiveness!

Grading

Grading Feedback

You will submit assigments via Google Docs (for problem writeups) and a drop folder (for executable code). The graders and I will provide feedback on your work (including numerical grades) using the GoogleDocs comment feature, so make sure that this feature is enabled.

The graders and I will make every efford to provide feedback on your work in a timely fashion, but the compressed nature of the semester makes this challenging.

An assignment is considered graded when I post a comment containing a numerical score for all parts at the top of the assignment.

Sometimes, my grading comments on a pset may indicate that you can redo a problem or a part of a problem. If you redo the problem, please email me when you modify your Google Doc with the revised solution so that I know to regrade it.

Course Grade

Your course grade will be determined by the maximum of the two following weightings:

  • 60% regular (non-solo) problems score and 40% solo problems score
  • 40% regular (non-solo) problems score and 60% solo problems score

The score in each category will be determined as a percentage of points earned out of possible points.

Any points earned from extra credit problems will be added to the points earned in the regular (non-solo) problems category. This makes it possible for the percentage in this category to exceed 100%.

Based on the above weighting, grades will be allocated according to the following boundaries

  • 95%: A
  • 90%: A-
  • 86.67%: B+
  • 83.33%: B
  • 80%: B-
  • 76.67%: C+
  • 73.33%: C
  • 70%: C-
  • 60%: D
  • less than 60%: F

I give these details just to tell how I grade, not to foster a preoccupation about grades. I encourage students to think of grades like Monopoly money; sure, it’s nice to get lots of money in a game of Monopoly, but it doesn’t have a big impact on the rest of your life. Focus on learning rather than grades.

This course will comply with the Wellesley College grading policy.

Credit/Non

In normal times, I strongly advise students against taking courses credit/non.

But these are not normal times!

To address the unusual stress for students due to the pandemic, compressed terms, and remote learning, Academic Council has voted that during the two terms of this Fall semester, students may change to credit/non status up to 5pm on the last day of class.

This means that there is no strong motivation to declare credit/non until near the end of the semester.

Some things to think about with regard to credit/non:

  • If there’s no question whether you’re going to pass the course, then taking the course credit/non is an option that takes away the pressure of focusing on a particular grade. Usually the credit/non decision must be made early in the semester, but due the extraordinary nature of this semester, Academic Council voted to extend the credit/non choice deadline until 5pm on the last day of classes = Fri Dec. 11.

  • If there’s a question of whether you will pass the course (with a grade of D = course score of 60), credit/non is a bad idea. Why? In order to get credit in a credit/non course, you must get a C grade (73.33 course score or higher), which is significantly higher than the D grade (60 course score or higher) required to pass the course. In the past, many students who have taken a CS course credit/non do not get a C grade and either need to retake the course or need to take an incomplete in the course and earn more points before the beginning of the next semester. For seniors, this can delay the awarding of a diploma. Because many credit/non students who do not get credit by the end of the course would be able to get a D, they tend to regret their decision to take the course credit/non. A motto to remember in this regard is “D is for Diploma”.

I will be happy to discuss the credit/non option with any student considering it.

Incompletes

Understandably, in this crazy compressed term, some of you may simply run out of time/energy to complete this course in the way you would like. In this case, an option is to take an incomplete. In this option, you have until Jan 18 to submit any missing work from the course.

There is no shame in taking an incomplete, but it does mean that you are putting off work now that you will have to do later. On the other hand, you may have more time in late December/early January than you do during the course to devote to the course materials.

Another aspect of taking an incomplete is that an “I” mark will appear next to your final grade indicating that it was the result of finishing an incomplete course. If you have a medical (or other major) reason for taking an incomplete, you can have a discussion with your Class Dean and request an excused incomplete, in which case the “I” mark will not appear.

There are typically several students in this class who take an incomplete, so you are unlikely to be alone. There may even be options for working with other such students on psets that you still want to finish.

If you are considering taking an incomplete, you must have a conversation with me about this option.

Disabilities and Accommodations

Thanks to Ada Lerner for some of this wording.

My job is to help each and every one of you learn, and part of that is making accommodations for any disabilities you might have. Please feel free to speak with me about concerns or suggestions about how I can make the course more accessible to you. I will never judge you or your disabilities, and I will keep the details of our conversations confidential. If you prefer, you may instead use my anonymous email form (the required passphrase can be found near the top of the schedule). Though you are welcome to share any details that will help me assist in your learning, you are never required to share any private details of your life with me.

If you have a disability or condition, either long-term or temporary, and need reasonable academic adjustments in this course, it is also strongly recommended that you contact Accessibility and Disability Resources (ADR) to get a letter outlining your accommodation needs, and submit that letter to me. You should request accommodations as early as possible in the semester, or before the semester begins, since some situations can require significant time for review and accommodation design. If you need immediate accommodations, please arrange to meet 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.

Accessibility and Disability Resources can be reached at accessibility@wellesley.edu, at 781-283-2434, by scheduling an appointment online at their website www.Wellesley.edu/adr, or by visiting their offices on the 3rd floor of Clapp Library, rooms 316 and 315.

Faculty Responsibilities on Disclosures of 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 let me know. 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 supports, 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.

Acknowledgments

This course makes extensive use of materials from previous semesters of CS251 at Wellesley taught by Ben Wood and Randy Shull (some of which themselves were influenced by earlier versions of CS251 taught by me). In some parts, it also draws (with permission) on material developed by Dan Grossman at the University of Washington and Steve Freund at Williams College.