SIMS 255: Foundations of Software Design
Fall 2003

General Information

This course is an intensive introduction to programming principles and practice, to prepare students with a non-technical background to take the more technical SIMS courses. We will cover the fundamentals of how computers work, standard algorithms, data structures, design patterns, and an introduction to formal languages, focusing on regular expressions. We will also study and practice principles of object oriented design and software development.


Brian S. Hayes (
Office Hours: Wednesdays, 10:00 am to 11:00 am
(I'll be asking if a 11:00 to 12:00 is workable)

Teaching Assistants

Nadine Fiebrich (
Office Hours: Wednesdays, 1:30 pm to 3:00 pm in the downstairs lab

Judy Ma (
Office Hours: Mondays, 2:00 pm to 3:30 pm in room 210 (upstairs lab)

Location and Time

The primary lecture meets Tuesday and Thursday from 9am-10:30am in 202 South Hall. The required lab meets Thursday from 2:00pm to 3:30 pm in the South Hall second floor computer lab, room 210.


There are two required text books:

  1. Computer Science: An Overview
    Author(s): Glenn Brookshear
    Publisher: Addison-Wesley Publishing
    ISBN: 0201781301
  2. Data Structures and Algorithms in Java
    Author(s): Robert Lafore
    Publisher: Sams
    ISBN: 0672324539

You can support your SIMS Information Management Students Association (IMSA) by purchasing books through this IMSA web page: Any funds IMSA earns go towards events which benefit SIMS students - such as Casino Night, Alumni Presentations, and Industry Panels.

You may want to ask around to see if some students are interested in selling their used Brookshear book. Also, we probably start using the LaFore book in week 4 or 5.

Course Prerequisites

Students are expected to be knowledgeable of the basics of Java programming. This is discussed in the Programming Competency section of the Masters Admissions Requirements and is further detailed in the Incoming Students Programming Skills web page.


I expect this course to require about 8-12 hours per week outside of class, the amount of time depending on the student's experience with programming and the other material.

There will be readings each week; students are expected to do the readings before lecture. Each week there will also be a required lab session. Often the lab will consist of exercises to better learn the material from class; towards the end of the semester the labs will be used to work on a small programming project (called a mini-project). Students will select a project from among a few choices provided by the instructors.


This course is offered on a Satisfactory/Unsatisfactory basis. To pass the course, students must complete all assignments and must attend all lectures and labs.

I currently do not plan to have any exams; however, if people do not work hard on the assignments, I may introduce a midterm or a final exam.

Students are required to do some assignments on their own, and are allowed to work in pairs for other assignments; details will be specified for each assignment.

Testing Out of the Course

This course is required for all incoming SIMS masters students, unless they test out of the course or opt to take an instructor approved substitute course (such as CS61B).

Anyone who has majored in computer science as an undergraduate or who has taken a significant number of computer science courses should test out of the class.

The exam will be held Wednesday August 27, 2003, from 10:30 am to 12:30 am in room 205.

An exam will be given to those who wish to test out of the course during the lab session on the first week of class. The exam will cover object oriented programming in java, basics of analysis of algorithms, and basic knowledge of data structures.