General Information & FAQ
For most questions: post on Piazza.
Visit office hours and talk to a TA or instructor.
Visit lab hours and talk to an LA.
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.
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.
Use “Report a Problem” in the bottom corner of the exercise. It’s easier than putting a screenshot on Piazza, and the tutor automatically includes extra information in your bug report that helps the staff zero in on what might have gone wrong.
- 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
understanding of general programming-language concepts such as static typing, exceptions, access control, interfaces, and equality, and ability to use Java as a particular example language with those concepts
No. 6.009 is a required prerequisite, and exceptions are made only in extraordinary circumstances.
No. Exceptions are made only in extraordinary circumstances.
We believe everybody entering 6.031 with the prerequisites has the potential to succeed. As with all learning, if the concepts and skills in 6.031 are new to you, mastering them will require hard work.
6.031 requires basic programming fluency provided by 6.0001 and 6.009. If you have less previous programming experience, you may need to work harder in 6.031. For many students with less experience, learning Java is the biggest challenge. Consider taking another class (e.g. 6.178 during IAP) or studying on your own (e.g. Head First Java) before taking 6.031.
Class meetings. There are three 90-minute class meetings each week on Monday, Wednesday, and 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.
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.
Practice and feedback are key to learning, and 6.031 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.
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.031.
You are automatically excused from up to five classes. The grade for the missed nanoquiz(zes) will be recorded as 0, but the lowest 5 grades are dropped. You can also make up any nanoquizzes for partial 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. You can compensate by doing an excellent job of participating during other classes.
I was or will be absent from class for a multi-day medical reason, mental health reason, or religious holiday, what can I do?
If you haven’t already visited S3, go there to get help with all of your classes, not just 6.031. Ask your S3 dean to get in touch with the 6.031 instructors.
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!
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.
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 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
Reading exercises are graded only based on whether you have completed them, not whether your answers were correct. The reading exercises help you check your understanding and practice for the in-class nanoquiz, so take them seriously. Merely reading something is not as effective for learning as first reading and then testing yourself on what you read.
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
No. However, reading exercises are often based on (or copied from) past nanoquiz questions.
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 two submissions, alpha and beta. The alpha submission will be graded and will be subject to code review. The beta submission is due a few days after you receive feedback on alpha. You will be expected to iterate on your design and implementation, fix any failed test cases, and revise your code based on code review feedback.
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 either the alpha deadline or 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 Git repository on Athena 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.
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.
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…
As described above, only extreme circumstances will justify a request for extensions beyond the usual slack days.
You cannot make up missed code reviews. You can recover participation credit by doing excellent code reviews on future problem sets.
Correctness is one of the central ideas of 6.031, 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.
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.
The overall grade for a problem set will roughly be weighted as 40% from alpha and 60% from beta.
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.
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 beta grades are released on a previous problem set, you can use the alpha feedback to improve your work on the next problem set.
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.
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 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.
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.
Yes, in the archive of past quizzes.
This topic has its own page: collaboration and public sharing.
- Quizzes: 30%. Nanoquizzes are worth 10% total, and each comprehensive quiz is worth 10%.
- Problem sets: 49%. PS0 is worth 5%, and PS1-PS4 are each worth 11%.
- Project: 11%.
- 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 and participation 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.
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.031 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.031 where we ask you not to post on Piazza, and not to email or talk to a TA. 6.031 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.
Answering questions on Piazza is a great, lightweight way to help your classmates.
If you’re doing well in 6.031, 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.