305272 Advanced Computer Programming

Academic Year 2008, Semester 2

Overview

In this course, the focus is on applying design patterns  to develop software.  Students will learn how to discover the patterns and apply them in another context.  Although any programming language can be used in this class, for most of the course, we will use Java as a vehicle to illustrate the concept.  In addition, the software engineering practices are emphasized throughout the course.  Quality is emphasized throughout the entire course.

Objective

This is an programming design course with emphasis on systematic thinking process.  After completing this course, students should:
  1. be able to use design patterns to guide the design.
  2. be able to apply the software engineering practices to computer programming.
  3. have data that show the improvement of their personal performance and the quality of their products.

Approach

Since this is a course focusing on design and discipline software engineering practices, not only are students encouraged to think creatively but they will have a lot of opportunity to practice the craft of professional software engineers.  In order to get the most from this course:
  1. Students are required to take notes and turn in the notes every week.
  2. Students must collect their personal data for self-improvement.
  3. Each week there will be at least two sets of assignments: one set will be used to reinforce the concept students just learn while the other sets will help students prepare for the upcoming subjects.
  4. Each week, there will be two sets of quizzes: one to check the understanding of the previous subjects and the other is used to prepare the students for the upcoming topics.
  5. There will be a term project that students must turn-in progress every week.

Reference

There is no official textbook for this class;  students may refer to any books on how to design programs.
 

Course Outline

The following schedule is tentative only; it may change depending on the circumstances.

Week

Topics

1

Programming-in-the-large

2

Designing complex programs

3

Documenting design

4

Thinking patterns

5

Applying patterns

6

Simple design verification techniques

7

Implementing design

8

Midterm Exam

9

Handling changes 1

10

Refactoring

11

Recognizing patterns

12

Reusing knowledge 1

13

Reusing knowledge 2

14

Handling changes 2

15

Thinking out-of-the-box

16

Conclusion

17

Final Exam

Note that the above schedule is tentative by nature; it may change at the instructor's discretion.

Evaluation

The course evaluation will be divided equally between examinations and assignments.  The distribution of each half is shown below.
ItemsWeight
Assignments40%
Discussion10%
Quiz10%
Midterm Exam20%
Final Exam20%
Please make sure that you have carefully read and understand the academic policy.

Note that the above description is only tentative; it may change at the instructor's discretion.