CMPU 203: Software Design and Implementation

Spring 2019 Sameer Pradhan, Ph.D.

Google Classroom

Quick Facts

When
Class— Tuesdays and Thursdays from noon-1:15 p.m.
Lab— Wednesdays from 6:00-8:00 p.m.
Where
Sanders Physics, Room SP-105 [Lecture]
Sanders Physics, Room SP-309 [Lab]
Website
https://www.cs.vassar.edu/​~sameerpradhan/courses/spring-2019/cmpu-203/
Textbook
We will not use a specific textbook for this course. The materials used in this course have been built on multiple sources. We will refer to a variety of course-specific material and some material freely available online, to be posted or linked on the course website.
Coming to class
Attendance is required. You are responsible for reading the material assigned for each class before that class!


Course Objective

This course will help you develop techniques for design and implementation of complex software systems. We will cover advanced techniques in object-oriented modeling, design patterns, inheritance, parametric polymorphism, generic algorithms, containers, iterators, function objects and storage management, with a focus on collaborative software development. The course uses Java programming language and make extensive use of git for version control via GitHub, and maven for automated build, dependency management and versioning. Development of a software system of significant complexity is required. A weekly laboratory period provides guided hands-on experience.



Logistics

Instructor
Sameer Pradhan (sameerpradhan@vassar.edu)
Office: Sanders Classroom, Room 003
Office Hours: By Appointment
Review Hours: TBD
Coaches
Ryan Hornby (rhornby@vassar.edu)
Where: Asprey Lab When: Wednesday and Friday from 3:00 p.m.-6:00 p.m. and by appointment
Ryan Levitt (rlevitt@vassar.edu)
Where: Asprey Lab When: Wednesday: 3:00 p.m.- 5:00 p.m.; Thursday: 6:00 p.m.-8:00 p.m.; Sunday: 4:00 p.m.–6:00 p.m.
Frank Swiatowicz (fxswiatowicz@vassar.edu)
Where: Asprey Lab when: Monday: 10:30 a.m.-1:00 p.m.; Thursday: 3:00 p.m.-6:00 p.m.; Sunday: 6:00 p.m.-7:30 p.m.
Lab Time

Wednesdays from 6:00 p.m.-8:00 p.m. in Sanders Physics SP-309

Contacting me

If you have a question that is not confidential or personal, please post it on the Google Classroom. Feel free to respond to other student's questions. That way responses tend to be quicker and have a wider audience. I will be monitoring the discussion threads, so in case there is any misunderstanding, I can intervene. I would strongly encourage you to come to office hours to talk about any questions or issues you might have or feedback you might want to provide. If meeting in person is not possible, please schedule a Google Hangout session with me over email. If it is a time-sensitive matter, the best way to get hold of me is to send me a Google Hangout message at my Vassar email.

Announcements will be periodically posted to the Google Classroom. Please make sure that you receive the notification emails from Google Classroom and that you read those messages.

Honor Code

Since we occasionally reuse assignments that were previously assigned, and the fact that one can search for similar problems online, we expect students not to copy, refer to, or look at the solutions in preparing their answers. It is an honor code violation to intentionally refer to a previous year's solutions. This applies both to the official solutions and to solutions that you or someone else may have written up in a previous year. It is also an honor code violation to find some way to look at the test set or interfere in any way with programming assignment scoring or tampering with the submit script.

Since quizzes are a form of assessment, students are not allowed to collaborate on completing quizzes. It is an honor code violation to discuss quiz questions with other students.

In signing the matriculation pledge at Vassar, you have assumed the responsibility for the integrity of your academic work. Please follow the pamphlet "Originality and Attribution: A Guide for Student Writers at Vassar College." which contains detailed discussions of the requirements of academic honesty.

Textbooks
  • There are no required textbook for this course. I will provide/present/discuss material extracted from multiple sources, drawn from various books, articles and other online resources, and tailored to this specific class of students. The material in the readings will be tested during the quizzes and exams. Different people learn differently using a combination of reading from different sources, attending the class and discussing the material, practicing coding—sometimes in addition to the required coding assignments—depending on initial level of coding proficiency. The best-prepared students (those who do the best on the exams) tend to do all three.
    • Software Engineering: A Practitioner's Approach Seventh Edition by Roger S. Pressman.
    • Software Engineering: Principles and Practice Third Edition by Hans van Vliet
    • Head First Java Second Edition by Kathy Sierra and Bert Bates
    • Programming in java—An Interdisciplinary Approach Second Edition by Robert Sedgewick and Kevin Wayne
    • JUnit in Action Second Edition by Petar Tahchiev, Felipe Leme, Vincent Massol, and Gary Gregory
    • Head First Design Patterns First Edition by Eric Freeman and Elisabeth Freeman, with Kathy Sierra and Bert Bates
    • Design Patterns: Elements of Reusable Object-Oriented Software First Edition by Erich Gamma, John Vlissides, Ralph Johnson, and Richard Helm

Prerequisites

CMPU 102



Required Work

Lectures

Attendance is highly recommended in all classes. Although a significant portion of what I will cover in class is available in textbooks, the number of potential texts that cover is far more than the ones listed in the syllabus. Also, depending on student participation and interests, we might cover topics and have discussions which could have a bearing on the questions in the exams.

Class Participation

Extra credits would be given for students participation in the classroom. Students can also participate by providing helpful answers on the class forum, helping out other students in office hours, etc.

Assignments

There will be roughly 5—10 assignments (depending on the scope of each assignment) throughout the semester.

Programming Assignment Collaboration: You may talk to anybody you want about the assignments and bounce ideas off each other. But you must write the actual programs yourself.

Late Submissions

You have 3 free late (calendar) days for the entire semester.
Once you have exhausted the quota of free late days, the maximum points you can receive for an assignment will be decreased by 10% for each late day.
I am willing to consider individual extensions based on extenuating circumstances—as long as you communicate with me in advance.
Example points workout: If you have used up your three late weekdays, and are 2 days late, then you will receive a maximum of 80 points for a 100 point assignment. That is, if you score a 90 on the original 100 point assignment, then with the late penalty you will receive 72 points out of a maximum of 80 points for that assignment. Just to clarify some more—the 72 points will be out of a total of 100 points for that assignment in the final weighted semester point calculations.

Readings

This class has a significant amount of reading and coding. Most weeks have around 30-60 pages worth of content (as it varies by the type of book). Depending on your coding proficiency and previous knowledge, you should plan to spend somewhere between 10 to 20 hours per week on this course.

Exams:

We will be three exams and a final project. Details below.

Final grade
  • 40%   Labwork and Assignments
  • 05%   Pop Quizzes
  • 10%   Pre-spring break exam (TBD)
  • 10%   Mid-term exam (TBD)
  • 10%   Final exam (TBD)
  • 25%   Project (TBD)