Software Development (CS 329)

Fall Semester, 2015

Syllabus

Overview

Vital Stats

Overview
This course focuses on the principles underlying construction of production-quality software systems. As many of these ideas are difficult to master without concrete application, the class is something of a hybrid: the first two thirds of the semester will follow a traditional format of lecture and small-scale homework assignments, with the final third devoted exclusively to the construction of a substantial software project. Although you will spend significant portions of the semester studying object-oriented programming ideas and implementing Java programs, the primary emphasis of the course is on language and technology-independent techniques for effective design.
Learning Goals

In this class, you will learn:

  • How to think about and use abstraction in the design of real software systems
  • Techniques for modular reasoning
  • How to incorporate testing into your implementation, to help ensure reliability

Of secondary benefit , you will:

  • Learn advanced features of the Java programming language, such as GUI construction and threads
  • Learn how to use important tools, including integrated development environments, build files, and version control software, as an integral part of group project development

Resources

Required Texts

None. However, you will read a number of articles and book excerpts throughout the course. These will be distributed as needed.

Optional, but Very Good

Format of the Course (IMPORTANT: READ ME)

The first 2/3 of the course will be taught in a traditional classroom format, consisting primarily of lectures, small-scale lab work, and other hands-on exercises. Most of this time will be devoted to foundational material. However, (at least) three of these weeks will be "practical interludes", in which we explore a different advanced feature of the Java language and available interfaces.

In the final five weeks, you will form teams of 2-5, with each team designing and implementing a substantial project. During these weeks, our class time will be devoted exclusively to these projects, consisting of implementation work, peer reviews, and presentation of the intermediate deliverables.

Assigned Reading

I will make a number of supplemental readings available throughout the term. All readings will be assigned in advance on the class in which we discuss them, and you will be expected to complete them by the start of class.

"Homework" Problems

Over the first 10 weeks of the class, there will be a number of small projects assigned. Nearly all of them will be group work.

Late Policy: Because of the pace of this course, late work cannot be accepted. Exceptions, though rare, may be granted to this for special circumstances, but you must make arrangements with me in advance.

Collaboration: While discussion with your colleagues is encouraged, you must complete each of these assignments individually. Where group work is appropriate, it will be explicitly indicated.

Participation

Evaluation of your participation will be based on the quality of your preparedness for class, your active and engaged participation in discussions, and your diligent and effective work with your project team.

To receive full credit, I expect your attendance at every class, on time, having completed the assigned preparatory work. Such preparation is essential, both to your own success and that of the larger classroom community.

You may take up to 2 unexcused absences. Each absence after that will cost 5% of your final grade, up to the maximum 15% participation component (see "Grading", below).

Midterm Exam

At the end of Week 11, there will be an in-class exam, covering the foundational material of the first nine weeks.

Final Project

From Week 10 through the end of the semester, you will form groups of 2-5. Each group will specify, design, and complete a substantial software project. Each member of a team will be expected to contribute an equal share. All members of a team will receive the same grade for their project. Full collaboration and sharing of work is encouraged.

Grading

Relative weights for your final grade are as follows