Welcome to CS 300, Software Design!
In CS 167 and 270, you learned how to program in Python and C++. You
learned about objects and classes, and
you may have learned about inheritance and polymorphism. But you may
not have spent a lot of time talking about how to decide which of
several possible ways to organize your code into classes and methods is
best for solving a given
problem, which will be a major topic of conversation this semester. In
CS 167 and 270, you wrote a new program every week or two. In this
course, you will develop one moderately large program. With each new
assignment, you will have to deal with the consequences of the
decisions you made before.
The official course description:
What makes code beautiful? We consider
how to design programs that are understandable, maintainable,
extensible, and robust. Through examination of moderately large
programs, we will study concepts including object-oriented design
principles, code quality metrics, and design patterns. Students will
learn design techniques such as Class-Responsibility-Collaborator (CRC)
cards and the Unified Modeling Language (UML), and gain experience with
tools to support large-scale software development such as a version
control system and a test framework. Students will apply these
concepts, techniques, and tools in a semester-long, team software
This course addresses some of the content typical to a Software
Engineering course. Steve McConnell '85, author of Code Complete and Rapid Development, has identified
software design as the single aspect of software engineering most
important for liberal arts students to understand. Computer Science
majors will learn about other software engineering topics, particularly
requirements analysis and project
management, in the 1.5-semester capstone project (CS 495/6).
This course will be regularized as CS 370 and will be required for the forthcoming Computer Science major. Credits from this course count towards the Computer Science minor.
In this course, we will be programming in Java. Because you will be
developing a larger program, I expect you to use an industrial-grade
integrated development environment
(IDE) and version control
We will start out using NetBeans, an IDE written in Java and distributed by Oracle, the company that currently owns Java. As you get comfortable programming in Java, you may want to try something more powerful, such as Intellij IDEA (currently the most popular IDE for Java) or Eclipse (the most popular until quite recently). All three IDEs are installed on the instructional Linux cluster.
For version control, we will take some time to learn Git and GitHub
during the second week of class.
If you want to use your own computer for the course project, you will need to install JDK 8, as well as Git and your IDE of choice. To see whether you have the correct version of Java installed, open a terminal or command window and type "java -version." You should see several lines of text indicating you are running Java version 1.8. Be sure to install the ful JDK 8, not just JRE 8.
Finally, we have the privilege of testing a new Learning Management
System (LMS), Schoology, which
may be chosen to replace CLEo. I will be trying out various Schoology
features in this course. In particular, I plan to use it for assigning
and grading homework. You will be able to find your course grades on
Schoology, rather than CLEo.
||Java Crash Course; Git
||1-2||JavaFX; Elegant software; OOP
||Project 0 due Sunday, January 29|
||UML; FXML & CSS; threads;
||Project 1 due Tuesday, February 7|
||More inheritance; pair
||Project 2 due Tuesday, February
||Access control; why
||Project 3 due Sunday, February 26
||When (not) to inherit?
||Style; functional decomposition
||Project 4 due Friday, March 10
||Documentation; case study;
||Object-oriented analysis; design
||Project 5 due Thursday, April 4
||Object-oriented design principles||Project 6 due Sunday, April 16
principles; case study
||Project 7 due Tuesday, April 25
Exam Friday, April 28
||Design patterns; case study
||Project 8 due Thursday, May 4
||Last day of class!
||Project 9 presentations
Saturday, May 13, 9 - 11 a.m.
to attend and actively participate in class. I am expected to make
class worth attending.
I expect you to contribute actively to small-group activities and
class discussions. I also expect you to do homework regularly so that
you are prepared to contribute in class. Each will count as a small
component of your final grade.
If your participation or non-participation causes problems for other students, I will invite you to visit office hours to discuss the issue.
Some advice: Take
amount of notes. Take notes
by hand rather than typing. You need to be active in class,
working through problems we are doing together on the board or in small
that the most important part of taking notes is to process new ideas
and decide what to write down. Don't feel like you have to transcribe
everything we write on the board; in fact, this may get in the way of
There will nearly always be something new to read in order to inform
our class discussions. I will also ask you to do small programming and
research exercises, which we will discuss in class.
Homework is due one hour before class time (10 a.m. MWF), so that you are prepared for class and so that I can respond to what you have written. I will grade homework as follows:
addition to daily readings and exercises, you will have project
assignments due every 1-2 weeks. These projects will constitute over
your grade since one of the best ways to learn about object-oriented
design is to design and implement your own programs.
assignment will be a team assignment, with teams of 2-4 students. I
will assign teams before Spring Break, and you will choose your own
teams for the project assignments after Spring Break.
After the first two assignments, every assignment will build on the
previous assignment. Each project team will share their work with each
other and with me through a GitHub repository.
Every project assignment will include a written reflection.
I am giving you about twice as much time as I estimate you will need
to complete each project assignment. Moreover, we will often discuss projects in class after they are due. Therefore, I expect you to turn in project
assignments on time. Unless you make other
arrangements with me, I will grade whatever I find in your GitHub
repository at the deadline.
My advice is that you aim to complete the requirements of each project assignment in the first half of the time allotted. You can then use the remaining time to achieve stretch goals, refactor your work, or write a particularly thoughtful reflection. This also gives you "extra" time in case of unexpected difficulties.
There will be an in-class quiz approximately every other week. In
addition, there will be one exam. We will discuss later whether this
will be an in-class exam on Friday April 28 or a take-home exam due on
There will not be a final exam. Instead, we will use the final exam
period for presentations of your final project assignment.
You are encouraged to discuss concepts, problems, and approaches to solving problems with your classmates. However, all work you turn in must be your own or that of your assigned team. All team members are responsible for work submitted as a team.
If you are having trouble debugging a program you have
written, you may show it to a classmate to receive help; likewise you
may inspect a classmate's incorrect program to provide help.
However, you should not show correct
code to a classmate, nor should you look at another students' correct
code, unless I direct you to do so.
Significant insights obtained from other students should be acknowledged in solutions to homework exercises or in project write-ups. The suggested acknowledgment format is "[Person X] helped me to [do thing Y] by [explaining Z]."
You may copy unsolicited code found in a book, an online tutorial,
or a Q&A site such as StackOverflow.
You must include a comment to cite your source (title/author/date or
URL). You may be asked to explain the
code you copied, so make sure you understand it. If you think you need
to copy the code but you don't understand it, please discuss it with me.
If you are a student with a disability who will need accommodations
in this course, please meet with either Julia Dunn, Associate Dean of
Students (Memorial 325, 509-527-5213, firstname.lastname@example.org) or Rebecca
Frost, Director of Student Success and Disability Support Services
(Memorial 325, 509-527-5213, email@example.com)
for assistance in developing a plan to address your academic needs.
information about disabilities is confidential. If I receive
notification from Ms. Dunn or Ms. Frost that you are eligible to
receive an accommodation, I will provide it in as discreet a manner as
You are expected to attend every class. Class is time for learning
which you cannot obtain by reading someone else's notes. Moreover, we
depend on the contributions and partnership that only you can provide. Clearly, you
participate if you are not in class.
I will excuse your absence if you have a legitimate reason to miss
and you manage your absence responsibly:
If your absence is planned,
as for travel to a conference, email
to make arrangements at least one
week in advance. Although we can
talk in person, I will also need a written reminder of your plans,
via email. If you will be missing a scheduled exam due to planned
activities, please request an alternative examination time no later
than one week in advance.
If your absence is unplanned, as for illness or in relation to a documented disability, email me as soon as you are able to do so. If you are ill, don't come to class—stay in your room and rest, or seek medical care as needed. If you are absent unexpectedly, I may call or email to check that you are okay. I will accommodate missed exams due to documented illnesses.
Do make a substantial
effort to work out problems with the project assignments on your own,
but don't stay stuck for too
long before you ask for help. Keep this advice in mind: You Must Try and Then You Must Ask.
You are welcome to email me questions about your project work, giving context as described in the blog post linked above. I may be able to respond by email or I may ask you to visit my office.
If you are still having difficulty with concepts or exercises after
we discuss them in class, come see me as soon as possible. Many of the
concepts in this course build on each other, and if you get
stuck on something you don't understand, it will only make it harder to
catch up later.
I am also happy to talk with you about topics that might not be of interest to the whole class, such as deeper discussions of course content, related current events, and your interests or career plans.
You are welcome to drop in official office hours posted on my home page, and you may knock any time my door is open. Right before class is usually a bad time for me as I am busy with last-minute preparations. If your need is known at least 24 hours in advance, you are very welcome to schedule an appointment with me for a chat in my office, a walk, or lunch.
The course grade will be calculated as follows:
|Type of work
|Exam and quizzes
The minimum grade you will receive is shown below. Grades may be
raised and plusses or minuses added at the instructor's discretion.
Janet Davis (firstname.lastname@example.org). Some policies are adapted from Dale Skrien's syllabus for CS 361, Object-Oriented Design, at Colby College.Created January 15, 2017.