CS 251: Principles of Programming Languages

Instructor: Lyn Turbak
Tutors: Jannitta Yao, Funing Yang
Graders: Sophia Bussey, Jannitta Yao, Funing Yang, Lyn Turbak

Help hours via Zoom: see the help hours 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-t3-01-remote-sp21 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 T3 of Spring 2021, CS251 is being taught remotely.

  • There are synchronous class meetings: MTWRF 1:00–2:15 EST/EDT via Zoom (link in the course schedule). Classes will be held every weekday of Term T3 from Mon Feb 15 through Tue Mar 30. Students are expected to attend all synchronous sections except under extenuating circumstances. Please email Lyn if you cannot attend class.

    All regular synchronous class meetings will be video-recorded, and these recordings will be shared from the course schedule. Only the course students and staff and a few others have access to the course schedule. Do not share the video links on the course schedule with anyone else.

  • There are alternative synchronous class meetings: TR 9:00-10:30am EST/EDT via Zoom (link in the course schedule). These are special alternative 90-minute synchronous meetings for students living in Asia, for whome attending the regular weekday 1:00–2:15 EST/EDT sessions would be extremely inconvenient. Other students are welcome to attend these meetings, even on an irregular bassis, if for some reason they cannot attend the regular class meetings.

Flexibility and Feedback

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. In T3, I will be making numerous changes to my T2 version of CS251 to improve the course, but it is still a work-in-progress.

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 give anonymous feedback, you can either:

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. [Note: due to the shortened nature of the term, parallelism and concurrency will not be covered. I normally teach three classes per week in a regular 13-week term (39 classes), and a 32-class term requires omitting some topics and covering others in less depth.]

Distributions: MM - Mathematical Modeling and Problem Solving

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

CS251 Will No Longer be a Core CS Requirement Starting in Fall 2021

CS251 has long been one of the required core courses for a CS major, and remains such a requiremnt for students graduating in Spring 2021.

However, due to changes being made to increase flexibility in the CS curriculum, starting in Fall 2021, CS251 will no longer be required for a CS major. It is being removed as a requirement to free up a spot for an extra elective in the CS Major.

I (= Lyn) still think it’s a great idea for you to take CS251 as an elective, and hope to convince you of its relevance in the first few days of the course. I would be happy to discuss this change with you and whether CS251 is a good course for you to take.

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 asynchronous 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. I will strive to post all asynchronous materials at least a day in advance of lecture (and usually much further in advance). Consult the course schedule for all materials associated with a particular class day.

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.

Your understanding of the course material will be tested by solo assignments, on which you must work individually. See details below.

Expectations

Because of the unusual nature of the compressed 6.4-week course and the flipped classroom style, it is important for students to understand what is expected of them. If you think you will have issues meeting these expectations, please email me to have a conversation about this.

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

    This number is ballpark average. The actual numbers will depend on the particular student and the particular week.

  • You are expected to study all the lecture materials before each class session when they are made available far enough in advance for this to be practical. Otherwise, you should review them as soon as time permits.

  • Preparation for each synchronous session will typically take between one and two hours. The first few sessions cover a lot of ground and might take more time than this, but things will settle down after this. Depending on your schedule, you might prepare for a session during the previous afternoon or evening, or during the morning of the current session. When materials are posted several days in advance, you might want to review material beyond the next synchronous class session, but only if you are understanding it.

  • You are expected to attend every synchronous session, although exceptions are made for extenuating circumstances. If you cannot attend a particular session, please email me in advance.

    Since attending the regular weekdy 1:00-2:15pm EST/EDT synchronous sessions would be hardship to students living in certain parts of the world, particularly Asia, I have scheduled twice-weekly Tuesday/Thursday 9:00-10:30am synchrnous sessions for these students. These sessions will focus on the interactive exercises of the regular sessions. Other students may join these sessions if they find it helpful

  • Whenever you have questions about any course material, whether it is current material or from earlier in the course, please submit questions using the Anonymous Question Form. I will usually review such questions a few hours before each synchronous session, and may change my plans for class to address some of these questions. I will also strive to answer such questions within a day or two in the Answers to Questions Document.

  • There will be 7 problem sets in the course: the first six dueish on the Fridays of the first six weeks of the course, and the last one (shorter than the others) dueish on the last Wednesday of the last week of the course. (See the Lateness Policy discussion below for the meaning of “dueish”.) There will also be 6 solo assigments in the course that serve as a distributed take-home exam. Because of the large number of problems, you should expect to be working on a few CS251 problems almost every day of the term.

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

Lecture Slides, Class Exercises, and Videos

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

Since lecture slides and pre-recorded asyncronous videos are the main notes for the class, you are expected to study them carefully. You should review them before the associated synchrnous class session, and may want to review parts of them again after class.

Because students in previous semesters have found it useful, I will also record every synchronous class session, except when students are solving problems in breakout sessions. Perhaps the most important parts of the synchronous class recordings are when I discuss solutions to in-class exercises. In addition to the solution discussion in the synchronous videos, many solutions will appear in the Google Jamboards that we use to solve problems in class. (These will be linked from each lecture in which they’re used.) I will also often post solution slides for exercises that appear in the sildes.

Some notes:

  • The videos recorded for this class are intended only for the students taking CS251, along with the tutors and a few other colleagues. Although they are not “public” on YouTube, they are “unlisted”, which means that anyone with the link can view them. Do not share links of these videos with anyone not currently taking the class.

  • Some lecture material is best presented in an interactive style. For this material, I will not have pre-recorded asynchronous videos and will instead cover the slides in the synchronous session. As noted above, all synchronous sessions will be recorded, so you can review them later if you don’t understand something in class.

  • Watching the videos on a fast speed is one 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. Please submit all your questions using the Anonymous Question Form.

  • We will use Google Jamboard as a shared whiteboard to do interactive group problem solving in Zoom breakout rooms during many synchronous classes. Although not absolutely necessary, when using Google Jamboard it helps to be able to write/draw with more precision than possible with a usual mouse or trackpad. If you have a device that allows more fine-grained drawing control (such as a Wacom tablet, iPad, or other stylus-based device), it is recommended that you use this device in conjunction with Google Jamboard. Practice using Google Jamboard with your device before you try it in class.

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 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 Spring 2021 T3 semester, CS 251 will include 7 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;
  • written analyses of language designs, their motivating applications, and their suitability to new applications; and
  • written analyses of papers related to evaluating and designing programming languages.

Solo Problem Assignments

Additionally, there will be 6 solo problems assignments on which you must work individually and can receive no help from anyone else (including the instructor and tutors). Solo assignments cover material from previous problem sets that you have already submitted. They effectively serve as a mini-take home exam. You are strongly encouraged to carefully study solutions to the previous problem set before working on a solo assignment.

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 should not submit them with the problem set in which they are described. Instead, you should submit them in a separate Extra Credit Document, as described at the end of the CS251-S21-T3 Pset Submission Instructions.

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

In Spring 2021, 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, and such extra credit cannot raise the regular (non-solo) problem portion of your grade beyond 100%.

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 and (2) to record the members of your pset 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 simply 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 discuss other options.

Assignment Submission

All assignment submission will be electronic.

  • In PS0, you will follow the Setup instructions in the CS251-S21-T3 Pset Submission Instructions. 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 assignment 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 also submit the code to a drop folder on cs.wellesley.edu following instructions on individual assignments. When doing a pset with a partner, be sure to indicate in each of your List Docs whose tempest account contains submitted code.

Assignment Solutions

Pset solutions will be provided electronically, only 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, there will be 6 solo assignments that effectively serve as a distributed take-home exam throughout the term. This has the feature of spreading exam-like problems over the term 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 this reason, I use the term dueish with regard to assignment submission dates to emphasize that “it is recommended that you submit the assignment by this date, but there is built-in flexibility to submit it later”. However, there are important ground rules for late submission:

  • For any and all psets, you may take a no-questions-asked extension until **3 days after the posted deadline.** For example:

    • Regular psets are typically due at the end of a Friday, so you have until the end of the following Monday to submit the assignment, without needing to do anything else.

    Nevertheless, you should still try to complete as much of an assignment as you can by the posted dueish date. In particular, it’s a terrible idea to just start working on an assignment three days after the posted dueish date.

  • For any and all solo assignments, you may take a no-questions-asked extension until **7 days after the posted deadline.** For example:

    • Solo assignments are typically due at the end of a Wednesday, so you have until the end of the following Wednesday to submit the assignment, without needing to do anything else. This especially makes sense if you want to study the graded previous pset while working on the assignment.
  • If the extra days are not sufficient for you to complete the assignment, you (and your partner, if you have one) MUST email me about the delay. In your email. you should explain your realistic plan for completing the assignment. We will work together to make sure that plan is a reasonable and effective one that supports both your learning and your health and well-being.

  • 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. This is only sensible if there is not a significant dependency of the next assignment on the current one. For example, I may recommend delaying a solo assigment so that you can complete the next regular pset, especially if you are working with a partner.

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

A major downside of this policy is that, if you’re not careful, it can lead to an accumulation of late work that is impossible to complete by the end of the semester, which may result in an incomplete grade (see the section on Incompletes below). This is why it’s so important to frequently communicate with me about any delays longer than three days.

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 2021 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 2021 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 from the current or previous semesters of CS251, books, or online resources.
  • 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 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. The highly compressed nature of the term system semester makes this challenging, but we will strive to have your work graded within a week of submission.

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

In some cases where you have lost a significant number of points due to a misconception or some other issues, my grading comments on a pset may indicate that you can redo a problem or a part of a problem to earn more points. 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. Of course, you should not consult any solutions when redoing a problem.

Course Grade

Below I describe my current plan for determining course grades in Spring 2021. If I make any change to this plan, it will always be in the favor of the student. I.e., any change will give you a grade greater than or equal to the one described in the following plan.

As a default, your course grade will be determined by the following weighting:

  • 50% regular (non-solo) problems score
  • 50% 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 (up to a maximum of 50 points) will be added to the points earned in the regular (non-solo) problems category. However, the percentage for this category may not 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

The A grade threshold is set at 95% rather than 93.33% because (1) there is no A+ grade and (2) according to Wellesley College’s grading standard, “Grade A is given to students who meet with conspicuous excellence every demand which can fairly be made by the course.”. The 95% threshold better reflects this standard. Nevertheless, many students every semeseter are able to earn an A in this course.

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 term-based system, 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 = Tue Mar 30.

  • 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 Wed Sep 08 2021 to submit your incomplete work.

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 over the summe than you do during the Spring terms to devote to the course materials.

An incomplete in a course required for the CS Major is potentially problematic in the case of graduating students who are in their final semester, since it usually means the delay of their diploma until sometime in October. However, the fact that there is still a term T4 following T3 might provide some flexibility to complete the incomplete work before the end of T4. This possibility needs to be explored with a Class Dean.

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.

Seeking Help

Lots of help is available in this course!

  • Before seeking help, use standard searching/debuging strategies first to find an answer. If these don’t pay off in 15 minutes or so, then seek help.

  • A great reason to work on psets with a partner is that you can help each other.

  • You are encouraged to post questions to the Anonymous Question Form or the cs-251-t3-01-remote-sp21 Google group.

    However, never post your draft code solutions publicly. For code-specific questions, email me directly.

  • There will be frequent Zoom help hours held by me and the tutors(Jannitta, Funing). We’ll often post polls to find out which times are best. See the help hours calendar for the most up-to-date info.

  • I am almost always available at the end of class to answer questions

  • If posted drop-in times aren’t convenient, or you need extra times, email me to schedule Zoom help meetings

  • You can request a one-on-one tutor from the PLTC

  • Reminder: on solo problems, you can only seek clarifications (not help), and only from me.

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 at the bottom of the Key Info section of the course 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.