Carnegie Technical Schools
Certificate in Software System Development
Draft Curriculum
April 16, 1998
The goal of the Software Systems Development curriculum is to prepare
students for careers in software development. Accordingly, it not only
incorporates the detailed skills and knowledge needed to work in the
present-day software environment, but also stresses fundamental concepts
that persist across rapid technology changes. All courses involve extensive
hands-on assignments.
A distinguishing feature of the curriculum is that its courses form a
tightly integrated whole. Success in each course depends on mastery of the
material in the prerequisite courses. Furthermore, all of the courses are
embedded in a context of useful system development: students are
continually reminded that software is built to meet requirements, and that
it must be functional, usable, robust and maintainable. The program uses a
standard software development process, which is introduced in the first
course and elaborated in more depth throughout the program.
SSD-1 Introduction to Information Systems
This course introduces students to computer based information systems
through an introduction to programming of web based software. Students
will be introduced to the modern model of the computer in the context of a
network. Programs will be written in Java, an object oriented language
designed to write web-based applications. Students will create web
pages and programs and applets in Java.
Topics:
introduction to CTS software environment;
introduction to software development process;
clients, servers and data transfer;
introduction to naming issues;
languages, syntax, interpretation, compilation and execution;
program control structures;
data representation (simple types, encapsulated types, multimedia types);
basic Java and HTML.
Prerequisites: None
SSD-2 Introduction to Computer Systems
This course introduces students to the fundamentals of
using and maintaining computer systems in an Internet environment. The basic
components and functions of the computer and the network are introduced,
along with tools and procedures for their operation and maintenance. Both
the Unix and Windows NT operating systems are used as examples.
Topics:
basic machine architecture (processors, memory, I/O);
basic operating system concepts (processes, concurrency, address spaces);
I/O devices for storage and multimedia;
basics of processing, storage and communication capacity;
command processors and scripting;
file systems;
basic network architecture;
installing new software and devices;
backups, compression, security, encryption.
Prerequisites:
SSD-1 (may be taken concurrently).
SSD-3 Object Oriented Programming and Design
This course introduces students to problem solving by means of object
oriented design and implementation. Emphasis is on problem analysis and
solution design, documentation and implementation. Students use
commercial software libraries, and create web-centric projects.
Progamming assignments are carried out in Java.
Topics:
modularity and abstraction;
encapsulation;
inheritance;
polymorphism;
use and creation of software libraries;
dynamically allocated data;
simple recursively-defined data structures.
Prerequisites: SSD-1
SSD-4 User Centered Design and Testing
This course focuses on human-computer interaction, providing training in
the basic skills of task analysis, and interface evaluation and
design. Students learn to develop designs that are usable and useful
for people. Students learn how to empirically evaluate user interfaces,
leading to better ones. Visual Basic is used in programming
assignments.
Topics:
task analysis;
user interface idioms;
user interface toolkits;
rapid prototyping and evaluation;
simple user studies;
Visual Basic programming.
Prerequisites:
SSD-3 (may be taken concurrently).
SSD-5 Data Structures and Algorithms
This course focuses on understanding the dependence of execution time,
bandwidth and memory requirements on the data structures and algorithms
chosen.
Students learn to
reason informally about algorithm and data structure correctness and
complexity.
Primary emphasis is given to intelligent selection of algorithms and
representations.
Programming assignments use C++ and the Standard Template
Library.
Topics:
abstract data types;
data structures and invariants;
simple algorithm analysis;
sorting and searching;
trees and graphs;
associative data structures;
C++ programming with the STL.
Prerequisites: SSD-3
SSD-6 System Level Programming
This course provides students with a user-level view of processors,
networks and operating systems. Students learn explicitly about
assemblers and assembly code, program performance measurement and
optimization, memory organization and hierarchies, network protocols and
operation, and concurrency. Programming assignments use the C
programming language.
Topics:
overview of instruction sets and assembly language programming;
memory management;
memory hierarchies: cache, memory, virtual memory;
performance measurement and tuning;
basic internet proptocols;
basic concurrent programming.
Prerequisites: SSD-2, SSD-5. SSD-5 may be taken
concurrently.
SSD-7 Database Systems
This course introduces students to database concepts including
database design. Relational data models are emphasized.
Students develop client-server applications in Java and/or Visual Basic,
using commercial database management systems.
Topics:
relational data models and data independence;
relational query languages;
database design;
client-server applications;
performance issues;
distributed, object-oriented and multimedia databases;
Prerequisites: SSD-5 (may be taken
concurrently).
SSD-8 Networks and Distributed Computing
This course focuses on principles and practices
of network-based computing. It begins with an overview of networking
technology in support of data and multimedia communication
Topics:
survey of networking protocols and technology;
multimedia networking;
data distribution: multicast and push-pull techniques;
client/server design, thick and thin clients;
CORBA and related tools;
WWW implementation issues;
electronic mail;
security and privacy issues.
Prerequisites: SSD-6.
SSD-9 Software Specification, Test and Maintenance
This course focuses on the principles of development of software systems
following software engineering practices.
Students work in
multi-person teams on software projects of significant scale.
Topics:
life cycle models,
requirements analysis,
design,
inspection,
testing,
documentation,
configuration control,
application generators,
CASE tools.
Prerequisites: SSD-4, SSD-7
SSD-10 Software Project Organization and Management
This course focuses on the organizational and management aspects of
software projects. Students learn techniques of project planning,
scheduling, costing and organization, and apply them in the context of a
multi-person project. A key emphasis is management of client relationships.
Also discussed are professional standards, ethical
behavior, legal and social issues.
Topics:
project management techniques: scheduling, budgeting, risk analysis;
basic project management tools;
leadership principles;
client relationships;
liability issues;
intellectual property issues;
confidentiality issues.
Prerequisites: SSD-9 (may be taken
concurrently).
Prerequisite Structure
Notes
The curriculum sketched above involves ten courses, in a prerequisite
structure requiring at least four semesters to complete the program. A
somewhat lighter-weight curriculum could condense courses 5 and 6 (data
structures and system-level programming) into one, and/or condense courses 9
and 10 (software engineering and project management) into one. It does not
appear to be sensible to further collapse the prerequisite structure,
however.
Note that courses 9 and 10 may lend themselves to incorporation of
internship arrangements.