IT 501 Software Systems
Spring 2007

Official Course Description. This course is an introduction to software design and implementation. After a review of basic programming concepts, students will be introduced to procedural and data abstraction, object-oriented design, recursion and dynamic data structures. Abstract data types such as lists, stacks, queues, and trees will be studied. Algorithms for searching and sorting will be explored along with methods for comparative analysis. Programming concepts will be demonstrated in a language like C++. The course will also include an introduction to the Unix operating system.

Prerequisites. Programming experience.

Location and Times. Lectures: Science Center 354, TuTh 11:00-12:15. Labs: Science Center 334 (ITL), M 10:00-10:50 (Section 10) and M 1:00-1:50 (Section 20).

Instructor. Alexis Maciel. Science Center 379, 268-2385,

Office Hours. M 3:00-4:00, Tu 2:00-4:00, W 1:00-3:00.

Teaching assistant: Wenjin Hu. Office Hours: Tu 1:00-2:00 in the ITL (SC334), W 10:00-12:00 in the ITL (SC334), and Th 2:30-3:30 in COSI (SC336).

Required Text. None.

Course Objectives.

  1. To teach you principles and techniques fundamental to the design and development of computer software. These include data abstraction, object-oriented design, elementary data structures and algorithms, analysis of algorithms, and recursion.

  2. To further develop your coding, documentation, debugging and testing skills.

  3. To make you familiar with programming in a Unix environment.
Demonstrable outcomes. By the end of the semester,
  1. You will have a good understanding of the principles and techniques mentioned in Objective 1 above.

  2. You will be able to use them in the design and implementation of C++ programs of a moderate size.

  3. You will be able to implement elementary data structures including vectors, linked lists, stacks and queues.

  4. You will understand the importance of using standard software components and will be familiar with the basic data structures and algorithms provided in the C++ Standard Template Library.

  5. You will be able to analyze the running time of simple algorithms.

  6. You will be able to implement simple recursive algorithms.

  7. You will be able to implement and analyze basic algorithms for searching, sorting and, if time permits, tree traversal.

  8. You will be able to develop software on a computer system running the Unix operating system.

Topics to be covered. Data abstraction, classes, object-oriented design, exceptions, linked lists, vectors, stacks, queues, iterators, templates, the STL, analysis of algorithms, recursion, binary search, quicksort, mergesort, sound programming principles, basic Unix concepts and commands. If time permits, inheritance, polymorphism, trees and binary search trees.

Grading. Your evaluation will be based on several homework assignments, which will be mostly programming assignments, two tests, two self-assessments of your performance on the tests, one for each test, and a final exam. Your course grade will be computed using the following formula:

22.5% A + 22.5% T1 + 5% SA1 + 22.5% T2 + 5% SA2 + 22.5% F

The final exam will not be cumulative. At the final exam, you will have the option of writing make-up exams for Tests 1 and 2. The minimum grade you can get on a self-assessment is the grade you got on the corresponding test. Tentative dates for the tests are Thursday, March 1 and Thursday, April 5. These will be evening exams. All students are required to write the final exam (no exemptions).

Policy for missed work. There will be no make-up assignments. Late assignments may be accepted if a good excuse is provided and if arrangements are made at a reasonable time, in advance, if possible. Make-up tests can be arranged under the same conditions. Other special arrangements can be made for students forced to miss more than a few days of class.