AICG Syllabus Lecture Blog Discussion Documentation The RGSE Assignments


In this course, we will learn about software engineering by creating a significant piece of software—a large, multi-faceted software system. This will be a team project in which the class will be formed into sub-teams that tackle specific parts of the design, and integrate their pieces into a whole.

We will learn how to design software by reading case studies of large software design projects, considering theory of well-designed software, and reflecting on the design process as our own projects are underway.

From a technical perspective, we will:

  • Discuss requirements elicitation, agile design, the role of documentation, design patterns, test-driven development, the second-system effect, and the role of community / peer-pressure in sotware design.
  • Use the following technologies: JavaScript, qooxdoo, App Engine
  • Work with source code control

A Bit More...

To generalize, there are two types of software engineering classes one in which everyone builds the same thing, and one in which everyone builds something different. The former is good because it lets instructors focus in on specific and particular theoretical material. Instructors know exactly what problems you will be encountering as you write code, because they have created the design challenges expressly to expose certain ideas! A great example of this type of class is MIT's course 6.170, Laboratory in Software Engineering.

On the other hand you have courses that are more representative of life in the unstructured real-world, where every project is indeed different. As described by Diane Pozefsky in her Software Engineering Laboratory at UNC, this course is a “faculty-coached team project.” Student teams in this type of class might each have a different client and be working with wholly different software technologies.

Here, we will take a middle ground. Primarily, we will have project implementation as the heart of the class. But we will all be working a joint project, and will share code and technologies.

Required Books

We will use one required book. It is ordered and available now at the UML North Bookstore. Please buy it there to make sure you have it right away:

The Mythical Man-Month, 20th Anniversary Edition (1995)
Frederick P. Brooks
This is a landmark book on software engineering. It was written in 1975, but it's based on the experiences of lead designer of the IBM System/360 mainframe project in the 1960s. It was updated 20 years later. The book gets more and more relevant as the years pass, because its core thesis remains true, even as technology advances: adding more people to a late software project makes it even later!!

There will be other readings, including essays published on the web and material photocopied from out-of-print books. The latter will be handed out in class. The current reading assignment is always here.


This is a project-driven course with a reading component. Discussion, writings, and other reflections on the readings will illuminate your design process as you are engaged in your own software development.

The first third of the course will involve traditional weekly assignments.

This will be followed by two (approx. 5 week each) software development cycles.

Build Technology

We will standardize on Ubuntu Linux as the development operating system, and Emacs as the text editor. We will have coding standards that will be easier to keep uniform if everyone uses Emacs.

Command line tools will be used for source code management and build.


During the first third of the course, work will be done individually.

During the second two-thirds (the software development cycles), work will be done in teams of two to three persons.

Teams will rotate between the first development cycle and the second.

Discussion Group / E-Mail List

We will use Google Groups for class conversation and announcements. Please join this group. I'd advise setting it to send email to you directly.

⚠ (:html:) <table style="border:1px solid #aa0033; font-size:small" align=center> <tr> <td rowspan=3> <img src="http://groups.google.com/groups/img/groups_medium.gif" height=58 width=150 alt="Google Groups"> </td> <td colspan=2 align=center><b>Subscribe to 91412-f11</b></td> </tr> <form action="http://groups.google.com/group/91412-f11/boxsubscribe"> <tr> <td>Email: <input type=text name=email></td> <td> <table style="background-color:#ffcc33;padding:2px;border:2px outset #ffcc33;"> <tr> <td> <input type=submit name="sub" value="Request"> </td> </tr> </table> </td> </tr> </form> <tr><td colspan=2 align=center> <a href="http://groups.google.com/group/91412-f11">Browse Archives</a> at <a href="http://groups.google.com/">groups.google.com</a> </td></tr> </table> (:htmlend:)

The group address is 91412-f11@googlegroups.com. You have to be a member to send to the list.


The following plan will be used in determining course grades:

First third of course 
15%Weekly assignments
10%Written midterm
Project cycles 
25%First project
25%Second project
10%Reading reflections
15%Classroom and online participation