EECS 489: Computer Networks (W’17)
Assignments and Policies
Four assignments will be assigned during the semester. Each assignment will require a substantial time commitment on your part.
Three of the four assignments in this course will be done in groups of 2-3 students (Assignment 1 is done individually). Groups may be drawn from the entire EECS 489 population; members of a group need not all be in the same lecture or discussion section. Declare your group's membership by January 22, 2017. After this date, we will form groups from the remaining students. Choose your group members carefully. You should discuss topics such as prior experience, course background, goals for this course, workload and schedule for this semester, and preferred assignment management and work style. Make sure you can find several blocks of time during the week to meet to discuss or carry out the assignment. Students who have worked on any EECS 489 assignment in a past semester should talk with an instructor before joining a group.
Students are expected to work diligently in their group for the benefit of the entire group. All group members should be familiar with all aspects of each assignment, irrespective of their role on the assignment. We expect all group members to contribute their fair share, and we expect to assign the same assignment grade to all members of a group. To help ensure this, group members will evaluate the contributions of other group members after each assignment. Members who contribute less than their share may receive a lower grade on the assignment; non-contributing members will receive a zero. In case of disputes regarding contribution, an instructor may examine the commit log or interview group members.
Students may be fired from a group by the majority vote of the remaining members.
The procedure for this is as follows:
(1) documented "gentle warning" of risk of firing in e-mail, with cc to all group members and to
eecs489-staff, with cause and specific work required to remain in group;
(2) allow at least 72 hours for compliance;
(3) if the problems persist, e-mail statement of firing to the group and to
Fired group members may join another group; students who cannot find a group must complete the remaining assignments by themselves.
Managing group dynamics and using each group member's time and talents effectively can be difficult. If there are problems with your group, please see an instructor as soon as possible. Be open and candid with your group about potential problems early on so your group can plan around those problems and not fall behind. A sure way to make your group upset at you is not finishing your work at an agreed-upon deadline and not informing them about the problems early enough for them to help. We encourage everyone to read Coping with hitchhikers and couch potatoes on teams.
All assignments will be hosted at github.
Please sign up for a free github account if you don't already have one, then register your github username with us.
eecs489 organization at github will provide a private repository for each group for each assignment.
Commits to the repository should reflect the proportion of work performed by each group memer.
If you use pair programming, take turns at the keyboard so that the commit log reflects the contributions of both members.
Turning in Assignments
Sometimes unexpected events make it difficult to submit a assignment on time. For this reason, each group will have a total of 3 late days throughout the semester across all assignments. These late days should only be used to deal with unexpected problems such as illness. They should not be used simply to start later on a assignment or because you are having difficulty completing the assignment. Once late days are used up, submissions received after the due date will not count (even if they are just one second late). Use late days judiciously. Weekend days are counted in the same way as weekdays (e.g., if the assignment deadline is Friday and you turn it in Sunday, that's two days late).
To request an extension beyond the free late days, you must discuss your situation with an instructor before the deadline and provide written documentation. Extensions will typically not be granted, even for computer problems, illness, family emergencies, etc.. In most cases, with cooperation and good faith on your part, your group will be able and expected to make up the deficit without needing an extension. You can avoid most problems by starting the assignments early and keeping backup files. If a family/personal emergency causes you to miss a significant number of days, please see an instructor to decide the best course of action. If you are having trouble understanding the material or starting a assignment, please come to office hours for help right away.
Contact an instructor at the beginning of the semester if you have a disability that might interfere with your ability to participate in class, submit assignments, or take exams.
All assignments in this course are to be done by your own group and in accordance with the College of Engineering Honor Code. Violation will result in a zero on the assignment in question and initiation of the formal procedures of the Engineering Honor Council.
At the same time, we encourage students to help each other learn the course material. As in most courses, there is a boundary separating these two situations. You may give or receive help on concepts covered in lecture or discussion and on the specifics of C syntax. You may consult with other students to help you understand the assignment specification (i.e., the problem definition). However, you may not collaborate in any way when constructing your solution---the solution to the assignment must be generated by your group working alone. Any misrepresentation of another person's work as your own is unacceptable and is a violation of the honor code. You are not allowed to work out the programming details of the problems with anyone or to collaborate to the extent that your programs are identifiably similar. You are not allowed to look at or in any way derive advantage from solutions or code that you did not write. If you worked on the assignments in the past (e.g., if you are repeating EECS 489), you are not allowed to re-use code that your group wrote from the prior semester.
If you have any questions as to what constitutes unacceptable collaboration, please talk with an instructor. You are expected to take reasonable precautions to protect your work. You may not post your work in a publically accessible location, such as public code repositories. Don't let other students borrow your account or computer; don't leave your program in a publicly accessible directory; and don't discard printouts in a public place.
Tips for Success on the Assignments
The most common reason for doing poorly on the assignments is starting them late. You will be given plenty of time to complete each assignment. However, if you wait until the last minute to start, you may not be able to finish. Start early, and plan to have it finished a few days ahead of the due date. Expect to spend more time debugging the code than you did writing it.
The most common reason for spending too much time on a assignment is coding before thinking through the entire assignment. Resist the urge to start writing code as your first step; you are likely to code yourself into a corner. Meet with your group and plan out the architecture of your solution. Expect to revise this architecture several times before settling on a plan. Read the assignment description carefully, and list the behaviors the specifications require of your solution. The more you think through and understand what needs to be programmed before you write code, the better. Design your assignment with independently and incrementally testable subsystems rather than saving all testing for the end. Assign one assignment member as the Testing Czar; that member's job is to see how he or she can break the group's solution with the simplest possible test. Another common reason for spending too much time on a assignment is debugging by trying things at random, just to see if they work. If you find a workaround without understanding why it fixes the problem, you may be masking the problem rather than fixing it, and it will probably cause more problems later and be harder to fix. If you find yourself in this position, step away from the computer and think about what is happening, or come see an instructor in office hours.
There are many sources of help on which you can draw. Most questions can be submitted to the teaching staff and your fellow classmates via the discussion forum. These will typically be answered within the day, often more quickly during working hours. However, some types of questions cannot be answered without seeing your assignment. If you have detailed questions about your program, speak to an instructor during office hours. Students are also encouraged to help one another on the course concepts (but not the implementation of the assignments). One of the best ways for you to make sure that you understand a concept is to explain it to someone else. Keep in mind, however, that you should not expect anyone else to do any part of your assignment for you. The assignment that you turn in must be your own.
Many computing sites have consultants who are available to help you. They can often help with questions about the computers, printers, and installed software (e.g., Unix, AFS, e-mail). However, they probably will not be able to help you with questions about operating systems, C, or specific errors in your program.