This course builds on the fundamental programming and language skills from prerequisite courses to explore advanced concepts used in modern program design. Object-oriented techniques, concurrent processing, static and dynamic polymorphism, controlled types, and other constructs are used to create software that is robust, reusable, reliable, and extensive in varying problem domains. Cadets gain confidence in their abilities to model, implement, and test solutions to demanding programming problems.