CompSci 307
Fall 2020
Software Design and Implementation

OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things. I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea. The big idea is messaging. —¬†Alan Kay



Many view software design as a craft, learned best through practice that is guided by experienced mentors, where the best lessons are learned by making mistakes rather than there being one right way to do it. In this respect it is more like art than science. The arts, as well as architecture and engineering, benefit from subjecting work to constant review by both peers and Teaching Team as a means of providing fast feedback which allows students to learn quickly from their mistakes.

This course focuses on the design of software by implementing significant projects in teams. As such, students should focus on improving their program's flexibility while communicating with other students to fit their code into a larger whole. Projects given are intended to be under-specified, so that their design and functionality must be justified and improved through iterative feedback. In short, my goal is to move you beyond programming-specific concerns to a point where one can think through a flexible and maintainable design for a software application without having to write all the code first.

Required Background. It is assumed that you have previously programmed extensively in Java (e.g., at least the level of CompSci 201 at Duke). If you do not have such experience programming, this probably is not the right course for you. See the Teaching Team if you have questions.

Feedback is Welcome

Help us improve the course. The Computer Science department at Duke University aims to excel in education and research. This course is geared towards students who enjoy software development and abstract thinking and want to learn practical ways to better design and code their projects. If you find your efforts are not being well directed towards learning, please let us know so we can help remedy the situation — the goal is not to work you simply for work's sake!

Help us improve the website. Please inform us of any broken links or otherwise misleading or confusing content and we will get it fixed as soon as possible.

To ensure that our courses fulfill student needs and expectations, you are encouraged to submit constructive comments about this course anonymously or use the suggestion box icon, suggestion box, at the bottom of each page. These comments will be read by the Director of Undergraduate Studies in addition to the professor teaching the course. Our goal is to adapt the subject and delivery of our courses to meet student needs while maintaining our high standards.