Primary Instructor
kevin.leach@vanderbilt.edu
Office Hours:
MW after class until 5p CT*
Sony 4110 (or in classroom)
Windows 11, Linux
Fall 2025
A holistic course of modern web systems and technologies, covering front end and back end. Build an Instagram clone in the first half of the semester, and a Google clone in the second.
Note: Kevin will stay after class until 5pm, but only if students are present. Kevin will leave office hours if no students are in the room. Please do not leave and come back before 5pm; Kevin may have left.
In Sony 4120 or the open area outside that room.
There are several resources you should be aware of this semester:
Primary Instructor
kevin.leach@vanderbilt.edu
Office Hours:
MW after class until 5p CT*
Sony 4110 (or in classroom)
Windows 11, Linux
Graduate Teaching Assistant
skyler.h.grandel@vanderbilt.edu
Office Hours:
TR 2:30p - 4:00p CT
Sony 4120
Windows 11, Linux
| Date | Content | Deadline |
|---|---|---|
| Wed Aug 20, 2025 | Introduction (slides) | Class Begins |
| Mon Aug 25, 2025 | Web Basics (slides) | |
| Wed Aug 27, 2025 | Dynamic Pages (slides) | |
| Fri Aug 29, 2025 | Last day to add/drop classes. | |
| Mon Sep 1, 2025 | Sessions (slides) | |
| Wed Sep 3, 2025 | Encryption (slides) | |
| Fri Sep 5, 2025 | Project 1 Due | |
| Mon Sep 8, 2025 | Web Security (slides) | |
| Wed Sep 10, 2025 | REST APIs (slides) | |
| Fri Sep 12, 2025 | Project 2 Due | |
| Mon Sep 15, 2025 | Javascript 1 (slides) | |
| Wed Sep 17, 2025 | Javascript 2 (slides) | |
| Mon Sep 22, 2025 | Asynchronous Programming, React, Closures (slides) | |
| Wed Sep 24, 2025 | Networking (slides) | |
| Fri Sep 26, 2025 | Project 3 Due | |
| Mon Sep 29, 2025 | Google File System (slides) | |
| Wed Oct 1, 2025 | Midterm Exam | Midterm Exam |
| Mon Oct 6, 2025 | Optional: Career Development | |
| Wed Oct 8, 2025 | Fall Break - No Class | |
| Mon Oct 13, 2025 | Map Reduce (slides) | |
| Wed Oct 15, 2025 | Systems, Processes, Threads, and Sockets (slides) | |
| Mon Oct 20, 2025 | Information Retrieval 1 (slides) | |
| Wed Oct 22, 2025 | Information Retrieval 2 (slides) | |
| Fri Oct 24, 2025 | Project 4 Due | |
| Mon Oct 27, 2025 | Information Retrieval 3 (slides) | |
| Wed Oct 29, 2025 | Scaling content + Blockchain, ft.
Skyler (Kevin at DIGIHEALS PI meeting) |
|
| Mon Nov 3, 2025 | Scaling Static and Dynamic Content (Slides, these are the same as above) | |
| Wed Nov 5, 2025 | Scaling Static and Dynamic Content ft. virtualization and datacenters (Slides, these are the same as above) | |
| Mon Nov 10, 2025 | Machine Learning (slides) | |
| Wed Nov 12, 2025 | Recommender Systems (slides) | |
| Mon Nov 17, 2025 | Auctions / Ethics (slides) | |
| Wed Nov 19, 2025 | TOR and the Dark Web (slides) | |
| Fri Nov 21, 2025 | Project 5 Due | |
| Mon Nov 24, 2025 | Thanksgiving Break - No Class | |
| Wed Nov 26, 2025 | Thanksgiving Break - No Class | |
| Mon Dec 1, 2025 | TOR Wrap up / Enshittification (slides) | |
| Wed Dec 3, 2025 | Final Exam Review | |
| Sat Dec 6, 2025 | Final Exam (9:00 AM Central) | Final Exam |
| Mon Dec 8, 2025 |
Class Ends Absolutely all course material must be turned in! |
|
w3Schools HTML Intro
w3schools CSS Intro
Official Python Tutorial
Install web dev tools on your operating system
git and GitLab
Web dev features in popular web browsers
python3 -m venv
pdb and pdb++
pytest
Command line automation
w3Schools SQL Intro
Projects: P2, P3, P5
SQLite Tutorial
Projects: P2, P3, P5
Dynamic pages
Projects: P2, P3, P5
Projects: P2, P3, P5
Projects: P3, P5
curl, HTTPie
Projects: P3, P5
Toolchain, demo
Projects: P3, P5
Headless Chrome
Projects: P3, P5
Projects: P4
Course Summary: This course is a contemporary exploration of modern web-based information systems. It will integrate concepts from multiple computer science topics used in the design, development, and deployment of web-based applications, services, and knowledge systems. While broad in scope, it will also cover several key concepts in depth, including: web networking protocols, web databases and applications, web services, web search, web-relevant security issues,web infrastructure, and web-relevant data mining. Students will learn how to incorporate these concepts into an engineering process that includes design, analysis, development and testing,using technologies such as HTTP, XML, JavaScript, AJAX, and others.
Students will form teams to implement assignments on Linux-based web servers using open-source components. These assignments will culminate in students implementing their own large-scale web search engine, roughly comparable to Google or Bing. At the end of this course, students will understand the science behind web-based information systems and the engineering principles for building them.
This course is about the design and development of information systems in wide area networks. Its primary goal is to take a holistic view of modern web systems and their constituent technologies. By the end of this course, successful students will be able to:
Students are required to have taken CS 3251.
There is no required textbook for this course. Optional sources include:
There are three primary reasons:
First, I previously taught EECS 485 at the University of Michigan. This is a course that routinely serves approximately 600 students per semester, and has been around since 2017. As such, thousands of students have gone through this version of the course, and I thoroughly believe it is a well-tested, rigorous, and valuable course to you as a student. Moreover, it is already familiar to me, and thus easier to prepare for and to accommodate student questions.
Secondly, I am absolutely convinced that it is important to future-proof students by providing access to materials and practice with relevant technology and best practices that will aid you throughout your career. While this is primarily a web systems course, I am under no delusion that most students will not end up in full-stack development careers. As such, I would rather expose you to a broader set of technology and practices.
As an example, this version of the course uses Python Flask as the backend for the project assignments. Prof. Hemingway's version of the course uses a nodejs backend. While both are great technologies, I would rather expose students to Python as it is, in my opinion, more broadly applicable. For example, if a student decides to pursue machine learning, a safe bet is that they will have to touch pytorch or tensorflow, which are both Python libraries.
Third, I am a big believer in oracle/comparator testing. This is the industry standard for software development in industry, and is how junior engineers spend a huge amount of their time. As such, I would rather expose you to strict autograded assignments that encourage you to develop rigorous testing infrastructure for your projects and assignments. I am convinced that this is the best way to prepare students to enter the job market and gain value from their education.
Piazza is the primary resource for communicating with course staff. You are allowed to ask general questions, however, you must not post your own entire solutions to projects (doing so is a violation of the Honor Code). Please make private posts if you are unsure whether your question contains too much sensitive code.
If you have a private issue to discuss, email Kevin Leach at kevin.leach@vanderbilt.edu and Cc our TA Skyler. Please put CS 4288 in the subject line of any email-based correspondence about this course.
This course contains 5 programming assignments. The first is individual, and the remainder are in optional groups of 2 to 3. You can form a different group for each project. Course staff will randomly assign a group if you like. Groups are recommended, but not required.
All team members will normally earn the same grade on their joint work. You are expected to resolve conflicts that may arise with your group members. The course staff may ask group members about each member's contributions if conflicts arise.
You must register your groups on the autograder before you submit. If you attempt to submit assignments and form a group later, we may not grade your assignment submission.
The autograder will show you your grade for each assignment. You have 5 submission tokens per day. After you run out of tokens, you cannot submit any more for a grade. This is meant to encourage you to test locally before submitting (e.g., to reflect industrial practice of testing software before shipping it to the customer).
There are two exams this semester (see the Calendar). These cover all lecture, and project materials.
A midterm exam will be administered during a course lecture slot. The final exam will be comprehensive and take place on our scheduled slot of Saturday, December 6, at 9am (sorry!).
During exams, you are allowed to refer to a single sheet of notes, front and back, on letter paper, 8.5"x11". You can use this sheet however you like, typed or handwritten, etc. You may not use electronic devices during exams.
From time to time, we will administer quizzes to ensure that you are staying on top of the material. There are no extensions or make ups for quizzes, and absolutely no late quizzes accepted.
The late policy is established only for Projects. We will not accept late quizzes. The autograder provides up to 4 late day tokens that you can use throughout the semester. If you want to submit a Project late, each day late you submit will consume 1 late day token. Note that students have their own late day tokens; thus, a group submission will use a late day token from each member. If group members have different numbers of late day tokens, then only those members with a token remaining will be able to receive a grade for the late submission.
To the extent possible, you must let us know in advance if you need to delay taking an exam.
Please contact the course staff via Private Piazza post or via email (to both Kevin and Skyler with CS4288 in the subject line) if you have some other extenuating circumstance (e.g., illness, bereavement). We may make extensions or other arrangements for students with such circumstances.
It is your responsibility to know the project deadlines and how late you are submitting.
Your grade is computed as follows
| Assignment | Percentage of Grade |
|---|---|
| Programming Projects | 10% each (50% for all 5) |
| Exam 1 | 20% |
| Final Exam | 20% |
| Quizzes | 5% |
| Participation | 5% |
To pass the course, you must receive a passing average Project score and a passing average Exam score. By default, the threshold for "passing" is 70%. However, if exam averages are lower than 80%, the passing threshold for the exams will be lowered to one standard deviation below the average exam score.
The Participation component of the grade is primarily used to reward students for in-class participation and participation in the Piazza. We may take attendance each class from time to time, provide extra credit to students who attend class, and give credit to students who contribute meaningfully to the Piazza forum.
Please let the course staff know in advance if you require accommodations for exams. We require you to submit accommodation requests at least 2 weeks before each exam.
We do not provide accommodations for quizzes.
As a research university, we may collect data about your completion of assignments in anonymized or de-identified form for aggregate analysis. If you would not like to participate in any research, please let the instructor know via email at kevin.leach@vanderbilt.edu.
This course is adapted from another course at the University of Michigan, which has successfully been taught since 2017 to thousands of students. It is possible that you come across online materials that relate to this course. Although the material changes every semester, we do retain every single submission ever made by any student who ever took this course. We will use automatic plagiarism detection software (take CS3276 for more information about why software plagiarism detection is feasible). Please do not use online repositories of similar project code -- odds are, we almost certainly know about it and will discover your use of it.
Generative AI and Large Language Models are disruptive technologies that provide increasingly fascinating capabilities. While I am not opposed to attempts to use LLMs for completing the Projects, I will note the following caveats: