CPS 108: Software Design and Implementation, Spring 2004


This is a course in object oriented programming and design. It's a course based on working in teams, where teams range from two to five/six people. There are, however, some individual assignments too. The course will use both Java and C++. The assumption is that you've programmed extensively using C++ (e.g., at the level of CPS 100 at Duke).

This is a course in which you'll design and implement lots of programs. You'll learn both low-level and high-level idioms and patterns of programming that will make you wonderful, intelligent programmers and designers.

You'll learn about optimizations for people and for computers. You'll become more adept at object oriented design and programming. You'll learn that doing things simply is a wonderful way to start.

If you do not have experience programming with C++ as learned in CPS 100, this probably is not the right course for you. See the professor if you have questions.


*Professor Owen Astrachan


*TA Paul Shealy

*  UTAs

UTA Office Hours


Books

Required Texts (click image to buy via Amazon with a percentage going to Computer Science Education at Duke).

cover The Pragmatic Programmer, by Andrew Hunt and David, Addison-Wesley, ISBN: 0-201-61622-X
cover Design Patterns Explained, by Alan Shalloway and James Trott


Recommended, but optional books

You'll need a Java reference. There is lots online, but the book below is rather complete in its coverage, though big. Lots of other Java books will do.
cover Java How To Program by Deitel and Deitel, Fifth Edition, Prentice-Hall, ISBN 0131016210

Grading

This is primarily a programming course. Accordingly, your grade is based primarily on how well you do on several programming projects. However, there will be two tests that count for a small percentage of your grade (at least one test will be in-class). Part of the grade is also based on small writeups of readings that will be turned in, and on class participation.

There are two kinds of programming project: group projects and mastery projects. Mastery projects will often be done in groups of two, but you cannot work with the same person on more than one mastery. Mastery programs will be worked on individually. Sometimes groups will be formed to combine the efforts of two people, but the "groupness" of a mastery won't be decided until soon before it is due. Each mastery group will be required to turn in a single program that will be evaluated.

All non-mastery programs are group projects. The mastery projects are designed to ensure that that everyone who completes the course is "certified" as capable of writing and understanding reasonably complex C++ and Java programs.

There will be one small project (Java and C++), one medium project (Java and C++) and one large project (Java). There will be some optional mastery projects whose completion is required for an A.

Project Artifact

For each project you (your group) should have a small three-ring notebook that contains:

You must develop a software portofolio for each project you do.

Grading
Mastery exams 25%
Readings, Participation, Writeups 5%
Tests 10%
Small group project 10%
Medium group project 20%
Large group project 30%

In general, to earn an A on any assignment you must go beyond what is expected. Meeting all requirements is a B+. Meeting all requirements superbly can earn an A-. Doing more than is required, or doing astonishingly good work will earn an A.

Grading Criteria

Several things contribute to the grade awarded for an assignment. Each part will be graded on a scale of 1-5; roughly 1 is a D, 2 is a C, 3 is a B, 4 is an A-, 5 is an A+. Grades of 3+, 4+, etc. are possible. Grades mean roughly the following:

1 poor, little indication of effort
2 ok, on track, but needs real work
3 good, functional, some room for improvement, complete
4 very good/superb, complete
5 outstanding

Owen L. Astrachan
Last modified: Tue Feb 3 11:42:38 EST 2004