General Information & FAQ
For questions about Java Tutor exercises, use Report a Problem in the Tutor.
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. (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 a few 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.
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.
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. Here’s how to get a useful hyperlink for various places in the 6.031 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 Javadoc API page (for example, here is drawSquare() from ps0). You can find links to the Javadoc API pages in the problem set handout.
Eclipse, Java Tutor, Git. These tools don’t have hyperlinks, unfortunately. Report Java Tutor problems as described above rather than using Piazza. For Eclipse and Git, try to copy-and-paste the text of error messages into your Piazza question, rather than using a screenshot.
- 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 Java as a particular example language with those concepts
No. 6.009 is a required prerequisite, and exceptions are made only in extraordinary circumstances.
Yes. Listeners are more than welcome to join us in class, and have access to all the course materials, including problem sets. Listeners don’t participate in peer code reviews, don’t get manual grading by TAs, and don’t participate in the group project.
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, so consider taking another class (e.g. 6.178 during IAP) or studying on your own (e.g. 6.092 on OCW, Codecademy 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 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 effort. 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. The nanoquiz is part of the grade for each class, along with reading exercises, in-class programming exercises, clicker questions, and other activities.
The lowest 5 classwork grades are automatically dropped, so you are automatically excused from up to five classes. You can also make up missed or low classwork grades. More info: details of classwork 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 and in-class work will be recorded as 0, but the lowest 5 classwork grades are dropped. You can also make up classes for partial credit by following the procedure for makeups.
I was or will be absent from class for an extended (multi-day) period for a 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. Then email the 6.031 instructors to explain the situation, and cc: your S3 dean for support. In some situations, you will be able to make up the classes you missed for full credit.
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!
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
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 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.
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.
If you haven’t already visited S3, go there to get help with all of your classes, not just 6.031. Then email the 6.031 instructors to explain the situation, and cc: your S3 dean for support.
You cannot make up missed code reviews. You can recover code-review-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 be weighted as roughly half from alpha and roughly half from beta, but it may vary from one problem set to another.
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.
Yes, but you may bring a single 8.5×11” double-sided page of notes, which can be either handwritten or computer-printed but 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.
Yes, in the archive of past quizzes.
This topic has its own page: collaboration and public sharing.
- Quizzes: 26%. Quiz 1 is worth 13%, and Quiz 2 (scheduled during the final exam period) is worth 13%.
- Problem sets: 58%. PS0 is worth 6%, and PS1-PS4 are each worth 13%.
- Code review: 6%. Judged by regular participation in code review and providing substantive, useful comments.
- Classwork: 10%. Reflects your continuous participation in the course. Determined by effort on before-class reading exercises, grade on nanoquizzes, and effort on 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 make a private post on Piazza to ask for the correction. Direct your post both to the specific grader (if shown in the grade report; it isn’t always), and also to “Instructors” to make sure your question is visible to all staff. Include a hyperlink to the grade report you are asking about.
For other grading issues, 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.
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.