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.
Admission to 6.171 is by permission of instructor. If you'd like to take the class, please fill out the survey (PDF) and return it via email. If you are unsure about whether your preparation is adequate, a good way to find out is by simply doing the work in the first chapter/problem set and including the URL of your running system in your survey. This will reassure us of your ability to install and maintain the multiple subsystems that are, unfortunately, required to support a modern Web application.
Description
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 Internet applications:
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.
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.
Practical Stuff
One of the good things about 6.171 is that students are free to use tools of their choosing in completing the coursework. The upside of this is that if you've had a summer job in which you used Postgres and PHP (for example), you won't be distracted during the semester by having to learn new syntax. The downside is that we, the teaching staff, can't help you very much with setup and administration of tools. Each student is expected to set up and maintain his or her environment, on his or her own computer, ideally a couple of weeks before the start of the semester.
If you have not done any Web development already and therefore aren't familiar with any of the standard tools, we can suggest some ways to configure your development server based on our past experience. The Basics chapter of the course text discusses tool options. In choosing tools, please note that 6.171 requires the use of an ACID-compliant relational database management system. You'll learn the definition of "ACID" during the semester. But for now suffice it to say that MySQL is out; Microsoft® SQL Server, Postgres, and Oracle are in.
Here are some helpful links for things that are either popular or non-obvious:
Basic Course Structure
Lectures:
Two sessions / week
1.5 hours / session
Grading and Required Work
Participation in Design Reviews (30%)
A central activity in 6.171 is presentation of designs and critique of those designs. This happens mostly in class but also via written critiques. When you're presenting, points are given for clear presentations of design decisions and open questions. When you're in the audience or writing, points are given for constructive criticism.
Term Project (60%)
You and your partner(s) will share a grade for the quality of the work that you do during the semester in building an online learning community. Quality is defined as a combination of user experience, the maintainability of the system, and the helpfulness of the documentation.
Mid-term Exam (10%)
The mid-term is a one-week take-home exam, intended to require about 6 hours of work. Your ability to think about data model, user experience, and overall system engineering will be tested.
Textbooks
See the readings section for more information on the required textbooks.
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).
Course History
This course was developed by Hal Abelson, the late Michael Dertouzos, and Philip Greenspun.
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.
Ongoing Glory
Here are some examples of good things have happened in or because of 6.916/6.171:
A reasonably complete list of old projects is available. 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.)