Syllabus and Policies
Lectures: T/Th 09:00-10:20 EDT (All lectures will be recorded and [streamed live via Zoom][zoom].)
Location: CIT 368
Prerequisites: Students are expected to have taken an introductory systems course, eg. CSCI 0330, CSCI 0300, CSCI 1310, CSCI1330, or must have consent of the instructor.
Instructor: Nick DeMarinis
TAs: See Staff
Offical Course Description
CSCI 1680 is an undergraduate course in computer networks. We will cover the technologies supporting the Internet, from Ethernet and WiFi through the routing protocols that govern the flow of traffic, and the web technologies that are generating most of it. A major concern is understanding the protocols used on the Internet: how they work, their shortcomings, what the issues are, and what improvements are on the horizon.
Expected workload
Coursework consists of 4 programming projects, 6 written homeworks, and weekly post-lecture quizzes. This course does not have exams. For more details on what each assignment entails, see Course Mechanics.
In addition to 3 hours per week in lecture (36 hours total), you should expect to spend 3-4 hours on each homework assignment, with the majority of your time dedicated to the four projects, which are long-term programming assignments. The first and last project should take between 20–30 hours each, and the larger projects should take 50–60 hours each, with the work spread out over several weeks. In total, you should expect your time commitment will be at least 180 hours over the course of the semester.
Perhaps the single most important advice for this class is to start the projects early and work steadily over the assigned time—do not leave the projects to the final week or days before the deadline. Each project has intermediate “milestones” before the final deadline, which aim to provide feedback midway and stimulate early progress.
Learning Goals
This course teaches the principles behind the organization of computer networks, from those connecting two computers to one of the largest technological systems we have ever built, the Internet. This knowledge can be useful at multiple levels, from building your own networked programs, designing new communication protocols as new technologies arise, debating whether network providers can treat different types of traffic differently or governments can eavesdrop on conversations, and understanding how, for example, Pakistan could at one point inadvertently bring down Youtube for half of its users.
We teach you about layering and the “end-to-end principle”, about how to encode information to be transmitted by manipulating some physical property of a medium, how to scale communications beyond a few nodes through hierarchy and through more sophisticated lookup structures, how the Internet works at the local and global levels, including how its connected computers can share the capacity of the links between them with some notion of fairness. We teach you how the Web, Bittorrent, Netflix, and other applications work, including how to write your own. We teach you how wireless communications work at a basic level, and how the issues involved in trying to communicate securely.
The course uses two main learning mechanisms: classroom lectures by the instructor with some live demonstrations, and hands-on programming projects. Homework assignments are designed to give you more practice with the “theory” and design aspects of networking. The four projects aim to give you substantial experience in building and using networked programs. Except for the first project, projects are done in pairs, and have, for the most part, little “support code”. These assignments are designed to help train you to work in groups, as in almost no software engineering career will involve working alone, and to help strengthen your software design skills. You can complete projects in any of four systems programming languages (C, C++, Go, or Rust), which all of these have similar networking APIs, to help you build your software skills in a direction of your choosing.
Course mechanics
Lectures
Lectures are held in-person on Tuesdays and Thursdays from 9-10:20am EDT. All lectures will be recorded and posted online within a few hours of the lecture time. Students are encouraged to attend lecture in-person or via Zoom, but synchronous attendance is not required (see Attendance).
For a schedule of topics, see the current schedule (some lectures TBA) or last year’s schedule.
Projects
Most of your time in this course will be spent across 4 programming projects. Projects are an opportunity for you to implement real-world network protocols as well as whole applications that heavily utilize networking to accomplish tasks.
Building robust network systems relies heavily on good software design, so projects are structured such that you will build most of your software architecture yourself (with no or very limited stencil code)–if you’ve never done this before, that’s okay! We will provide general resources and per-project examples, and gearups to help.
Here are some details on how projects will work:
-
Resources: The most important resources are posted with the project on the assignments page—when a project starts, you should make sure you are aware of all available resources so you know to refer to them as you work on the project.
-
Teams: The first project is individual, subsequent projects (Projects 2–4) are completed in teams of two (2) students. At the start of a project, you will have the opportunity to form a team on your own, or ask to be matched to a team by the course staff. In general, you will keep the same team for both projects 2 and 3 (IP and TCP), which build on each other. For project 4, you may keep your team from IP/TCP, or you may form a new team.
-
Software engineering: The largest projects are Projects 2 and 3 (IP and TCP, respectively), where you will build your own virtual network stack, similar to how networking works inside an operating system. These projects will share a codebase, ie. you will extend your work from project 2 to implement project 3. This provides an opportunity for you to work on a large codebase that you build, extend, and maintain over several weeks, which many students have reported as a very rewarding way to build software engineering skills. We will provide resources on good software development practices throughout the course—your adherence to these practices may factor into your grade on some projects (and will generally make your development easier).
-
Programming languages: You can work on the projects using any of the following systems programming languages: C, C++, Go, or Rust. Students report that this course is a great opportunity to learn a new systems language (like Go or Rust) or to deepen your understanding of C/C++. We maintain a list of helpful resources for each language, including resources for starting to learn Go or Rust. Live code examples in class will use Go; posted notes and code examples are also provided in C (along with old recorded lectures using C). We will provide more guidance on how to select a programming language at the start of the first project.
-
Milestones: Most projects are structured with one or more “milestone” deadlines. These are intermediate deadlines to help make sure you are on track to complete the project. With the exception of the first project, your team will complete your milestone by scheduling a meeting with a member of the course staff to demonstrate your progress so far, your next steps, and any questions/concerns you have about the project. Since these are intermediate deadlines designed to provide you with feedback, milestones are mainly graded based on thoughtfulness of your design and plans, rather than a complete implementation. Details on the specific requirements for each project milestone and how they will be graded will be provided with each project handout.
-
Gearups: Within 1-2 days of each project’s release, we will hold a “gearup” session where a member of the course staff will introduce the project and demonstrate important setup tasks and things to keep in mind as you build your implementation. A schedule of the gearups will be made available at the start of the semester, pending confirmation of room reservations. All gearups will be recorded and streamed live on Zoom, and all notes will be posted within a few hours of the event. Attendance is not required, but you are responsible for reading any materials/notes/examples, which are part of the essential resources released with each project.
Homeworks
Homeworks are opportunities to reflect and critically analyze more theoretical aspects of networking from lecture, and explore how protocols are used to accomplish various goals and their impact on our society. Some homeworks may involve testing out different networking tools (with no or limited setup) to build hands-on experience and fuel later discussions. Homeworks will generally pertain to material recently discussed in lecture, but we may “retest” you on earlier content if it was a frequent source of questions or mistakes.
Depending on the course enrollment during shopping period and available staffing, the format for certain homeworks may change throughout the semester. Homeworks are generally structured as written assignments that you will submit as a PDF via Gradescope. In general, each homework will be composed of 3-4 short-answer problems assigned over two weeks. Depending on what other work is out (and our staff workloads), we may release shorter homeworks during some intervals (eg. 1-2 problems over 1 week). We will release more details as enrollment settles during shopping period.
Online section
Remote students may also enroll in this course remotely by registering for the remote section (S02). Our course is designed to provide similar level of instruction and feedback for in-person and remote students, specifically:
-
Lectures: Remote students are encouraged to attend lecture synchronously, but this is not required. All lectures will be recorded and posted after the lecture.
- Office hours: Throughout the semester, we will offer regular, remote-accessible office hours via Zoom. We will survey students when the semester begins to ensure that everyone can attend some of these office hour slots—details will be released in the first two weeks of classes. In exceptional cases, the course staff is also willing to set up meetings by appointment.
- Ed discussions, assignment feedback: Both remote and in-person students are encouraged to ask questions on any course material via Ed, our course discussion board. Our course staff makes an effort to respond in a timely manner, usually within 1 business day. For graded work, all students will receive written feedback on assignments throughout the semester (submitted and reviewed online, usually via Gradescope). In addition, all projects except the first one involve regular “milestone” meetings with the course staff to check in on progress and provide feedback—for remote students, these meetings are conducted via Zoom.
Grading
Your final grade for the course will be based on the following weights:
- 65% Programming Projects (4): 10% Snowcast, 20% IP, 25% TCP, 10% Final Project
- 35% Homeworks (4 or 5 total, schedule released after shopping period)
Homework assignments are done individually. The first project, Snowcast, is done individually, while the remaining projects are completed in groups of two (2) students. For more details, see Projects.
How letter grades are determined: Everyone who earns an A in CS1680 gets one. There are no quotas on the distribution of letter grades. Cutoffs for A start at 90 and B at 80–these may be lowered (but never raised) to accommodate the overall grade distribution once all assignments have been graded. In general, when setting cutoffs, we try to avoid situations where a small difference in final average translates into a different letter grade. For borderline cases, we will examine individual grades very carefully to look for outliers (eg. one bad assignment), improvement over the course of the semester, etc. before assigning a final letter grade.
Capstone
Undergraduates may use this course to fulfill their capstone requirement. Capstone students will add one of two extra features for our two main projects (IP and TCP). The extra components are open-ended and require a detailed writeup of what you implemented and how it works. Capstone work is graded interactively by demonstrating your work to a TA or the instructor.
The goal is for these features to add at most 15% extra work to these projects (less for IP, more for TCP).
Since both projects are done in teams: if both members are doing capstone, your team needs to implement both features. Otherwise, the features are designed to be fairly standalone so that if only one member is doing capstone, they can implement the extra feature without it having to significantly impact the overall project design.
Please note that students may only complete their capstone requirement in their senior year, per University policy.
Materials and Software
Students do not need to purchase any additional materials to participate in the course. Developing for assignments will require use of any personal computer. Students who need a personal computer during the semester may request a “loaner” system through Brown’s IT Service Center.
Please note that much of our course infrastructure cannot work on CS department systems without special, per-student setup by the course staff. If you cannot use a personal system or rent a “loaner” system from Brown, please let us know ASAP and we can make arrangements for you.
Optional textbooks
You can follow the content of the course using any of the following books, although none are required. The authoritative source of content will be the lecture slides and notes, which will be posted soon after each lecture.
- An Introduction to Computer Networks by Peter L. Dordal. Latest edition available online for free.
- Computer Networks: A Systems Approach (5th edition), by Larry Peterson and Bruce Davie.
- Computer Networking: A Top-Down Approach (7th edition), by James F. Kurose and Keith W. Ross
Course Policies
Office hours
We are happy to work with you during office hours to help with understanding any course content or project work. We are happy to help with planning your project design, debugging your work, or reviewing concepts from lectures and homework assignments. If you have questions, or just want to talk, please come!
For a full list of office hours, please check the course calendar.
In order to make office hours accessible and promote collaboration, we hold office hours in two formats:
- Individual, queue-managed (in-person or remote): The standard format at Brown, and the typical format for most of our hours, where you will talk one-on-one with a member of the course staff. When the hour begins, a queue will appear on the Hours platform designated for our course. Whether you are in-person or remote, simply join the queue! If you are remote, you will receive a zoom link; otherwise, you can meet in person at the designated location. All office hours are individual unless noted otherwise on the calendar.
- Collaborative (in-person): These hours will use a group format: simply come to the designated room and a member of the course staff will circulate and take questions. We can provide all forms of help during this time, including debugging or help with concepts. You are welcome to stay and work and ask questions as they come up. This is also meant to create a space where you can meet and collaborate with your peers! Depending on TA and Zoom-capable room availability, group hours may be offered in a hybrid format when possible. Details will be released at the start of the semester when room bookings are finalized.
If you want to talk but are unable to attend any scheduled office hours, or if you want to have a more private discussion, please make a post on Ed or email the TAs list.
Diversity and Inclusion
We intend for this course to provide a welcoming learning environment for all students. We especially welcome diverse ideas and perspectives during class discussions—networks inherently connect societies and cultures, and viewing systems in different ways often results in more robust, usable, and secure systems.
We work hard to ensure all aspects of the course are accessible and inclusive to all. However, despite our best efforts, we may accidentally slip up, so please feel free to speak to the instructor, or any member of the course staff, with any concerns you have during the semester. Please do not hesitate to speak with us directly, or fill our our anonymous feedback form. You may also reach out to Professor Tom Doeppner (Vice Chair and Director of Undergraduate Studies). We take all concerns about unprofessional or otherwise non-inclusive behavior very seriously.
To access student support services and resources, and to learn more about diversity and inclusion in CS, please this page and feel free to contact Laura Dobler, who coordinates diversity and inclusion initiatives in the department.
Attendance policy
Let’s face it: 9am is not an ideal lecture time.
Lectures are great opportunities for class discussion and time to ask questions, but we know that synchronous attendance doesn’t work for everyone, especially given the 9am timeslot. While Nick does like having people to talk to in class, he doesn’t think less of anyone who is not in class synchronously.
Therefore, we encourage you to attend lecture synchronously if possible, but it’s not required. We only ask that you stay “in sync” with the lectures in a timely manner.
Our lecture schedule is designed to synchronize closely with the material you are working on in your projects and assignments, and we work hard to provide demos that teach you relevant skills. So whether show up in person, join on Zoom from the comfort of your bed, or watch the recordings, it’s in your best interest to participate in lectures!
Collaboration Policy
Software development almost universally involves collaborating with others, so we encourage you to work with other students to build your conceptual understanding and debug issues. Guidelines for collaboration and Academic Integrity are included in our course collaboration policy, which is available as a separate document. Please read this policy, as it may differ significantly from other courses you have taken. To submit assignments, you must agree to the collaboration policy as part of HW0.
In addition, students are responsible for understanding and following the Brown Academic Code and the Code of Student Conduct, which provides the basis for our collaboration policy.
Due Dates
Assignments must be submitted by 11:59 PM EST on their due dates, except if noted otherwise. For a list of assigned work, see Assignments.
Note that some deadlines may be adjusted during the semester depending on the overall progress of the course. Any deadline updates will be announced on Ed as soon as a change is made. Deadlines for already-assigned work will only ever be extended, never reduced. We thank you for your understanding as we work to build new material into the course and adjust to student feedback.
Late Policy
Extensions
If you require an extension on any assignment for a planned reason (religious holiday, planned travel, etc.), please contact the instructor at least 24 hours before the deadline to make a plan. For unplanned reasons (if you are sick, personal emergency, other extenuating circumstances), please contact the instructor as soon as it is feasible for you to do so.
To request an extension, please fill out our extension request form.
Please note that only the instructors are authorized to grant extensions. HTAs and UTAs cannot approve, or comment on the likelihood of, extension requests. For privacy reasons, please do not send personal information regarding extensions to TA mailing lists.
Late days
Students are allowed a total of four (4) late days to be used on homework and project assignments free of charge. After the free late days are exhausted, students will be penalized 15% of the assignment’s value for each day it is late (but you will not be penalized for more than the assignment’s value). No more than three (3) late days may be used on any one assignment without permission of the instructor.
For group projects, late days are used for all team members–that is, a group project submitted one day late uses one late day for each team member.
Late days cannot be used for intermediate project milestones or essential forms (HW0, team registration forms, etc.), since the deadlines on these are used for scheduling purposes. Other assignments may not allow late days, at the discretion of the instructor–if this happens, it will be noted when the assignment is released.
Counting late days
Weekdays and University holidays do not count toward days late. For example, an assignment due on Friday and submitted on Monday is considered one day late—if the Monday were a holiday, the assignment would be one day late if submitted on Tuesday. Holidays are days marked as “recess” or “no University exercises” on Brown’s Academic Calendar.
Note also that the late penalty is the same if your work is submitted at 2am or 11:59pm the following day. This policy is designed to allow you some time to rest, even if you are submitting late. We want ensure you can stay healthy and take time to think carefully about your code, rather than staying up all night!
At the end of the semester, we will apply the free late days in optimal fashion to ensure the final grade is highest.
Announcements
Announcements, information about upcoming talks, and important assignment clarifications will be made using Ed and usually announced at the start of lecture. Important messages will be pinned on Ed, and usually also copied via email. You are responsible for keeping up to date with pinned Ed posts and emailed announcements, particularly assignment clarifications.
Communication policies
Part of your learning experience in CS1680 involves engaging with challenging topics and a lot of software development. Like many courses at Brown, this will involve some amount of productive struggle through problem solving. If/when you encounter feelings of frustration, don’t be afraid to ask for help. Rather than beat your head against a wall, seek out your friendly staff.
We are here to help and we don’t think less of you for asking for it!
In particular, if you feel like you are routinely getting stuck on getting started with problems, program design, or programming in general, we encourage you to make an appointment with the instructor. Nick is happy to sit down with you, review how you approach problems, and help you identify strategies for working more effectively. In general, we (as a course staff) want to help you learn these techniques, as they will serve you well beyond this course.
That said, remember that we are not on call 24/7. Please respect that your TAs are also students with their own deadlines. Between Ed, office hours, and milestone meetings, we have many opportunities for you to access help. Please see the guidelines below for how to reach us most efficiently so that we can provide help to as many students as possible.
Ed, Email, and Contacting Staff
Please respect the following communication guidelines so that we can handle questions efficiently and effectively:
-
Most general questions related to assignments, logistics, or materials should be posted to Ed (not sent via email). Messages sent to Ed reach our entire staff for most efficient processing. We try to respond to posts within 1 business day.
-
Scheduling questions for milestones or grading meetings should be directed to your assigned mentor TA or the HTAs list. We will provide details on this as the semester progresses. Please do not reach out to individual TAs via email for other reasons, unless they contacted you first.
-
Routine requests: Extension requests should be submitted using the extension request form. This form is only reviewed by the instructor (not (H)TAs) and is not meant to be impersonal–it simply helps us keep track of your requests and ensure they are recorded properly. Similarly, grading issues should start as a regrade request on Gradescope.
-
Other logistical issues and concerns should be directed to Nick via email. Please include “CS1680” in the subject line for fastest processing—Nick’s inbox is continually overflowing, and this really helps for tracking messages!
Guidelines for Ed
Unless a questions pertains specifically to your attempted solution to a problem, please post questions and comments publicly—you can post questions anonymously to other students and to us. Questions about your code that reveal key solution steps should be posted privately. We reserve the right to make private posts public (but anonymous) if we believe the question is of general interest to the whole class—we may redact personal info in these cases, and will usually ask beforehand to ensure the private discussion is over.
When assignments are out, we will pin a “reading list/FAQ” post with links to frequently-asked or otherwise good questions for each assignment. Before posting, please check this post to see if you problem has already been addressed to help us maximize efficiency.
Attendance and health
Please keep the health and safety of others in mind as you attend class and office hours. All lectures will be streamed live via Zoom. If you are not feeling well, please join lectures via Zoom (or watch the recording) instead of coming to class. Similarly, please refrain from attending in-person office hours if you are sick–instead, we are happy to answer questions online via Ed, or talk via Zoom during individual office hours, or by appointment. If you need accommodations regarding deadlines for health reasons, please contact the instructor as soon as possible so that we can determine how to move forward together.
Accessibility and Accommodations
We, and Brown University as a whole, are committed to the full inclusion of all students. Please inform the instructor early in the semester if you may require accommodations or modification of any of our course procedures–please send an email so that we can keep track and set up an appointment to discuss further if required.
We work hard to ensure that all students have easy access to the tools and resources required to complete this course. If you have issues using any materials for any reason, please let us know and we are happy to work with you to make sure you are set up to succeed.
If you need accommodations regarding online learning or in the
classroom, please be sure to reach out to Student Accessibility
Services
(SAS)
for their assistance via sas@brown.edu or 401-863-9588.
Undergraduates who are in need of short-term academic advice or
support can contact an academic dean in the
College
at college@brown.edu
. Graduate students may contact one of the
deans in the Graduate School by emailing graduate_school@brown.edu
.
Mental Health
Being a student can be stressful. If you feel you are under too much pressure or there are psychological issues that are keeping you from performing well at Brown, we encourage you to contact Brown’s Counseling and Psychological Services (CAPS). They provide confidential counseling and can provide notes supporting extensions on assignments for health reasons.
Course Feedback
Students are encouraged to submit feedback about any aspect of the course. If you find something broken or unclear in the instructions, think an assignment was too difficult, or have an idea on how lecture can be improved, please submit feedback! Your responses are very important for helping to improve this course and future courses.
You can submit your feedback using our Anonymous Feedback Form. From the course staff’s perspective, your responses are anonymous unless you choose to include your contact information.
Policy Updates
All course policies and the schedule are subject to change at the discretion of the instructor. Once the course has begun, all changes will be listed in this section.
- 2 October 2023: Clarified late policy; added extension request form