CS 100: Software Construction

Spring Quarter 2003: March 31, 2003 - June 6, 2003


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

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. 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, hacking, and homework).


Coordinates

Instructor: Peter H. Fröhlich
Office Hours: By appointment only (email me); Monday & Friday, 3:00 pm - 4:00 pm.

Assistant: Terrance Hamilton
Office Hours: Friday, 1:30 pm - 2:30 pm, Surge 358

Assistant: Honomount Rawat
Office Hours: Friday, 12:30 pm - 1:30 pm, Surge 282

Assistant: Ashish Sharma
Office Hours: Wednesday, 11:30 am - 12:30 pm, Surge 282

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

Lectures: Monday, Wednesday, Friday, 5:10 pm - 6:00 pm
Location: Sproul Hall, Room 1340


Books

Author Title Comment
Kernighan, Pike (KP) The Practice of Programming

Required! 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.

Fowler, Scott (FS) UML Distilled

Required! Succinct discussion of a variety of software engineering topics centered on the UML notation. Deals with development processes, use cases, class diagrams, interaction diagrams, state diagrams, activity diagrams, etc. Also discusses various programming techniques.

Hunt, Thomas The Pragmatic Programmer

Recommended! Lots of practical advice on programming and software development in general, e.g. how to organize your code, how to debug, how to test, etc. Similar in intent to the text by Kernighan and Pike, but quite a different approach; the books complement each other nicely.

Gamma, Helm, Johnson, Vlissides Design Patterns

Recommended! The standard reference for design patterns: well-documented solutions to recurring design and implementation problems.

Liskov, Guttag Program Development in Java

Recommended! 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.

McConnell Code Complete

Recommended! 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.


Planned Schedule (Tentative!)

Week Lecture Assignment Exam Reading
1 Software Engineering, Software Qualities, Development Processes, Teams and Individuals (roles) Assignment 1 Entrance
Solution
KP1
FS1&2
2 Coding Standards (layout, style, comments, idioms, editors), Compiler Feedback (static analysis), Code Reviews (inspections, walkthroughs) Assignment 2 - KP2
FS3
3 Documentation (doxygen), Configuration Management (cvs), Build Management (make), Scripting and Automation (cron) Assignment 3 Quiz 1
Solution
KP3&4
FS4
4 Debugging Assignment 4 - KP5
FS5
5 Testing Assignment 5 [debug.tar.gz] Midterm
Solution
KP6
FS6
6 Python Intro (Titus Winters), "The Real World" (Dan Berger), Coverage & Performance (gcov, gprof) Assignment 6 [coverage.tar.gz] - KP7
FS7&8
7 Design Assignment 7 - KP8
FS9
8 Design Patterns (template method, strategy, iterator, composite, visitor, proxy) Assignment 8 Quiz 2
Solution
KP9
FS10&11
9 Prototyping? Assignment 9
Parnas Paper
- KP1-9
FS1-11
10 Review, Outlook - Final
Solution
KP1-9
FS1-11

Notes

The entrance exam will cover what you are expected to know at the start of the course, especially the topics discussed in the CS 10, 12, 14, 141 sequence.

There is lab in the first week and you will not be able to "make up" either the lab or the entrance exam later in the quarter!

You are expected to do the assigned reading before a topic is covered in class; reading assigned in the week of an exam is part of the exam.

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

Terrance volunteered a sample solution for Assignment 1, at least the implementation part: [ .tar.gz | .zip ]


Assessment

Testing: Assignments 50% (9), Quizzes 10% (2), Midterm 10% (1), Final 30% (1). This is still somewhat tentative.

Grading: The "usual" percentage scale (60%+ = D, 70%+ = C, 80%+ = B, 90%+ = A), with some "good-natured fudging" at the end maybe.


Copyright © 2003 Peter H. Fröhlich. All rights reserved.
$Id: index.html,v 1.20 2003/05/28 17:54:50 phf Exp $
Valid XHTML 1.1!