This course explores the three fundamental aspects of computer science--theory, abstraction, and design--as the students develop moderately complex software in a high-level programming language. It will emphasize problem solving, algorithm development, and object-oriented design and programming. The course assumes prior experience in programming.