Objectives

The course covers a wide range of software development skills, from analyzing a problem to implementing a solution. On completion of the course, students should be able to
  1. Analyze a software development problem and express its essence succinctly and precisely;
  2. Design a module structure to solve a problem, and evaluate alternatives;
  3. Implement a module so that it executes efficiently and correctly;
  4. Work in a small team, cooperating on these aspects of software development, and exchanging ideas in a constructive and organized fashion;
  5. Appreciate engineering issues in the development of software, such as the importance of addressing the user's concerns, working with limited resources, maintainability, dependability, and division of labor.

Prerequisites

The course assumes that the student is conversant with Java and is able to
  1. Write a small (ie, 100 line) program to meet a specification;
  2. Understand basic notions of imperative programming (such as loops, procedures, exceptions, and aliasing) and of object-oriented programming (such as objects, references, self, interfaces, and subclassing);
  3. Use, and understand programs that use, basic data structures such as arrays, hash tables, trees and lists.

Outcomes

On completion of the course, students should be able to
  1. Identify key entities and relationships in the problem domain; write succinct textual descriptions of problems in the style of a user manual;
  2. Design programs:
  3. Implement programs:
  4. Perform a small development in a team, including problem analysis, design, implementation, and testing.
Each outcome supports the objective with the corresponding number. Objective (5) is supported by outcome (4).