The digital revolution, and recently, the global pandemic, have made our lives ever more intertwined with services offered over the Internet. The list goes on: shopping, banking, food delivery, ridesharing, social networking, on-demand video entertainment, online education. Today's Internet services offer slick user interfaces, scale to meet the needs of several millions of users, while staying "always available" and responding at the tap of a finger. This course will enable students discover for themselves:
How are modern Internet services designed?
Many technologies and fields of study come together to make modern Internet services possible. This course will provide students with a deep technical understanding of the architecture of modern Internet services. Lectures will introduce the fundamental principles and concepts from computer systems and networking that make modern Internet services possible. We will invest significant time to study and discuss technical literature including research papers. Building on a solid conceptual understanding, students will gain experience in how such principles are used in practice: The course will include several in-class demonstrations and programming assignments. In the latter half of the term, students will also work on an instructor-assisted research-grade programming project on a course topic of their choice. Overall, students can expect this course to provide a solid foundation for technology career paths in the industry or further academic study in this field.
The topics we will discuss include the followingThis course will use Canvas and Piazza.
Lecture materials and the full class schedule will be available on the syllabus page.
All course announcements will occur on Canvas.
Pre-requisites: It is helpful if you've taken undergraduate level computer networks (Rutgers CS 352 or equivalent) or operating systems (Rutgers CS 416 or equivalent). We will cover some of this background as necessary in this course, but you may find the course moving a bit fast if you've never met some of those concepts before. Talk to me for auxiliary materials to help you prepare. And you are of course welcome to attend a few lectures before you decide either way.
Your final course grade will be based on the following components:
This course uses absolute grading thresholds; there is no curve. Any materials due on a specific day are due at 8 pm Eastern Time on that day.
This course requires students to hand in online quizzes on materials taught in lecture and the assigned paper readings on a regular basis. The quizzes will due on Tuesdays and Fridays every week on Canvas, except the first Tuesday of the semester 01/17/22.
Responding successfully to quizzes will require significant engagement with the lecture material and the assigned research paper readings. You may ask private questions on Piazza or email the instructor directly for clarifications and help in understanding the readings. There is a 1 hour time limit to submit the quizzes once you open them. Please ensure you submit by the assigned due date and time. Only one submission is allowed per student. There are 27 quizzes in total; we will drop the five lowest quiz scores to determine this component of the grade.
"Googling" and chatGPT'ing for answers is not permitted. Further, collaboration with each other is not permitted. However, you may freely consult any materials suggested or provided as part of the course, including lecture notes, textbooks, and research papers. You may also freely discuss the lecture materials or assigned paper readings with your peers prior to opening the quiz.
You will work on four two programming
homeworks by yourself. You will receive approximately two
weeks to work on each homework. The homeworks will use the
C/C++ programming language, Python, and shell scripting for
the most part. The first homework will offer you chance to
"warm up" for the rest of the homeworks. The homeworks are
released and handed in on Canvas.
We will provide instructions to set up a Linux virtual
machine (VM) that you can use for most of the programming
homeworks. If you have access to a Linux machine with
superuser privileges, you don't need the VM, as you may be
able to recreate the necessary programming environment on
your own. However, it is imperative that you test
your software on the provided VM.
To work on programming homeworks, you are free to collaborate with each other and consult resources provided in the course and from the Internet. However, you must state in a source code comment (situated at the very beginning of the submitted source code file), which resources (e.g. URLs) you consulted and the names of the students that you discussed the homework with. If there is no collaboration or reference worth noting, please state "no collaboration" in the comment. It is mandatory to state collaboration and consulted references in the source code comment in the file that you hand in. Please be as complete and thorough as possible.
We will provide instructions for packaging and handing in your programming homeworks. You must follow these instructions exactly. If we cannot run your programs, you will lose a significant portion of points. If you hand in a programming assignment late, you will lose a significant fraction of points.
In teams of 2, you will work on a programming-oriented project of your own choosing, relevant to the course content. The project may involve solving a small open-ended research problem, enhancing an existing open source codebase with new relevant feature(s), reproducing empirical results from a paper you've read (within or outside the syllabus), a re-implementation of an existing technique or idea on a different system, building a tool that makes further development or research possible or easy, or anything else of your choosing that is relevant to the course material. The instructor will send out a list of seed ideas for potentially interesting course projects. However, you are encouraged to find and work on something you find exciting.
The project must involve a significant programming component and be related to the class topics. This judgment is subjective and up to the discretion of the instructor. You will have an opportunity to discuss with the instructor whether your project qualifies under both criteria above when you submit the project specification document (see more info on this document below). "Significance" of the programming is measured through the complexity and size of the source code that you will need to develop for the project. Relevance is typically clear from the topic of the project. In any case, the instructor will be happy to provide specific guidance for each project; please contact us to set up a discussion. You are welcome to start forming teams (of 2), and brainstorm ideas with each other and with the instructor as early in the semester as possible for you.
More specific requirements for the course project include the following.
(1) Project specification document (1--2 pages, due 04/03) outlining:
(2) Project source code (due end of the semester). This must include all source code required to get your software project up and running independently. You must host the source code on a public code hosting repository such as GitHub. The software package must include clear documentation (e.g. through a README.md file) of the instructions to replicate and check that your software works. Further, please provide clear and specific instructions to replicate the empirical evaluation of your software, preferably through scripts. Also note how much time (e.g. 30 minutes) running such evaluation scripts will require, and what we expect to see after each experiment.
(3) Technical project report (5--10 pages, due end of the semester) Please expand on the components of the project specification (described above). This is an opportunity for you to clearly and thoroughly describe all the technical details of your solution implementation, and the methods, setup, workloads, etc. of the quantitative evaluation of your software, along with the results (graphs, tables, etc.) and scientific descriptions of why you observe these numerical results. The report will be a single PDF file per team submitted through Canvas. The report should include a link to the publicly-visible project source code. Optionally, you are welcome to provide a link to any video demonstrations or presentations to describe your project.
It is insufficient to "just implement" something. A quantitative evaluation of the most relevant performance metrics, along with scientific descriptions of why your system achieves the reported numbers, is crucial to score well on the course project.
The ability to identify the right performance metrics for a system, and then rigorously measuring and explaining the values of those metrics (with the right context to interpret them), are highly coveted skills in software development. This part of the course project will likely benefit you well beyond the scope of this course. Please budget sufficient time not just to implement the software, but also to evaluate and explain your numerical results rigorously. In our experience, a rigorous measurement and a scientific explanation of system metrics may take as long as implementing the system in the first place.
We encourage active participation, discussion, and collaboration by allocating a portion of the overall grade for participation.
Please keep all interactions respectful, being mindful of diverse viewpoints and backgrounds. The class is a forum to teach and learn from each other without judgment. Technical discussions are highly encouraged.
Course participation includes, but is not limited to:
This course welcomes open discussion and intellectual collaboration. For example, you can get help on Piazza and over email from the instructors and your peers.
You are free, in fact, encouraged, to collaborate on programming homeworks and course projects. You may also freely discuss the assigned paper readings with each other prior to attempting online quizzes on those readings. However, all source code, text, and in general, any work submitted in this course must be your (or your team's) own work or contain clear and specific attribution to any external sources that were used (e.g., "software library X at https://site.com was used to implement feature Y in the submitted program"). You must fully understand and provide your own solutions, rather than blindly incorporate the solutions from discussion or references. You are explicitly forbidden from looking at another team's code or solution code from other sources (e.g., from GitHub or CourseHero).
Copying software solutions from the web, including from Stack Overflow and GitHub, is considered cheating. Posting questions or solutions to quizzes and programming homeworks to GitHub or question-answering services like Chegg or public course archives like CourseHero will be considered a violation of Rutgers and CS Academic Integrity Policy.
Please note that violation of academic integrity policies at the graduate level carries especially serious academic consequences. We will run software to detect plagiarism on all material submitted by students. Ignorance of academic integrity policies is not excusable; please ask us if you are ever in doubt.
Each programming homework, as well as the course project, requires you to state who you collaborated with and which resources, possibly on the Internet, that you consulted. You must be as thorough and complete as possible.
Collaborating on, googling, or chatGPT'ing answers for the online quizzes is a violation of Rutgers integrity policy.
You are required to abide strictly by the Rutgers New Brunswick academic integrity policy and also the Rutgers Computer Science integrity policy. We will use sophisticated software to detect plagiarism. Any violations will be reported to the University's office of student conduct. Ignorance of integrity policies is not excusable if you are found in violation. If you are in doubt, please ask the instructor.
Rutgers University takes academic dishonesty very seriously. By enrolling in this course, you assume responsibility for familiarizing yourself with the Academic Integrity Policy and the possible penalties (including suspension and expulsion) for violating the policy. As per the policy, all suspected violations will be reported to the Office of Student Conduct. Academic dishonesty includes (but is not limited to):
If you are ever in doubt, consult your instructor.
Lateness: In general, late submissions to any component of the course are disallowed unless exempt by medical or religious reasons allowable by the University or the explicit permission of the faculty instructor.
In general, we are here to help you learn and succeed!
Other support resources:
Last updated: 2023-04-26 17:38:26 -0400 [validate xhtml]