I propose that the World Wide Web would serve well as a framework for structuring much of the academic Computer Science curriculum. A study of the theory and practice of the Web’s technologies would traverse many key areas of our discipline. Furthermore, there is a natural way to structure such a traversal to support a course of study stretching over many semesters.
(One side-effect of such an approach is that graduates would enter the workforce with significant exposure to a suite of technologies that would likely be valuable in their professional careers. But that’s not the argument I’m making here.)
In the following layout, the course numbering implies a first guess at levels and prerequisites. Since I’ve never designed a curriculum before and my own undergraduate study is decades in the past, it’s quite likely that my suggestions as to the number of courses and semester levels need improvement.
Web 101: Architectural Introduction · Core idea: Teach what happens when you click on a link and a page with some multimedia and personalization is rendered for you.
To be covered: What a browser and a server are. What HTML, CSS, HTTP, and URIs are. What CGI and application servers are. An initial look at the underlying architecture.
Sample exercises: Deploy a web server. Write some simple HTML/CSS pages with a text editor. Write CGI scripts in a high-level language to produce personalized pages.
Web 210/310/410: Data Structures and Algorithms · Core idea: The classic center of the CS curriculum.
To be covered: All the usual stuff. The Web dimension comes from the use of a Document Object Model implementation as a teaching aid.
Sample exercises: Incrementally build more and more of a DOM implementation, probably in a low-level language like C or Java. A wide variety of important data structures and algorithms can be put to good use in such an implementation.
Web 220: Principles of Networking · Core idea: Classic survey of networking basics.
To be covered: This is a straightforward computer-networking course, making a conventional traversal of the stack.
Sample exercises: Implementation of a small lightweight Web server that accepts connections and serves requests for files from the filesystem.
Web 230: User Interfaces · Core idea: Survey UI issues, but assuming the browser as a delivery platform, to put the focus on the content not the technology.
To be covered: Principles of usability, user experience design, brief introduction to typography and design issues, evaluation techniques. On the implementation side, MVC.
Sample exercises: Build (in groups) a Web user interface to a score-keeping system for some sport, evaluate its usability, improve it.
Web 320: Application Protocols · Core idea: Distributed applications are based on various flavors of message-exchange pattern. This is a survey of the options.
To be covered: Streaming protocols, session-oriented protocols, HTTP-style “message exchange” protocols.
Sample exercises: Implement selected portions of WebDAV, XMPP, and AtomPub.
Web 340/440: Persistence · Core idea: Study the issues surrounding persistent storage of data.
To be covered: Filesystems. Byte- and record-oriented storage. Relational databases. Document databases and distributed hash tables.
Sample exercises: Build some of the pieces of an application like Twitter or Facebook, implementing efficient storage and retrieval of different kinds of information resources.
Web 350: Parsing · Core idea: Study methods for extracting structure from textual inputs.
To be covered: The usual, including grammars, automata, and other parsing strategies. Text representation, especially Unicode.
Sample exercises: Build parsers for HTTP headers, then for JSON, then for XML, then for ECMAScript.
Web 351: Data Format Design · Core idea: Study the techniques and trade-offs that arise in designing data formats.
To be covered: Media data formats (JPG, PNG, video), Binary data formats (ASN.1, protocol buffers), textual data formats (JSON, XML). Compression.
Sample exercises: Implement a PNG reader, design (in a group) a non-trivial XML language.
Web 360: Security · Core idea: Study techniques for implementing computer programs assuming the presence of large numbers of technically-skilled malicious users.
To be covered: Introduction to digital signature and encryption technologies. Threat analysis. Social engineering. Viruses, worms, botnets, and other villains.
Sample exercises: Implement a brute-force attack on an obsolete encryption technology. Write a recommendation on how some well-known successful criminal exploits could have been averted.
Web 470: Issues in Large Distributed Systems · Core idea: Study problems that arise in systems much too large for a single computer.
To be covered: REST, Naming objects (DNS, URIs, other naming schemes). Caching. Partitioning workloads. Web crawling. Functional programming. Error handling.
Sample exercises: Implement something that uses the DNS. Learn the ideas behind Erlang and Map/Reduce. Write a small-scale Web crawler.
Web 480: Concurrent Systems · Core idea: Study the options for making use of modern highly-concurrent computer platforms.
To be covered: Threads, processes, actors, message-passing.
Sample exercises: Implement message-passing infrastructure in a functionally-flavored language (Scala, Erlang) and in a conventional procedural one (Java, Ruby).
What’s Missing? · The Web Curriculum doesn’t cover all of CS. Here is a (doubtless non-exhaustive) list, in no particular order, of important subjects where a Web-centric academic approach would not obviously be of help:
Number representation and arithmetic.
Computer system architecture.
Analysis of algorithms.