part of Software Engineering for Internet Applications by Eve Andersson, Philip Greenspun, and Andrew Grumet
This is the textbook for the MIT course "Software Engineering for Internet Applications". The course is intended for juniors and seniors in computer science. We assume that they know how to write a computer program and debug it. We do not assume knowledge of any particular programming languages, standards, or protocols. The most concise statement of the course goal is that "The student finishes knowing how to build by him or herself."

Other people who might find this book useful include the following:

If you're confused by the "student knows how to build" statement, we can break it down in terms of principles and skills. The fundamental difference between server-based Internet applications and the desktop applications that students have already learned to build is that server-based applications have multiple simultaneous users. Coupled with the unreliability of networks, this gives rise to the problems of concurrency and transactions. Stateless communications protocols such as HTTP mean that the student must learn how to build a stateful user experience on top of stateless protocols. For persistence between clicks and management of concurrency and transactions, the student needs to learn how to use the relational database management system. Finally, though, this goes beyond the simple standalone service, students ought to learn about object-oriented distributed computing where each object is a Web service.

In addition to learning these principles, we'd like the student to learn some skills. This is a laboratory course, and we want students who graduate to be competent software engineers. We'd like our students to be able to take vague and ambitious specifications and turn them into a system design that can be built and launched within a few months, with the features most important to users and easiest to develop built first and the difficult bells and whistles deferred to a second version. We'd like our students to know how to test prototypes with end-users and refine their application design once or twice within even a three-month project. When business requirements are extreme, e.g., "build me by yourself in three months," we want our students to understand how to cope with the challenge via automatic code generation and use of open-source toolkits where appropriate.

We can recast the "student knows how to build" statement in terms of technologies used. By the time someone has finished reading and doing the exercises in this book, he or she will understand HTTP, HTML, SQL, mobile browsers on telephones, VoiceXML, data modeling, page flow and interaction design, server-side scripting, and usability analysis.

This book is available on the Web, at no charge to readers or other universities that adopt the course, at a permanent URL: If you don't like it, the authors will happily refund your purchase price. :-)

Eve Andersson, Philip Greenspun, Andrew Grumet
Cambridge, Massachusetts
December 2003

Continue on to Introduction

Return to Table of Contents,,