CS 100: Software Construction

Spring Quarter 2004: March 29, 2004 - June 4, 2004


Less: Basics Coordinates Books Schedule Project Teams Assessment   |   More: Scores Policies

Basics

Catalog Description: Development and construction of software products. Topics include design, coding layout, and style; implementation strategies; quality attributes; prototyping, reuse, and components; debugging, testing, and performance; integration and maintenance; documentation; standards, analysis, and selection of tools and environment; and personal software processes.

Prerequisite(s): CS 141: Intermediate Data Structures and Algorithms. Let me emphasize that you should be reasonably comfortable with C++ programming and the Unix environment, otherwise you will spend more time "catching up" than doing course work. You should also have reasonable writing and presentation skills, or at least you should be willing to develop them.

Time Requirements: Four units (12-16 hours/week): lecture (3 hours/week), laboratory (3 hours/week), individual study (6-10 hours/week; includes reading, writing, and hacking).


Coordinates

Instructor: Peter H. Fröhlich
Office Hours: Monday, Wednesday, Friday, 11:10 am - noon (email for additional appointments)
Location: Surge, Room 341

Lectures: Monday, Wednesday, Friday, 10:10 am - 11:00 am
Location: Sproul Hall, Room 2355

Assistant: Ying Xu
Office Hours: Wednesday, 2:10 pm - 3:10 pm (email for additional appointments)
Location: Surge, Room 282

Lab: Tuesday, 11:10 am - 2:00 pm
Location: Surge, Room 283

Assistant: Nelson Perez
Office Hours: Wednesday, 11:00 am - noon (email for additional appointments)
Location: Surge, Room 282

Lab: Tuesday, 2:10 pm - 5:00 pm
Location: Surge, Room 283

Mailing List: cs100@lists.cs.ucr.edu (Archive)


Books

Required

Andrew Hunt, David Thomas: The Pragmatic Programmer. Addison-Wesley, 1999. A wealth of practical advice on various topics relevant to software construction, including design, implementation, testing, debugging, etc. Organized in 46 relatively small "lessons," extensively cross-referenced, including 70 "rules" and several check lists on a reference card. You can download additional material for this book here. An errata is available.

Recommended

Martin Fowler: UML Distilled. Addison-Wesley, 3rd edition, 2003. Succinct introduction to the Unified Modeling Language (UML) and also a concise summary of basic software engineering and software construction concerns. The 2nd edition is also good enough for the course, and it's available much cheaper.

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Design Patterns. Addison-Wesley, 1995. The standard reference for object-oriented design patterns: well-documented solutions to recurring design and implementation problems. The case study in chapter 2 is also a great introduction to object-oriented design and programming.

Also Running

Brian Kernighan, Rob Pike: The Practice of Programming. Addison-Wesley, 1999. Succinct discussion of a variety of programming topics. Deals with style, documentation, design, testing, debugging, portability, etc. Uses several programming languages (C, C++, Java, Perl) and discusses the tradeoffs involved. I used this one in Spring 2003 as the main text, but I think the new choice is more comprehensive and accessible; still, get this one if you feel like it, goes nicely with the current text. An errata is available.

Barbara Liskov, John Guttag: Program Development in Java. Addison-Wesley, 2001. Do not be fooled by the title. This is an excellent advanced programming text that deals with many software engineering concerns as well. If you want to learn some Java and along the way pick up lots of programming and design skills, get this book.

Steve McConnell: Code Complete. Microsoft Press, 1993. Another excellent advanced programming text, again covering many software engineering concerns as well. This is a real classic, but currently out of print as far as I know. An errata is available.


Schedule (Tentative!)

Note the word tentative above. Things seldom go according to plan, and I expect changes here and there as we go along. Please also read the notes below.

Week Lecture Lab Assignment Exam Reading
1 Software Engineering [Lecture 1], Requirements (H 36) [Lecture 2], Teams (H 41) [Lecture 3] Register Teams, LaTeX [The Not So Short Introduction to LaTeX], Boost project, filesystem library, Discussion: Broken (H 2), Frogs (H 3) [Assignment 1] [LaTeX Template] [libboost archive] - Preface; H 1, 2, 3, 5, 6, 15, 36, 41
2 Reviews [Lecture 4], Style [Lecture 5], Estimating (H 13), Documentation & Writing (H 44) [Lecture 6] Register Teams, XHTML, doxygen, Discussion: Plain (H 14), Editing (H 16) [Assignment 2] - H 13, 14, 16, 32, 44
3 Configuration Management (H 17) [Lecture 7], Automation (H 42) [Lecture 8], Debugging (H 18) [Lecture 9], Subversion, cron, make, gdb [Assignment 3] [Quiz 1]
[Solution]
H 17, 18, 19, 42
4 Assertions (H 22, 23) [Lecture 10], Contracts (H 21) [Lecture 11], Algebraic Specifications [Lecture 12] nana, Discussion: Balancing (H 25), Puzzles (H 37) [Assignment 4] [debug.tar.gz] - H 21, 22, 23, 24, 25, 37
5 Guest Lecture (Dan Berger), Midterm Review Open Lab: Introduction to Python [Instant Python], Midterm Review - [Midterm]
[Solution]
all the above
6 Testing (H 34, 43) [Lecture 13] [Lecture 14], Performance [Lecture 15] gcov, gprof, Discussion: Enough (H 4), Ready (H 38) [Assignment 5] - H 4, 34, 38, 40, 43
7 Performance [Lecture 16], Object-Oriented Programming & UML [Lecture 17], More OOP & UML, Law of Demeter (H 26) [Lecture 18] UML Case Study, Discussion: Reversibility (H 9), Coincidence (H 31) [Assignment 6] [mem.py tool] - H 7, 8, 9, 26, 31, 33
8 Design Pattern: Composite [Lecture 19], Design Pattern: Observer, Views (H 29) [Lecture 20], UML Case Study: Adventure [Lecture 21] UML Case Study, Design Pattern: Factory Method & Iterator, Discussion: Domain (H 12), Code (H 20) [Assignment 7] [Quiz 2]
[Solution]
H 12, 20, 29, 35
9 UML Case Study: Adventure [Lecture 22], Design Pattern: Decorator [Lecture 23], Design Pattern: Visitor [Lecture 24] UML Case Study, Design Patterns: Proxy & Strategy, Discussion: Expectations (H 45), Pride (H 46) [Assignment 8] [Parnas Paper] - H 10, 11, 39, 45, 46
10 Legal Issues [Lecture 25], Comprehensive Review Open Lab: Comprehensive Review - [Comprehensive]
[Solution]
complete text

Notes

Open Lab means you can attend any lab section offered that week: You don't have to attend the one you're enrolled in, and you can even attend all of them if you want to.

The term "H s" refers to the required text by Hunt et.al.; for example, "H 27" refers to section 27. It's a good idea to skim related sections as well (as indicated in the book).

Bold sections are not discussed in lecture or lab (unless you ask about them), but the material is relevant. Some topics we go over in lecture or lab are not covered in the text; I will try to provide additional references for those.

You are expected to do the assigned reading before a topic is covered in lecture or lab. Reading assigned in the week of an exam is part of the exam (except for the entrance exam of course).

The department's programming guidelines make for quite interesting reading, often highly relevant to this course.


Project

There is not really a "distinct" project in CS 100, instead all project work is integrated with the weekly assignments. In Spring 2003, the assignments focused on an improved implementation of the standard Unix wc command, the so-called "word count" tool. In Fall 2003 the assignments focused on a "schedule generator" application called sg, which takes a plain text list of events and produces nice XHTML output. In Winter 2004 the assignments focused on a "find duplicate" application called fd, which recursively explores a directory tree and produces list of duplicate files and subtrees.

This quarter, the assignments will be about a tool code-named du2. Sounds familiar? It should, there is a standard du already, part of almost every Unix version. Maybe we are just running out of ideas? Just type man du into a shell to see what the tool is supposed to do. :-) More details on what your du2 must be able to do will be given as we go along.


Teams

Team Members Subversion
JJPQS Steven (Turnin Person), Quang, Pioneer https://www.cs.ucr.edu/svn/cs100/jjpqs/
MantiCorp Zachary (Turnin Person), Adam, Rima https://www.cs.ucr.edu/svn/cs100/manticorp/
The Ones Chris (Turnin Person), Julia, Moses, Mohsen, Evelyn https://www.cs.ucr.edu/svn/cs100/ones/
CCG Jack (Turnin Person), Timothy, Kevin, Jacob, Tom https://www.cs.ucr.edu/svn/cs100/ccg/
Coding Ninja Phong (Turnin Person), Hou-Yin, Charles, Dominic, Ruben https://www.cs.ucr.edu/svn/cs100/ninja/
Gardeners Lorenzo (Turnin Person), Jesse, Patrick, Suraj, Mashiku https://www.cs.ucr.edu/svn/cs100/gardeners/
Doughnut Soft Nicholas (Turnin Person), Steve, Douglas, Chuck, James https://www.cs.ucr.edu/svn/cs100/doughnut/
RMRV Robert (Turnin Person), Vivian, Rocky https://www.cs.ucr.edu/svn/cs100/rmrv/
Worst Programming Team Ever Brandon (Turnin Person), Steven, Kevin https://www.cs.ucr.edu/svn/cs100/wpte/
Programmers Gone Wild John (Turnin Person), Melissa, Michael, Hubert, James https://www.cs.ucr.edu/svn/cs100/pgw/

Assessment

Assignments (8): 40%, Quizzes (2): 10%, Midterm (1): 20%, Comprehensive (1): 20%, Peer Review (1): 10%. See my policies for more information.


Copyright © 2003-2004 Peter H. Fröhlich. All rights reserved.
$Id: index.html,v 1.28 2004/05/26 02:51:59 phf Exp $
Valid XHTML 1.1!