This course builds on CMPT 141 by introducing additional problem solving methods and computer science principles, to solve larger problems that are more data intensive, or require more sophisticated techniques. These principles include data structures for efficient storage and retrieval of data, selection of appropriate data structures, algorithmic paradigms for solving difficult problems, and analysis of algorithms’ time and space requirements. This course also emphasizes fundamental principles of coding style, testing, and top-down design for writing robust, maintainable software.