Course Missive

Building a Web Application

Computer Science 9-03, Fall 2004

Professor Steven P. Reiss

Welcome to CS009-03, a new course in which you, the students, will build a real, commercial-scale, web application for a real client. Hopefully, along the way you will learn new technologies, understand some principles of system design and development, and even have a little fun.

Objectives

The educational purpose of this course is to introduce the tools and techniques that are involved in designing and implementing modern, web-based applications. The course will focus both on software engineering, the science of developing quality software, and on the various technologies that are relevant to web applications including HTML, middleware languages such as Perl and PHP, and databases.

The best way to learn these topics is through practice and you will be doing a lot of practise. We have a real-world client who needs a relatively sophisticated web application built by the end of the semester. Our goal is to get a prototype version of this application built by Thanksgiving and then to iron out the quirks so that by the time exams start in December, we have a complete application that we can demonstrate not only to others in the department but to the community at large.

Audience

This course is designed as a freshman seminar, i.e. it is designed for students who are not sophisticated programmers and who do not have a serious background in Computer Science or the web. At the same time, the course does involve serious system building (although not programming per se), and it assumes some background on the part of the student. Everyone taking the course should have some experience in either programming (say one or more high school courses or a summer job) or in web design (designing and implementing your own or someone else's web pages) or both. I expect everyone to bring some expertise of their own to the table and to share that expertise with the class. If you're a complete novice in both these areas, you are quickly going to become lost and will not succeed in the course. Worse, you will be a drag on the others in the course since the whole course involves a group project for which we need all hands to contribute.

Project

The project for this course is to develop the web site and underlying application for enrichanother.com. This is essentially an ebay for charities and charitable donations. A summary document is attached and you will be getting lots more details in the next few weeks. This project has real-world clients, notably Pat Mastors (TV news anchor on Channel 12 Providence) and her husband. They want to have a working system in time for the holidays, so we will be trying to get everything done by the end of the semester.

Mechanics

Class will meet every Tuesday and Thursday at 9am in CIT 345. Class sessions will involve a combination of lectures, discussions, student presentations, group project meetings, and demonstrations. You are expected to contribute to the discussions, ask questions at the lectures, make high-quality, informed presentations, and take an active role in group meetings. You are also responsible for all the material mentioned in class, whether you are there or not.

The readings will be based on the text book, Web Applications: Concepts and Real World Design , by Craig Knuckles and David Yuen. Generally, the assignments will be to read all or part of a chapter. You don't have to memorize the material, but should become familiar with it. If the material in the reading is new for you, you are encouraged to try some of the exercises in the text. Don't expect to pick up the material solely from the lectures; the lectures will assume that you have done the reading and achieved a basic understanding and will address the practicalities more than the underlying principles. Note that part of the text (chapters 14 and beyond) is only available online. Many of the more technical topics such as HTML, Perl, or PHP are only partially covered by the text book. For these topics there are numerous resources, both available in the bookstore or as on-line tutorials and references. When you are actually using these languages, you might prefer and are encouraged to use one of these other resources. Note that reference books covering these topics will probably have a utility far beyond this particular course.

Homework will focus on learning the material through reading the text (and additional materials as appropriate), and on practicing the techniques that are being taught, generally through work on portions of the project. You are encouraged to work in small groups on the project work, checking each other's code and designs and generally providing additional feedback. While little of the homework will be handed in and graded, you should get appropriate feedback on your work when you do in-class presentations based on it and you demonstrate your portions of the system to the class.

Each student will be responsible for a portion of the group project. We will segment the project in terms of "stories", i.e. particular interactions that have a user undertaking one of the actions allowed by the system. Each story will involve a set of web pages that drive the interaction, middleware to control what is going on, and database access in the backend to handle updates and effect the proper actions. The stories will be chosen so that there is little overlap and so together they are the project. This will be explained more fully as we get into the course.

In addition to their project responsibility, students will be asked to take on additional roles as a particular czar for the project. Each czar will be responsible for a single aspect of the project, sometimes acting as a focus to gather and organize information from everyone, sometimes providing technical support, sometimes acting as a leader on one aspect of the project. Czars will generally be selected based on the technical background and experience of the students and it will be possible to volunteer for particular positions if you have preferences.

There will be no final exam in the course. Instead we will schedule a public demonstration of the project in which each of you will be able to show off the work that you have done. Grades will be based on the quality of your portion of the system, your class participation, your in-class presentations, and how well you handle whatever czar-ships you are assigned.

Personal

Steven Reiss is the professor for the course. He is generally available for questions or discussion during weekdays from 8-5 in CIT 403. Better yet, you can contact him by email at spr@cs.brown.edu.

We also have an undergraduate TA for the course, Raphael Lee. He will provide you with help as needed, will offer additional sections on technical topics when required, and will help guide the project. His email is Raphael_Lee@brown.edu.

Accounts

You will be provided with a Computer Science account in addition to your Brown computer account. Information on this will be provided in the first class. Much of the work for the class can be done on either your personal machines, in the various University clusters, or on one of the CS department machines (e.g. the Sun lab on the first floor of the CIT). Once we start putting the pieces of the project together we will need to work on a common set of machines; this will be worked out in the course when the time comes.

We will also set up a news group on the Brown news server. You should use the newsgroup for most common postings and are responsible for reading any postings there by the professor or the TA.