Fall 2026
  • Discord
  • Gradescope
  • Syllabus

CSCI 40: Computing for the Web

An introduction to computing, built around one idea: automate the boring stuff.


Instructor: R. Teal Witter. Please call me Teal.

Class Times: Mondays and Wednesdays from 1:15 to 2:30pm in Robert Day 126.

Office Hours: Tuesdays from 1:00 to 4:00pm in Adams Hall 213.

Labs: Most weeks have a short lab. Public tests and GitHub Actions give preliminary feedback; instructor-owned tests on Gradescope determine the grade. You keep resubmitting until you score 100%, so a lab is done when it is done.

Quizzes: Short weekly quizzes, taken on paper. They are open-note: bring any printed or handwritten notes you like, but no electronic devices. Each week’s practice bank is linked below; we work through it together in class, and the graded quiz is a short version I hand out on paper the day of.

Projects: Every two to three weeks you build something real: a webpage, a web scraper, your own ChatGPT, a Twitter clone. Projects carry generous extra credit and “choose your own adventure” tasks.

Resources: There is nothing to buy. Each week has a reading in place of a textbook; the primary references are Shay Howe’s Learn to Code HTML & CSS and Al Sweigart’s Automate the Boring Stuff with Python. Course materials are adapted from Mike Izbicki’s CSCI 040.

Course overview: The course starts with a webpage and ends with a working web application. Each project reuses tools from earlier weeks.

  • The Web - A few lines of HTML and CSS can turn an idea into a public artifact that anyone with a browser can use.
  • Python Foundations - Python gives us a precise way to break repetitive work into small steps a computer can perform reliably.
  • Working with Data - Programs can collect, transform, and connect information from different places.
  • Web Applications - A web application brings the whole course together by responding to people, remembering state, and producing a new page on demand.
Date Topic Lab Quiz Project
The Web
Mon Aug 31 · Wed Sep 2 HTML Hello, Homepage (due 9/9) Practice · Answers Project 0 (due 9/16)
Mon Sep 7 · Wed Sep 9 CSS Dress It Up (due 9/16) Practice · Answers
Python Foundations
Mon Sep 14 · Wed Sep 16 Python Doctests (due 9/23) Practice · Answers
Mon Sep 21 · Wed Sep 23 Strings & Files Video Download & Encodings (due 9/30) Practice · Answers Project 1 (due 10/7)
Mon Sep 28 · Wed Sep 30 Exceptions Cowsay & Password Cracking (due 10/7) Practice · Answers
Working with Data
Mon Oct 5 · Wed Oct 7 Web Scraping Trump Tweets & Selector Golf (due 10/14) Practice · Answers Project 2 (due 10/21)
Mon Oct 12 · Wed Oct 14 The Shell The Messy Repo (due 10/21) Practice · Answers
Mon Oct 19 · Wed Oct 21 Objects & Classes Pull Requests & Classes (due 10/28) Practice · Answers
Mon Oct 26 · Wed Oct 28 LLMs More Project Setup (due 11/4) Practice · Answers Project 3 (due 11/11)
Mon Nov 2 · Wed Nov 4 Syntactic Sugar Wardialing (due 11/11) Practice · Answers
Mon Nov 9 · Wed Nov 11 Regular Expressions Redacted (due 11/18) Practice · Answers
Mon Nov 16 · Wed Nov 18 JSON & Alternatives Rosetta Stone (due 12/2) Practice · Answers Project 4 (due 12/2)
Web Applications
Mon Nov 23 · Wed Nov 25 SQL APIs & Web Interfaces (due 12/2) Practice · Answers Final Project (due 12/16)
Mon Nov 30 · Wed Dec 2 Backend Web Dev FastAPI App (due 12/9) Practice · Answers
Mon Dec 7 · Wed Dec 9 Last Day Capture the Flag (optional; due 12/16) Practice · Answers
Wed Dec 16 · 2:00–5:00pm Final project demos Final Project (due 12/16)