This is a course for students who already have some programming and
software engineering experience, e.g., at MIT the prerequisite is 6.170,
Laboratory in Software Engineering. In 6.171 we try to give students
some experience in dealing with those challenges that are unique to
The bottom line: we want one someone who has finished this course to be
able to build amazon.com, eBay, or photo.net by him or herself.
- concurrency -- 1000 people might be using the system at the same
- unpredictable load -- 100,000 users might show up tomorrow even if
only 100 are using the system today
- security risks -- an Internet application is forced to expose itself
- opportunity for wide-area distributed computing, i.e., using "Web
services" provided by other machines on the Internet
- creating a reliable and stateful user experience on top of
unreliable connections and stateless protocols
- extreme requirements and absurd development schedules
- requirements that change mid-way through a project, sometimes because
of experience gained from testing with users
- user demands for a multi-modal interface: Web, mobile (WAP), and voice
This is a laboratory course where most of the learning occurs during the
completion of problem sets. Students organize into groups of 2-4 for
the purpose of building an online learning community. Each problem set
is devoted to adding features and capabilities to the online community.
We encourage students to work with a real customer or client. Good
sources of clients for online communities include organizations that
want knowledge sharing systems (intranets) and non-profit organizations
that wish to operate a public online learning community within their
area of expertise. Students who themselves have a passion for a
particular topic sometimes build an online community in that area.
Student groups are free to choose any set of programming tools that will
get the job done. The only requirement imposed by the course is that
the source of persistence for the community be an ACID-compliant
relational database management system (RDBMS). Examples of such systems
include Microsoft SQL Server, Oracle, and PostgreSQL (free and
open-source). Students are free to choose an operating system, a Web
server, and a procedural programming language for page development.
Regardless of programming tools chosen, every student in 6.171 will
get experience with Internet standards such as HTTP, HTML, WAP, WML, and
VoiceXML. Every student will learn how to use the RDBMS and SQL
programming language. Every student will learn how to build distributed
computing systems with standards such as SOAP and WSDL.
This is a senior-level class at MIT where we expect the average student
to be working on a bachelor's or master's degree in computer science, to
have taken our introduction to computer science (6.001), to have taken
our core software engineering class (6.170), and to have done at least
some programming during summer jobs.
That said, the class does not require any knowledge of particular
computer languages or systems. I.e., the students will learn enough
about the required tools as the course progresses.
Basic Course Structure
- Lectures: 2 hours per week
- Public Site/Code Review: 1 hour per week
- Supervised/Cooperative Lab: 6 hours per week
Basics: more or less the old pset 1 but remove references to specific
technologies and put those into a supplement. On MIT calendar: 1.5
Global Competitive Analysis: write down some usage scenarios and work
through them on some other sites on the Internet that have similar
objectives. On MIT calendar: 0.5 weeks.
User registration and management. Support grouping of users. Include
the issue of whether or not to implement a party system. On MIT
calendar: 1 week.
Content management. Need to capture authorship, approval, moderation,
reference ("X is a comment on Y" or "A is a reponse to B"). On MIT
calendar: 2 weeks.
Software Modularity. Need a way to group all the code for a module,
record the docs, publish APIs to other parts of the system, read
configuration parameters. On MIT calendar: 1 week.
Discussion. The most basic Web service, built on top of the content
management system. Support categorization, moderation, breakout and
reassemble. Include a user test. On MIT calendar: 2 weeks.
WAP and voice interfaces. Build a WAP interface that lets someone on
a mobile phone participate in the community. Build a voice interface
that lets someone on a regular phone participate in the community. In
2001 this will most likely use VoiceXML and the tellme.com
infrastructure, though it would be nice to use a more sophisticated
conversational system such as LCS JUPITER. On MIT calendar: 1 week.
Distributed Computing. The world of Web services. Introduces standards
such as SOAP, WSDL, and UDDI. On MIT calendar: 1 week.
Scaling gracefully. Geospatialization. An "interesting person"
system. On MIT calendar: 1 week.
Full-text search. On MIT calendar: 1 week.
Personalization. Users picking subject areas of interest,
categorization of content. Then getting more advanced with full-text
comparison tools to measure similarity and dissimilarity to items
previously marked by a user as good or bad. On MIT calendar: 1 week.
Goodbye to all that (manual coding). Autogeneration of data model and
user experience scripts. Either building a structured knowledge
management system within the subject area of the site (a la problem
set 4) or finding some similar challenge that is idiosyncratic to the
service being developed. On MIT calendar: 1 week (make it a bit
easier than the old pset 4).
Writeup. A final overview paper with screen shots illustrating the
most important aspects of the Web service built. Designed to be no
more than 5 pages; one continuous Web document that can be entirely
consumed by scrolling.
The course includes an easy mid-term and a more difficult final exam.
The exams concentrate on ability to think critically about the user
experience plus some RDBMS fundamentals and data modeling skills.
The required textbooks for the class are both available online:
If you are using the Oracle RDBMS, we strongly urge you to purchase
The Complete Reference (or an updated version if available).
The official Oracle RDBMS documentation is available at otn.oracle.com (registration free but
particularly recommend the Application Developer's Guide. However, the
rest of the Oracle docs are often too detailed for beginners, which is
why the Oracle Press Complete Reference is so useful.
We also recommend Visual
Explanations : Images and Quantities, Evidence and Narrative (Edward
Tufte 1997; Graphics Press).
Adoption by Universities and Companies
This course is designed for easy adoption by other universities. We
provide the following materials online for free:
You may wish to provide a computing environment for your students.
Students have been most successful using either Microsoft .NET (Windows
2000 only; one machine per student) or AOLserver/Oracle (a single pizza
box Unix machine can support 10 students).
- problem sets (incorporated in main text)
- lecture notes
- sample exams (on request)
This course was developed by Hal Abelson (firstname.lastname@example.org), the late Michael
Dertouzos, and Philip Greenspun (email@example.com).
Bottom line: about 1000 CS majors have gone through this curriculum and
all but about 30 have become competent database-backed Web service
developers. A more detailed history and explanation of this course is
available from http://philip.greenspun.com/teaching/teaching-software-engineering.
- Fall 2003: offered as MIT course 6.171
- Spring 2002: offered as MIT course 6.171
- Spring 1999: offered as MIT course 6.916: Software Engineering of
Innovative Web Services (3-0-9).
- Summer 1999: offered as an intensive summer course at University of
Hamburg and New York University, as a 5-week boot camp (three psets plus
Unix sysadmin and Oracle dbadmin), and as a 2-week boot camp (psets 1
- Fall 1999: adopted by California Institute of Technology; offered
again as MIT course 6.916
- Winter 2000: offered as an intensive 9-unit course during MIT's IAP;
- Spring 2000: repeated as MIT course 6.916, offered to remote
students at UC Berkeley (thanks to Doug Tygar (firstname.lastname@example.org) and
Stanford University (thanks to Jeff Ullman, email@example.com)
- Spring/Summer 2000: offered as CS190 at UCLA, taught by Robert
- Summer 2000: adopted by University of Michigan, taught by
- June-December 2000: adopted by UFM
(Guatemala City, Guatemala), taught by
- Spring 2001: offered at Carnegie-Mellon, University of New South Wales
(Sydney, Australia; led by
- May 2001: "Teaching
Software Engineering" paper presented at the Web conference in Hong
Kong, describing our experience with the course and the rationale behind
the new curriculum and textbook
- Spring 2002: the revamped version offered at MIT as 6.171
Ancient History: if you came here looking for links to the old problem
sets and texts, please visit http://philip.greenspun.com/teaching/old-one-term-web-6916.
Here are some examples of good things have happened in or because of
A reasonably complete list of old projects is available at
In addition to continuing public sites, 6.916/6.171 has also produced a
few startup companies as students who took the course together continued
their collaboration in industry. [Of course, that was in the go-go
years of the Internet; now most of the students graduate and take jobs
at IBM, Microsoft and Oracle.]
from Spring 1999
is another example of a site developed in Spring 1999 by a student team
that continues to run on the public Internet. It was extended by Jesse
Koontz and is now maintained by the photo.net team. The system permits
the 105,000 registered users of photo.net (August 2001) to share and
comment on uploaded photographs.
from Fall 1999
continues to serve the residents of a public housing project in
inner-city Boston (see http://www.media.mit.edu/~rpinkett/papers/camfield-mit.html
for background on this project by Randal D. Pinkett, a Media Lab
from Fall 2000
- MIT UPV is online and providing
an international cultural exchange for hundreds of students at MIT and
Valencia, as described in this WIRED