6.102 — Software Construction
Spring 2024

General Information & FAQ

How can I get help in 6.102? Who should I ask?

  1. Before you ask: search the 6.102 course page or the web.

    We’ve tried to make the course documents as comprehensive as possible. Several FAQ questions below describe how to ask for help with specific problems.

  2. For most questions: post privately on Piazza.
    How to use Piazza in 6.102 has tips on how to do it and what to expect. Posts on Piazza are private, seen only by 6.102 staff members.

    Here are situations where you should not use Piazza:

    • If your problem is confidential or involves S3, email 6.102-personal@mit.edu. Only a few staff members (instructors and a few senior TAs) see messages sent to this address.

    • If you think there is a bug in a Praxis Tutor exercise: use the Report a Problem link in the Tutor itself, because it provides us with more information to locate the exercise and understand the bug.

    • If you are tempted to attach code to your email to get help with fixing it, or to submit your problem set: please do not post code on Piazza. Debugging on Piazza is not feasible. Instead, come to lab hours and get help in person. Don’t try to submit your problem set on Piazza or by email, either. Problem set code must be committed and pushed to Git in order to be handed in.

    • If you have a grading problem: see below.

  3. Visit lab hours and talk to a LA or TA, or visit instructor office hours.

  4. If you need more help than the staff can provide, HKN Tutoring provides free one-on-one tutoring for hundreds of Course 6 students each semester.

Should I directly email an instructor, TA, or other staff?

No. Please ask for help as described above.

How do I post privately on Piazza? Should I restrict my private Piazza post to just certain staff?

Please make private Piazza posts by selecting Post to: instructors and entering “Instructors” to make the post visible to all staff. (Piazza uses “Instructors” to refer to all staff members: TAs, LAs, as well as the two instructors of the course.) Sending to all staff ensures that the right staff member will be able to see your post, and also that your post won’t fall through the cracks.

Do not direct your post only to specific staff members by name, because Piazza does not specially notify them. Your post will be buried among many Piazza questions for your intended recipients, and will be completely invisible to all other staff (particularly to the staff who are making sure questions get answered), so your question may get a delayed answer or no answer at all. To avoid this, always include “Instructors” in your recipients.

What will happen when I post on Piazza?

Expect a conversation. We treat a question over email like a question in office hours, which means we’ll want to have a conversation with you. So don’t be surprised if the staff asks you questions in return, to help you think through the problem and apply what you’ve learned. Much of this course is learning how to interpret specifications on your own, which means in most cases, as much as we may want to, we can’t actually give you the answer, since it is your job in this class to read carefully and ensure correctness. Directly interpreting the spec for you would defeat that purpose, but we can help build your interpretation skills through these guiding conversations.

How do I get a specific hyperlink to something I want to ask a question about?

When you ask a question, please include a URL pointing to what you’re asking about, as specifically as possible. It makes it easier to write your question and easier for the staff to understand what you’re asking. Never take a screenshot if you can provide a link!

Here’s how to get a useful hyperlink for various places in the 6.102 web:

  • Course website (including readings, reading exercises, problem set handouts, course policy). Every paragraph on the course website is linkable. Move your mouse cursor into the left margin until an octothorpe # link appears next to what you want to refer to. Click on that #, and your browser’s address bar now has the URL you want.

  • Didit, Omnivore, Caesar, GitHub, Constellation. Links to your pages on these systems are visible to the course staff, so if you have a question about something you see on one of these systems, please include the URL of the page where you’re seeing it. The staff should be able to see it too.

  • Problem set specs. If you have a question about a method or interface spec, point to its TypeDoc API documentation (for example, here is drawSquare() from ps0). You can find links to the TypeDoc API pages in the problem set handout.

  • VS Code, Praxis Tutor, Git. These tools don’t have hyperlinks, unfortunately. Report Tutor problems as described below rather than emailing. For VS Code and Git, try to copy-and-paste the text of error messages into your question, rather than using a screenshot.

How do I report a Praxis Tutor exercise that seems buggy?

Use “Report a Problem” in the bottom corner of the exercise. It’s easier than emailing us, and the tutor automatically includes extra information in your bug report that helps the staff zero in on what might have gone wrong.


The prime objective of 6.102 is learning how to write code that is:

  • safe from bugs (SFB),
  • easy to understand (ETU), and
  • ready for change (RFC).

Every idea and skill in the course is calibrated against those goals. Specific objectives include:

  • an understanding of key software engineering ideas, including interfaces, representation independence, specifications, invariants, abstract data types, design patterns, and unit testing

  • the ability to apply these ideas to design, implement, and test a small-to-medium scale software system (up to a few thousand lines of code, multiple modules), by:

    • defining abstract data types
    • writing specifications for operations
    • choosing concrete representations and defining abstraction functions and representation invariants
    • writing a comprehensive suite of unit tests
    • creating regular expressions and grammars for parsing input
    • creating client-server programs that adhere to a given protocol
    • designing a concurrent program using concurrent language features and library types
  • an understanding of general programming-language concepts such as static typing, exceptions, access control, interfaces, and equality, and ability to use TypeScript as a particular example language with those concepts

  • the ability to use modern programming tools (e.g. VS Code, Git) and modern programming technologies (e.g. test frameworks, regular expressions, promises, networking, graphical user interfaces)

  • experience working in a project team

Is it possible to take 6.102 without the 6.101 prerequisite?

No. 6.101 is a required prerequisite, and exceptions are made only in extraordinary circumstances. Prior programming experience or completing other programming courses are not extraordinary circumstances.

Can I take 6.102 as a listener if I don’t have the prerequisite?

Unfortunately the class is too large to accommodate listeners. We have to make sure there are enough seats in the room for registered students. But course materials are posted publicly on this web site, including the starting code for problem sets.

Is it possible to join the class after the first day?

No. Exceptions are made only in extraordinary circumstances.

Is 6.102 a hard class? Can I succeed in 6.102?

We believe everybody entering 6.102 with the prerequisites has the potential to succeed. As with all learning, if the concepts and skills in 6.102 are new to you, mastering them will require hard work.

6.102 requires basic programming fluency provided by 6.100 [formerly 6.0001] and 6.101 [formerly 6.009]. If you have less previous programming experience, you may need to work harder in 6.102. For many students with less experience, learning a second programming language (beyond Python) is the biggest challenge, so consider taking an IAP programming class in a language other than Python, or studying on your own, before taking 6.102.

Classes, readings, and nanoquizzes

Class meetings. There are two 90-minute class meetings each week on Tuesday and Thursday. You are expected to attend class and to participate actively in exercises and discussions. The course calendar shows all the dates of the class meetings.

Laptops required. Classes will include programming exercises that require a laptop set up with the course tools. If you don’t have your own laptop and you need to borrow one, IS&T has a short-term laptop loaner program that will lend you one. Alternatively, EECS has a loaner program (with very limited computers) that can be extended throughout a semester. Email Dr. Amanda Beyer-Purvis for more information.

Readings. Most classes will have a reading that you must read, with online exercises that you should do. Readings and exercises are generally due by 10pm the night before class. The online exercises are designed to be feedback about your understanding and practice for the in-class nanoquizzes. They are graded based on effort, not correctness. These readings constitute the course textbook; there is no textbook to buy.

Nanoquizzes. Every class meeting will begin with a short quiz on the required reading for the class, plus recent class meetings. Nanoquizzes are closed-book and closed-notes, with a 3-minute time limit. The nanoquiz is part of the grade for each class, along with in-class programming exercises, clicker questions, and other activities.

In-class exercises. Classtime will include programming exercises, done in pairs. You must collaborate using Constellation to receive credit for programming exercises. If you encounter technical issues, ask a TA for help. If necessary, visit lab hours or post on Piazza to resolve the issue for next time. You are not expected to complete unfinished exercises after class, but TAs and LAs will be happy to help you review or finish them.

Classwork grading. Each class meeting has a classwork grade out of 10 points, which combines exercises before class (such as reading questions), a nanoquiz at the start of class, and exercises during class. Nanoquizzes are graded like quizzes. The nanoquiz is normally worth 1/3 to 2/3 of the classwork grade, but sometimes less than 1/3. The exact weight will vary from class to class, depending on the number and kind of other activities. Before-class work is graded based on effort, not whether the answers are correct. In-class work is graded based on whether you put effort into the exercise and make sufficient progress, even if you don’t complete it.

All classwork results are found on Omnivore (see link on the course homepage). This includes both before-class work (reading exercises, Praxis Tutor, GitStream) and in-class work (nanoquizzes, clicker questions, in-class programming). Some results need more time than others to reach Omnivore, so if you don’t see something immediately, please be patient.

Automatic makeups. The lowest 3 classwork grades are automatically dropped, so you are automatically excused from up to three classes.

In addition, the lower bound for your classwork grade for each class is your grade on the next quiz covering that material (scaled to 10 points). Classes 1-10 are covered by Quiz 1, and classes 11-19 are covered by Quiz 2. If you miss a class, or get a low classwork grade for some reason, your classwork grade for that class will never be lower than the corresponding quiz score (scaled to 10 points).

This means that you will automatically make up any missed or low classwork grade when you take the corresponding quiz. Your grade on the quiz (scaled to 10 points) becomes your classwork grade for that class. You do not have to tell us which classes you want to make up this way. It happens automatically for every class whose classwork grade ends up being lower than the corresponding quiz’s scaled grade.

Why is 6.102 structured the way it is?

Practice and feedback are key to learning, and 6.102 is structured to provide as many opportunities for practice and feedback as possible. That means we don’t want to spend class time on lectures, we want to spend it on exercises to practice the concepts and skills of building software.

Citations: Wieman et al., Course Transformation Guide · Deslauriers et al., Improved Learning in a Large-Enrollment Physics Class

Why is attendance in class required?

Class meetings are all about practice and feedback. The individual, pair, and small group questions, exercises, and coding problems we work on in class, and the discussions and feedback led by instructors, are a required component of 6.102.

Class is like swim/judo/math team practice: you don’t get good unless you show up, and practicing with others is a necessary complement to practicing alone.

I was or will be absent from class, or couldn’t participate because of a technical issue, what can I do?

You will automatically make up the missed class or low classwork grade with your grade on the corresponding quiz.

This makeup policy applies to all reasons for missing class or getting a low classwork grade.

You can also report problems that interfered with your ability to participate in class.

Are lectures recorded?

6.102 doesn’t have lectures. All new conceptual material required to do the work in the class is found in the interactive readings on this website. No new content is delivered through lecturing.

6.102 uses classtime for active learning, with exercises designed to be done in class with instructor guidance and staff feedback. The active-learning classtimes are not recorded, but slides and starting code are posted on this website afterward. If you miss a class and want to discuss what you missed, you can come to instructor office hours and talk to an instructor, or come to lab hours and talk to a TA.

Why are we sometimes asked to close laptops during class?

Your laptop is a necessary tool for in-class programming, but it also presents a huge opportunity for distraction. The price of that distraction is paid not only by you, but by all those around you who can see your screen. In one study linked below:

  • For note-takers with laptops, multi-tasking led to a 11% drop in comprehension test scores.
  • For note-takers without laptops, merely having a laptop multi-tasker in their field of view led to a 17% drop in comprehension test scores!

If you want to use a smartphone in your lap, so that the screen is not visible and not distracting to others, we have no objection, but you’ll still be hurting yourself.

Citations: Sana et al., Laptop multitasking hinders classroom learning for both users and nearby peers · Mueller and Oppenheimer, The Pen Is Mightier Than the Keyboard

Why do I need to read the readings and complete the reading exercises before coming to class?

Reading the material before class prepares you to spend class time practicing the concepts and skills you’re learning. Reading in advance gives you time to think and ask questions, and repeated exposure to material spaced out over time improves learning.

See: Spacing effect

How can I see my nanoquiz answers?

Nanoquiz questions and submitted answers are not released, but if you have questions about a nanoquiz, please visit instructor office hours.

Why do we have nanoquizzes on topics before we practice them in class?

Nanoquizzes assess whether you did the reading and practiced with the reading exercises before coming to class, and they provide feedback to you on your comprehension. Nanoquizzes are themselves part of the practice we do in class: recalling information from the readings benefits learning more than just re-reading or re-hearing it.

See: Testing effect

Are past nanoquizzes available?

No. However, reading exercises are often based on (or copied from) past nanoquiz questions.

How can I minimize technical issues in class?

  1. Arrive on-time or early with a fully charged laptop
  2. As soon as you arrive, open the nanoquiz and in-class collaboration code links written on the board to authenticate to the websites before you need to use them.
    • If you have issues with access, try these troubleshooting tips or raise your hand if none of them are working
    • Turn on cookies on your browser and check “Remember me for 30 days” to reduce the chance you will have to do Duo two-factor authentication in class
  3. As soon as step 2 is done, start looking for a partner - ask people around you and/or raise your hand to get help finding someone
  4. If you have a technical issue you can’t resolve, raise your hand to get help - the sooner you tell us, the more likely we can help
  5. If all else fails, see here for how to report an issue

Note that wifi in 26-100 is a finite resource, so please turn off wifi on your phone (and ask your friends to do the same) to minimize the number of connections.

Problem sets, iteration, and slack days

Problem sets. To consolidate your understanding of the ideas from class, you will do five problem sets, PS0 to PS4, involving both design and implementation work. Problem sets will be done individually. More info: collaboration on problem sets.

Code review. As part of each problem set, there will be a code-reviewing period when other students and staff will give you feedback about the code you submitted using a web-based system. You will be expected to participate in this process by reviewing some of your classmates’ code. More details about objectives and guidelines for the code reviewing process: code reviewing.

Iteration. Each problem set will have an initial submission (called alpha), a code review period, and then a resubmission (beta). The alpha submission will be graded by staff and code-reviewed by other students. The beta submission is typically due a few weeks after you receive feedback on alpha, and will only be graded by staff. For the beta, you will be expected to iterate on your design and implementation, fix any failed test cases, and revise your code based on grading feedback and code review feedback. The course calendar has the schedule of alpha and beta deadlines for the problem sets.

The beta submission must address all the code reviews received by the alpha submission. More details here: how should I address my code reviews?

Since the beta submission happens after code review for the problem set, it’s understood that you’ve looked at other students’ written solutions and been inspired by other ways to solve the problems. You must be exceedingly scrupulous, therefore, in not using those written solutions during your revision. Both your original code and your revised code must be your own. Looking at other students’ answers to the problem set while you are revising your solution will be considered a violation of the collaboration policy.

Slack days. To give you some flexibility for periods of heavy workload, minor illness, absence from campus, and other unusual circumstances, you may request limited extensions on problem set deadlines, called slack days. Each slack day is a 24-hour extension on the deadline. You have a budget of 10 slack days for the entire semester, which you may apply to any combination of problem sets on the alpha deadline, the beta deadline, or both. You can use at most 2 slack days for a given deadline. After your deadline has passed, whatever has been pushed to your repository on github.mit.edu is what we will use for grading.

You must request your extension before the problem set is due by logging into the Caesar code-reviewing system and clicking on Request Extension. The system keeps track of your slack days and informs you how many you have left.

Slack days are atomic; you can’t chop them up into slack hours or minutes. If you choose to use a slack day because you’re struggling with an assignment, go to bed and sleep, and get help in the morning. Seriously, that’s why the smallest unit is a day.

Slack days apply only to individual problem sets, not to team projects.

If you have used up your slack days or exceeded the 2-day limit for a single deadline, you will need an instructor’s permission and support from an S3 dean for more extension, and your circumstances will have to be extreme to justify the special request.

Can I change my slack day request after I’ve made it?

You can increase your slack request before your current deadline passes, by visiting Caesar and clicking Change Extension. You can decrease your slack request only if your new deadline would still be in the future. See also: I forgot to push my work or make a slack day request…

I need an extension but I used up my slack days, what can I do?

As described above, only extreme circumstances will justify a request for extensions beyond the usual slack days.

If you haven’t already contacted S3, talk to them to get help with all of your classes, not just 6.102. Then email 6.102-personal@mit.edu to explain the situation, and cc: your S3 dean for support.

I forgot to push my work or make a slack day request before the deadline, what can I do?

  1. Push your work immediately to maximize the likelihood it can be considered.
  2. If it was an alpha deadline, do not click the “start code reviewing” button in Caesar.
  3. On Caesar, look for the “help! I meant to request an extension” link. You may still be able to change your extension this way, if you didn’t wait too long.
  4. If Caesar can’t help, post on Piazza and explain the circumstances.

I forgot to do code review or missed the code review deadline, what can I do?

You cannot make up missed code reviews. You can recover code-review-participation credit by doing excellent code reviews on future problem sets.

I failed many auto-grader tests because of a small mistake, can my problem set be re-graded?

Correctness is one of the central ideas of 6.102, and it’s your responsibility. On later problem sets in the course, you will have more and more design freedom, which means we can test your individual components less and less: we can only test the required specifications. You must use your own careful design and thorough testing to achieve correctness.

This sort of issue is one of the reasons we have iterative submissions: your beta submission is the opportunity to fix problems with your alpha and recover partial credit.

I don’t think my problem set was auto-graded fairly or correctly, what can I do?

If your submission did not compile and pass the public tests on Didit, we are not likely to reconsider the grade. It’s your responsibility to ensure that your submission passes those tests.

  1. Investigate the problem by visiting lab hours, since debugging on Piazza is infeasible.
  2. If there was an issue beyond your control, post on Piazza and explain the circumstances.
  3. Visit instructor office hours.

How is the overall grade for a problem set determined?

The overall grade for a problem set will be weighted as roughly half from alpha and roughly half from beta, but it may vary from one problem set to another.

Grades on both iterations will be determined both by automated tests and by graders reading the code. One part of the beta grade is fixing your code in response to code reviews.

The grading breakdown will vary from problem set to problem set (for example, depending on how much can be autograded and how much requires human eyes), and the relative weights of components of automated and manual grading can change from alpha to beta. Each problem set’s breakdown will be announced when grades are released.

When will grades be released for a problem set?

Grade reports for a problem set are released when they are ready. We grade as fast as we can.

Can I use slack days on assignments other than problem sets?


Projects and quizzes

Project. You will complete a group software development project at the end of the semester in a team of three students. Every team member is required to participate roughly equally in every activity (design, implementation, test, documentation), and we may ask for an accounting of what each team member did. A single grade will be assigned to all members of the team.

Project teams. Before the project, you will be able to request one or two teammates you would like to work with. If you don’t already know other students in 6.102 this semester, we hope that working together on in-class exercises will give you the opportunity to find potential project partners.

Team meetings. During the project, you and your project team will meet with your TA to discuss the work. Your TA will assign a grade based in part on these meetings. Team meetings will be scheduled during class time reserved for this purpose.

Quizzes. There will be two quizzes. Quiz 1 is shown on the course calendar, and Quiz 2 will be held during the final exam period, so its date and time will be shown on the final exam schedule.

Each quiz will be comprehensive, drawing on any topics covered up to that point in the course, so e.g. Quiz 2 may include topics that were already covered on Quiz 1.

Quiz 1 will be 80 minutes long, and Quiz 2 will be 120 minutes long.

Are quizzes closed-book?

Yes, but you may bring a single 8.5×11” double-sided page of notes, which must be handwritten directly on the page (not computer-printed or photocopied), must be readable without magnification, and must be created by you. Since the process of creating a crib sheet is most of its benefit, you may not share these notes or use someone else’s.

Are past quizzes available?

Yes, in the archive of past quizzes.

Collaboration and public sharing

This topic has its own page: collaboration and public sharing.


The relative contributions of the various elements to your grade are:

  • Problem sets: 45%. PS0 is worth 5%, and PS1-PS4 are each worth 10%.
  • Code review: 5%. Judged by regular participation in code review and providing substantive, useful comments.
  • Quizzes: 30%. Quiz 1 is worth 12%, and Quiz 2 (scheduled during the final exam period) is worth 18%.
  • Project: 10%.
  • Classwork: 10%. Determined by grade on nanoquizzes and effort on reading exercises and in-class exercises.

Letter grades are determined at the end of the semester. The default cutoffs are: a final average of 90 and above is an A, 80 and above is a B, 70 and above is a C. These boundaries may be adjusted downwards if necessary because of the difficulty of the assignments or quizzes, but the boundaries will never be adjusted upwards, so a final average of 90 is guaranteed to be an A. The boundary adjustment is done heuristically, and there are no grade quotas, no grade targets, and no centering of the class on a particular grade boundary.

Every student is considered individually in the final grading meeting, judging from their entire performance in the course. A single bad mark in an otherwise consistent record will often be discounted.

What are the grade cutoffs this semester? What letter grade do I have?

Letter grade cutoffs are determined only in the final grading meeting, and they are assigned only after individual consideration as described above.

I have a problem with my grade on a problem set or quiz or other 6.102 assignment, or concerns about my grade in the course, what should I do?

If the problem is an objective grader error on a problem set, like adding points incorrectly or overlooking something that was clear in your answer, then you can post on Piazza to ask for the correction. Include a hyperlink to the grade report you are asking about. Note that any issue that requires explanation or clarification or advocacy, beyond just pointing to the mistake, is not an objective grading error.

For other grading issues, including all quizzes, this is a rare case in 6.102 where we ask you not to email or post on Piazza. These forums are handled by TAs and LAs who are trying to focus on helping people learn, rather than being grade arbiters.

Instead, please bring your grading questions to an instructor’s office hours, which are shown on the course calendar.

Sharing your knowledge

How can I help other people in 6.102?

If you’re doing well in 6.102, you can become a paid tutor for a classmate, even while you’re still taking the class. HKN Tutoring provides one-on-one tutoring for hundreds of Course 6 students each semester and is another resource for students looking for extra help.

Sign up as a tutor or contact hkn-tutoring@mit.edu with questions.

After you’ve finished 6.102 and done well, please think about applying to work as an LA. Becoming an LA first is the best path to joining the staff later as an undergraduate TA or MEng TA.