6.005 — Software Construction
Fall 2016

General Information & FAQ

How can I get help in 6.005? Who should I ask?#

  1. Before you ask: search the 6.005 course page, the Java API docs, Piazza, 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 on Piazza.

    For general questions, post publicly so others can benefit. For sensitive issues, post privately. Do not post code. Code cannot be shared publicly, and debugging over Piazza is not feasible.

  3. Visit office hours and talk to a TA or instructor.

  4. Visit lab hours and talk to a LA.

  5. 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 email instructors, TAs, or other staff?#

No. Please post on Piazza, privately if needed.

How do I post privately? 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. This ensures the right staff member will see your post.


See the 6.005 Curricular Goals Map giving a dynamic graphical display connecting the class outcomes with the outcomes of other subjects in the Course 6 curriculum.

Is it possible to take 6.005 without the 6.01 or 6.009 prerequisite?#

No. 6.01 is a required prerequisite, covering not only Python programming but elements of functional programming, state machines, and of language interpretation and design. Exceptions are made only in extraordinary circumstances. 6.009 (or 6.S04) is accepted as a replacement for 6.01.

What is the difference between 6.031 and 6.005?#

6.005 will be renamed to 6.031 in spring 2017. 6.031 will be very similar in content to 6.005 for the first few semesters it is offered. Both courses will focus on writing code that is safe from bugs, easy to understand, and ready for change; both courses will concentrate on static checking, specs, testing, and abstract data types; both courses will use Java, Eclipse, and Git. 6.031 will have more group project work than 6.005 did.

It does not make sense to take both courses, and you won’t be able to satisfy one Course 6 requirement with 6.005 and another requirement with 6.031. If you’ve already taken 6.005, you should not take 6.031, but instead take a more advanced software course like 6.170, 6.172, 6.035, 6.813, 6.814, or 6.816.

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

No. Exceptions are made only in extraordinary circumstances.

Is 6.005 a hard class? Can I succeed in 6.005?#

As with all learning, if the concepts and skills in 6.005 are new to you, mastering them will require hard work.

6.005 requires basic programming fluency: if you have less previous programming experience, you will need to work harder in 6.005. For many students with less experience, learning Java is the biggest challenge. Consider taking another class (e.g. 6.178) or studying on your own (e.g. Head First Java) before taking 6.005.

Classes, readings, and nanoquizzes

Class meetings. There are two 90-minute class meetings each week on Monday and Wednesday and one 1-hour class meeting each week on Friday. You are expected to attend all class meetings and to participate actively in exercises and discussions.

Laptops required. Classes will include multiple-choice questions and programming exercises that require a laptop. If you don’t have your own laptop and you need to borrow one, IS&T has a laptop loaner program that will lend you one.

Readings. Most classes will have a reading that you must read before coming to class, with online exercises that you should do and submit by 10pm the night before the class. The online exercises are designed to be practice for the in-class nanoquizzes, but are not graded for correctness, only for completion. There is no course textbook.

Optional videos. Most of the readings include linked videos. The videos are simply an instructor reading the text aloud, highlighting key ideas, and sometimes explaining code. Use the videos if you find it helpful to listen or watch alongside your reading. The videos were originally recorded for the MITx version of 6.005 and may differ in small ways from this semester’s reading text.

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. There will be approximately 25 nanoquizzes. Your lowest 5 nanoquiz grades will be automatically dropped, and you can make up missed nanoquizzes or low grades. More info: details of nanoquiz grading and makeup.

Why is 6.005 structured the way it is?#

Practice and feedback are key to learning, and 6.005 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.005.

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 for one of the following, what can I do?#

  • Athletic event
  • Interview
  • Travel
  • Brief sickness or medical problem

You are automatically excused from up to five classes, including their nanoquizzes. You will receive a zero for the missed nanoquiz(zes), but the lowest 5 grades are dropped. You can also make up any nanoquizzes for half credit by following the usual procedure for nanoquiz makeups.

Similarly, the in-class exercises and reading exercises for up to five missed classes will be automatically excused. Although there is no way to make up additional exercises, they contribute only to your class participation grade, and you can do an excellent job in other aspects of class participation (like Piazza) to compensate.

I was or will be absent from class for a multi-day medical reason, mental health reason, or religious holiday, what can I do?#

  1. Post privately on Piazza and explain the circumstances.

  2. If you haven’t already visited S3, go there to get help with all of your classes, not just 6.005. Ask your S3 dean to get in touch with the 6.005 instructors.

In some situations, you will be able to make up nanoquizzes for full credit, but you will not be able to make up in-class exercises, as explained in the previous answer.

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

How is participation in class graded?#

In general, participation in class is graded based on whether you attempted the questions, exercises, coding problems, etc., not on correctness.

Programming exercises are graded based on whether you’ve attempted the exercise and made some progress, even if you don’t complete it. You are not expected to complete unfinished exercises after class, but TAs and LAs will be happy to help you review or finish them.

If you collaborate using Eclipseonut and you & your partner see one another’s contributions, your work has been recorded. If you encounter technical issues, you can use Git to add-commit-push your work to Athena (visit lab or post on Piazza to resolve the issue for next time).

Why do I need to read the readings and complete the reading exercises the night 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 are reading exercises graded?#

Reading exercises are graded only based on whether you have completed them, not whether your answers were correct.

Why does the class 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.

Problem sets, beta & final, 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 2-day 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.

Beta and final submission. Each problem set will have beta and final submission. The beta submission will be graded by an automated tester, and will be subject to code review. The final submission is due a week later. You will be expected to fix any failed test cases and revise your code based on code review feedback.

The final submission must address all the code reviews received by the beta submission – all the human comments plus all the automated checkstyle comments that are marked #important. You can address a code review either by changing the code to reflect the review or by including a source code comment in your code that explains why the code wasn’t changed. If code reviews are unclear, you can discuss them with the reviewers by replying on the Caesar system, but you still must edit your own code in reaction to the review. A grader will check the submission and deduct points if it hasn’t addressed the code reviews.

Since the final submission inevitably 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 either the beta deadline or final deadline or both. You can use at most 2 slack days for a given deadline; after 2 days, whatever is in your git repository 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.

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.

  1. Post privately on Piazza and explain the circumstances.
  2. If you haven’t already visited S3, go there to get help with all of your classes, not just 6.005. Ask your S3 dean to get in touch with the 6.005 instructors.

I forgot to push my work before the deadline, what can I do?#

  1. Push your work immediately to maximize the likelihood it can be considered.
  2. Post privately on Piazza and explain the circumstances.

I missed the deadline to request slack days, what can I do?#

  1. Post privately on Piazza and explain the circumstances.
  2. Continue to push your work to maximize the likelihood it can be considered.
  3. Do not open any code reviewing tasks in Caesar; if you look at other student’s code you will not get your extension.

If I took slack days on the beta deadline, when should I do code reviewing, and what is my code review deadline?#

You can start reviewing code the morning after your (extended) beta deadline. A TA has to load your code into Caesar before you’ll get any assignments to review other people’s code. Your code review is due by 10 pm that same day, because your classmates are depending on getting your reviews. If you took 1 slack day, that means your code review deadline is the same as the official deadline for the people who took no slack. If you took 2 slack days, then your code review deadline is 24 hours after the official deadline.

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 participation credit by doing excellent code reviews on future problem sets and making excellent contributions on Piazza.

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.005, 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 beta and final submissions: your final submission is the opportunity to fix problems with your beta 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 office hours or lab hours, since debugging on Piazza is infeasible.
  2. If there was an issue, post privately 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 typically be computed as follows:

overall grade = 40% × beta-autograde + 45% × final-autograde + 15% × manual-grade

where beta-autograde and final-autograde are determined by automated tests, and manual-grade is determined by graders reading the code. One part of manual-grade is fixing code in response to code reviews.

The breakdown may vary by 5-10% from problem set to problem set, depending on how much of the problem set can be autograded and how much requires human eyes. Each problem set’s breakdown will be announced when final grades are released.

When will final grades be released for a problem set?#

Final grade reports for a problem set are released as quickly as possible, but it depends on the speed of manual grading. We grade as fast as we can. Even before final grades are released, you can use the feedback from beta reports and code reviewing to improve your work on the next problem set.

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. The project will be done in teams of three students. Each 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.

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 this meeting. Team meetings will usually be scheduled during class times that will be reserved for this purpose.

Quizzes. There will be two quizzes, on dates specified on the course calendar. 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.

Are quizzes closed-book?#

Yes, but you may bring a single 8.5×11” double-sided page of notes, readable without magnification, that was 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:

  • Quizzes: 30%. Nanoquizzes are worth 10% total, and each comprehensive quiz is worth 10%.
  • Problem sets: 50%. PS0 is worth 6%, and PS1-PS4 are each worth 11%.
  • Project: 10%.
  • Code review: 5%. Judged by regular participation in code review and providing substantive, useful comments.
  • Participation: 5%. Reflects your continuous participation in the course. Determined by completion of reading exercises, participation in class and in the online Piazza forum.

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.005 assignment, what should I do?#

If the problem is an objective grader error, like adding points incorrectly or overlooking something that was clear in your answer, then you can email the grader to ask for the correction, if the grader’s username is shown on the grade report. (It isn’t always shown.)

Otherwise, this is a rare case in 6.005 where we ask you not to post on Piazza, and not to email or talk to a TA. 6.005 TAs are not empowered to have discussions about grades, and Piazza is reserved for learning and problem solving. The point of this rule is so that TAs can focus on helping people learn, rather than being grade arbiters.

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

Sharing your knowledge

How can I help other people in 6.005?#

If you’re doing well in 6.005, 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. Tutors are paid $15/hour and have the opportunity to significantly help a fellow Course 6 student. Sign up as a tutor.