Introduction to computer organization: CPU, registers, buses, memory, I/O interfaces. Number systems: arithmetic and information representation. Assembly language programming: addressing techniques, arithmetic and logic operations, branching and looping, stack operations, procedure calls, parameter passing, and interrupts. C language programming: pointers, memory management, stack frames, interrupt processing
Object-oriented programming techniques using C++: abstract data types and objects; encapsulation; inheritance; polymorphism; the Standard Template Library; the five phases of software development (specification, design, implementation, analysis, and testing).
Specification, implementations, and analysis of basic data structures (stacks, queues, graphs, hash tables, binary trees) and their applications in sorting and searching algorithms.
Design and implementation of large software projects, including building in a group a quarter-long programming project. In addition to discussing and enacting the systems development life cycle, students learn the basics of user experience design and formal software verification.