16.410 | Fall 2010 | Undergraduate

Principles of Autonomy and Decision Making


Course Policies

The following policies are similar to other programming intensive courses. The following policies are adapted from those posted for 6.001.


The programming assignments have been planned on the assumption that you will do the required reading and other preparation before you start programming. It is generally much more efficient to plan the design of a program before implementing, testing, debugging, and running that program, rather than trying to do the planning online. Students who have taken similar subjects in previous terms report that failing to prepare ahead for programming assignments generally ensures that the assignments will take much longer than necessary.

Collaborative Work

Most people learn more effectively when they study in small groups and cooperate in various other ways on homework. This can be particularly true in programming assignments, where working with a partner often helps to avoid careless errors. We are very much in favor of this kind of cooperation, so long as all participants actively involve themselves in all aspects of the work - do not just split up the assignment and have each team member do only a fraction.

We are structuring the work this term into two types: problem sets and, for 16.413 students, the final project. Please abide by the following guidelines with regard to these different types of work. Problem sets are designed to reinforce key concepts. These should be completed by each student individually, though seeking tutoring help from the staff is perfectly appropriate. The 16.413 project is designed to be a larger scale activity, in which group activity is often a key component. For these projects, we encourage you to work with one other person. When you turn in your project, you must identify with whom you worked. We expect, however, that you are involved in all aspects of the project. We will provide further guidelines regarding the 16.413 project later in the semester.

When you hand in any material with your name on it, we assume that you are certifying that this is your work and that you were involved in all aspects of it. You are expected to write your own solutions and your own code. Do not copy any material from another class member.

Here is an example scenario of how a good collaboration might work:

Both (all) of you sit down with pencil and paper and together plan how you’re going to solve things. You go together to a cluster and sit at adjacent machines. When one of you has a problem, the others look over your shoulder. You check after each problem to make sure that the others are all caught up. But in each case you write your own solution, seeking help from the others when you have difficulties. On the write-up, each of you lists the names of all of your collaborators.

Not listing the name of a collaborator will be deemed cheating. Similarly, remember that copying another person’s work and representing it as one’s own work is a serious academic offense and will be treated as such.

To summarize, we strongly encourage you to work as a group. It’s a very effective way of catching conceptual and other errors, and of refining one’s thinking and understanding.


16.410 and 16.413 are time-consuming, but the assignments are not intended to require excessive amounts of time, and we will carefully track the level of effort required by the class throughout the semester. Note that the focus of this course is on the algorithms underlying autonomous systems. To ground your understanding, it is important that you implement some of these algorithms; nevertheless, as this is not a programming course, it is expected that you come into this course as a competent programmer.

Of course, the level of programming proficiency in the course will vary widely, and many with less proficiency have done well in the course in the past. However, if you do not have a strong proficiency in programming, you should expect to devote significant additional time, particularly at the beginning of the course, developing your proficiency. The time needed to acquire the proficiency is outside the hours the course allocates for assignments.

Spending enormous amounts of time on 16.410-13 is often the result of simply not asking for help when you need it. If you find yourself spending more time on 16.410-13 than you think you should, please ask the staff for help. It is also possible to spend an excessive amount of time programming. This is often the result of failing to prepare properly, such as not developing sufficient competence with the programming language, development and debugging tools, not reading the assigned text and exercises, understanding the distributed code, and developing plans to solve the questions.

Course Info

Learning Resource Types
Problem Sets
Lecture Notes
Design Assignments
Programming Assignments with Examples