CSCI 209: Software Development (Fall 2020)

CSCI 209: Software Development

General Information

Professor: Simon D. Levy
Lecture: MWF 1:00-2:00 pm Parmly 405
Office: Parmly 407B
Office Hours: MWF 2:00-5:30, and by appointment



After taking this course, you should be able to

    • Develop complex programs using a statically typed programming language
    • Perform such tasks as constructing class diagrams in UML, generating program documentation, generating unit tests, refactoring program code, and exercising version control
    • Structure software systems using concepts such as interfaces, encapsulation, inheritance, generic collections, and polymorphism
    • Use several design patterns to solve problems
    • Construct event-driven programs with graphical user interfaces


The book listed below are required. All are available to W&L students via Safari Books. We will have additional readings from journal articles and books on reserve in the Science Library.

    • Horstmann, Core Java for the Impatient, 1st Edition
    • Horstmann, Core Java Volume I — Fundamentals, 10th Edition
    • Bell and Beer, Introducing GitHub: A Non-Technical Guide, 2nd edition
    • Beck, JUnit Pocket Guide: Quick Look-up and Advice
    • Burnette, Eclipse IDE Pocket Guide: Using the Full-Featured IDE

Brief Overview

This course introduces the concepts, tools, and techniques used in software development. Topics include

    • The software life cycle
    • Advanced concepts of object-oriented analysis and design
    • APIs and program documentation
    • Systematic testing
    • Design patterns
    • The use of the Unified Modeling Language
    • Refactoring code during maintenance
    • Extreme programming, pair programming, and rapid prototyping
    • Event-driven programming and graphical user interfaces

Classroom work will consist of lecture and discussion. Written work will consist of several team-based programming projects, homework exercises that employ tools used in software development, and a comprehensive final exam.


The written work for the course will consist of

    • Two in-class  exams (25% of grade)
    • Individual programming projects (50% of the grade)
    • Team programming project (25% of grade)

The grading scale will be 93-100 A; 90-92 A-; 87-89 B+; 83-86 B; 80-82 B-; 77-79 C+; 73-76 C; 70-72 C-; 67-69 D+; 63-66 D; 60-62 D-; below 60 F.

Honor System

All exams will be done without books or notes and without assistance from other people. You may NOT work with another person on the homework assignments. Start each assignment well before it is due so that if you have trouble with it, you can get help from me during office hours.


Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the (fall or winter) term and schedule a meeting outside of class time to discuss accommodations. It is the student’s responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking should be arranged with the professor at least a week before the date of the test or exam.

Homework Assignments

Perhaps the most important aspect of the course is the homework assignments you do. Note that this counts for a substantial part of your course grade. Homeworks will be due in your private github repository on 11:59 PM of the due date. No late work or other forms of submission will be accepted. Serious problems (health / family / personal emergencies) that interfere with attendance / homework should be handled through the Office of the Dean.

Tentative Schedule




24 Aug
Week 1
Course Outline Basic Java syntax and semantics I/O and numbers
31 Aug
Week 2
Primitive and reference types

Equality and comparisons

Strings and arrays

Classes and methods Preconditions, postconditions, exceptions, and javadoc

Due:  Project1

07 Sep
Week 3


GUIs with BreezySwing Collections and interfaces
14 Sep
Week 4
File processing File processing  

Due:  Project2

21 Sep
Week 5
Exam #1

Exam 1 discussion


Inheritance and composition


28 Sep
Week 6
Abstract classes Iterators Graphics and GUIs

Due: Project #3


05 Oct
Week 7
Numeric I/O and handing errors with dialogs Loading images from files  

Due: Project #4

12 Oct
Week 8
Design patterns: iterator, composite, and decorator


The strategy pattern
19 Oct
Week 9





Due: Project5

26 Oct
Week 10
Exam #2  

The strategy pattern: comparisons and layouts

The strategy pattern: map, filter, and reduce
02 Nov
Week 11
Linked structures


The singleton pattern I


The singleton pattern II


09 Nov
Week 12
Tools: JUnit Refactoring and extreme programming



Working with jar files


16 Nov
Exam Week

Lecture Notes


1-I/O and Numbers

2-Equality, Comparisons, Types, Strings, and Arrays

3-Java Classes and Methods

4-Error Handling, Exceptions, and Documentation


6-Easy GUIs with BreezySwing

7-Collections and Interfaces

8-File Processing

Study to here for Exam #1

9-Inheritance and Composition

10-Abstract Classes


12-GUIs, Model View Controller, and Layouts

13-Graphics and GUIs

14-Numeric Input, Error Handling, and Standard Popup Dialogs

15-Displaying Images from Files

17-Design Patterns: Iterator, Composite, and Decorator

18-The Strategy Pattern: Comparisons and Layouts

Study to here for Exam #2

19-The Strategy Pattern: Map, Filter, and Reduce

20-The Strategy Pattern: Streams, HOFs, and Lambdas

21-The Adapter Pattern

22-The Proxy Pattern

23-The Singleton Pattern: Introduction

24-The Singleton Pattern and Recursive Data

25-Unit Testing


27-Working with Jar Files

Getting Started with Eclipse

Getting Started with GitHub