Syllabus

General Info

Course
CS321 Software Development Practicum
Instructor
Charilaos Skiadas (skiadas at hanover dot edu)
Term
Fall 2019-2020
Offices
LYN 102
Office Hours
MWF 10:30am-11:30am in SCH111, and by appointment
Book
Websites
Class times
MWF 2:40pm-3:50pm, in LYN120A

Course Description

Software Development is a complicated process. Of course you must write code that solves a problem, but this is only a small part of the work when bringing a software product from initial idea to releasable application. As part of the process, you will invariably have to revisit code written in the past in order to improve it or to fix bugs. You will need to maintain “development” versions of your code along with “production” versions. You will need ways to keep track of bugs in your code as well as proposed enhancements, and you will need to track your progress as you work towards make these changes. Above all, you need will to work with other people’s code, and they will need to work with yours.

This course is a survey and practicum on all of these aspects of software development. It moves on parallel across 5 categories of topics:

  1. Java and Object-Oriented-Programming Fundamentals reviews and reinforces the key aspects of OOP with a discussion of classes, inheritance and delegation, interfaces, encapsulation etc.
  2. Design Concepts and Principles discusses the SOLID principles, which help to keep large code bases clean.
  3. Design Patterns discusses tried-and-true solutions to common design problems.
  4. Development Practices covers standard development techniques such as agile methods, user stories and CRC Cards, version control fundamentals, test-driven development, issue management, and UML diagrams.
  5. Coding Practices discusses topics related to the particulars of writing clean and readable code, focusing on general values and principles as well as more specific topics such as naming of variables and methods, commenting and formatting principles, the law of Demeter, exception handling, and refactoring techniques.

Along the way, students are also engaged in a collaborative project that will allow them to reinforce all these concepts while working with their peers on a large-scale project.

Textbook

There are two main sources of material for the course. The first is the main course textbook, Agile Software Development, Principles, Patterns, and Practices by Robert Martin. This textbook covers the topics of Design Concepts and Principles and Design Patterns.

The second source is a list of electronic resources available to members of the ACM (Association for Computing Machinery). The ACM delivers resources that advance computing as a science and a profession. This includes the ACM Learning Center, which provides access to hundreds of online books and videos related to computing. To access these electronic resources, you will need to purchase an ACM student membership (about $20 per year). The cost of a student membership is modest given the weath of resources it provides access to. We encourage you to continue your membership every year and to take advantage of the opportunities and resources it offers.

A catered list of readings and videos from the ACM Learning Center will be provided. These will cover the remaining topics: Java programming and OOP Fundamentals, Development Practices and Coding Practices. Sections from the following will be covered:

The various resources are organized in two playlists:

Course Components

Class Preparation

In the class schedule page for each class day you will find a list of links to “prep” items. These may be videos to watch or book sections to read, possibly with a short assignment to help you learn the material. You are expected to do this prep work before coming to the next class.

Class Participation

You are expected to attend every class meeting. This course will cover a lot of material and will require a lot of hands-on and collaborative activities. Missing classes will set you back with regards to those collaborative activities. There are very few reasons that would qualify as an excuse for an absence. If you have known conflicts discuss them with me during the first week of classes.

Meeting outside of class

You will be expected to work with your classmates at prescribed times outside of the scheduled class times. We will work to find some common schedule that can work for everyone. The out-of-class time commitment for a 4-credit course is 4 * 2 * 50 = 400 minutes a week, or about 6.5 hours a week. You should expect to spend close to that amount of time for this class, and time working on the project will be a part of it.

Exams

There will be three exams tentatively scheduled for: Friday 10/4, Friday 11/8 and during exam week.

Project

For a large part of the course you will be engaged in a collaborative project with a group of your classmates. Project work will typically be as follows:

The project will overall count for 45% of the final grade, broken down as follows:

Phone and laptop policy

Your phone is required to be in your bag, set to silent, at all times. Similar policy applies to laptops and tablet devices. They are not to be used except during breaks or unless otherwise instructed.

Grading

Your final grade depends on class participation, the development project, and three exams, broken down as follows:

Components Percent
Participation 10%
Project (Group) 30%
Project (Individual) 15%
Exam 1 15%
Exam 2 15%
Exam 3 15%

This gives a number up to 100, which is then converted to a letter grade based roughly on the following correspondence:

Letter grade Percentage Range
A, A- 90%-100%
B+, B, B- 80%-90%
C+, C, C- 70%-80%
D+, D, D- 60%-70%
F 0%-60%