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.
![]()
Professor: Robert C. Duvall
- Office: LSRC room D228
- Office Hours: Wed 2:30-4pm, Thu 1-2:30pm or any time for quick questions
- Email: rcd@cs.duke.edu
- Phone: 660-6567
Graduate TA: Ming Lin
- Office: LSRC room D328
- Office Hours: By appointment
- Email: km@cs.duke.edu
- Phone: 660-6588
Undergraduate TA: Marcin Dobosz
- Office: LSRC room D240
- Office Hours: By appointment
- Email: md36@duke.edu
![]()
Undergraduate TA: Ben Wolf
- Office: LSRC room D240
- Office Hours: By appointment
- Email: brw6@duke.edu
You will use several books, copied excerpts, and online readings during the semester.
While the first book below will be available at the Duke bookstore, it and the others listed are available for much less online. If you choose to buy them online, please click on the book's image below (or this link) to buy from Amazon and contribute to undergraduate Computer Science Research at Duke.
![]()
Design is an important component of the course, so this book is required. This book helps you to develop and think about different design strategies in a practical (and fun) format.
- Head First Design Patterns, by E. Freeman, E. Freeman, B. Bates, and K. Sierra
You will probably need a coding reference, so these books are optional. There is lots of information online, but the books below are rather complete in their coverage (though big).
- 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. If you have looked at material beforeit 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.
These pages should answer your questions about the day-to-policy questions about the course.