This is a course in object-oriented design and programming. It is based on working in teams of two to five people; however, there are also several individual assignments. Among the main goals you should have, and that I have for those in the course, is to learn both low-level and high-level idioms and patterns of programming that will make you wonderful, intelligent programmers and designers. The course is not organized so that you will be become 3am code hackers, but that is a reality that may happen.
If you do not already know a programming language well, this probably is not the right course for you, although dedicated participants may be able to keep up. By the end of the course you should expect to have written several 500-1000 line programs, a few 1000-3000 line programs, and one 5000+ line program. Of course using lines of code (LOC) as a programming metric is not the best thing to do, but it conveys a sense of the scale of the programming you will do. You will become more proficient at object-oriented design and programming and your programs will consist of hundreds of classes by the end of the semester.
You will be expected to do a lot of reading and a lot of debugging outside of lecture.
Meeting Time
MWF 1:15-2:30pm in North Building 225
Course Staff
![]()
Professor: Robert C. Duvall
- Office: LSRC room D228
- Office Hours: Mondays and Wednesdays, 4:30-5:30pm; Thursdays, 4-6pm; or by appointment
- Email:
- Phone: 660-6567
![]()
Undergraduate TA: Marcin Dobosz
- Office: Computer Cluster, Old Chem 01
- Email:
- Office Hours: Tuesday 7-9pm
![]()
Undergraduate TA: Michael Lin
- Office: Computer Cluster, Old Chem 01
- Email:
- Office Hours: Wednesday 7-9pm
![]()
Undergraduate TA: Owen Wendland
- Office: Computer Cluster, Old Chem 01
- Email:
- Office Hours: Sunday 7-9pm
![]()
Undergraduate TA: David Winslow
- Office: Computer Cluster, Old Chem 01
- Email:
- Office Hours: Monday 7-9pm
![]()
Undergraduate TA: Ben Wolf
- Office: Computer Cluster, Old Chem 01
- Email:
- Office Hours: Monday 8-10pm
Books
Most of the readings assigned during the semester will be excerpts from books or online articles. However, most students also like to use a reference book about advanced programming topics, so the books listed below are optional. There is lots of information available online, but the books below are rather complete in their coverage (though big).
If you choose to buy any of these books online, please click on this link) to buy from Amazon so that your purchase contributes to undergraduate Computer Science Research at Duke.
![]()
- Thinking in Java by B. Eckel ( here is also a local mirror of the online book)
- Core Java by C. Horstmann and G. Cornell
- Java How To Program by Deitel and Deitel
![]()
- Thinking in C++ by B. Eckel (here is also a local mirror of the online books)
- C++ How To Program by Deitel and Deitel
In general you should do the readings in order to be prepared to ask and answer questions in class. While there may be no formal check that you have done the reading, if you have looked at material before it is discussed in class you will get much more out of the class discussion. Although time will be given at the beginning of lecture for you to ask questions about the reading, the majority of the lecture will be an extension of the reading, not a summary.
Course Policies
These pages should answer your questions about the day-to-policy questions about the course.
- Collaboration
We encourage proper collaboration, in which all parties equally participate. - Grading
Your assignment is graded on its design as much as its functionality. Late submissions are not tolerated. - Submitting Assignments Electronically
Assignments must be submitted via Eclipse by the end of the day given as the deadline.
Online Course Information
- Bulletin Board
You should regularly read and contribute to the bulletin board as it gives you a place to discuss course issues. Part of your class participation grade will be contingent upon your active participation on the bulletin board. - Web page
You should check the course web page daily for materials discussed in class at http://www.cs.duke.edu/courses/spring07/cps108