This class focuses on several core topics in the design, analysis, and implementation of computational tools that are drawn from the fields of data structures, software engineering, and programming languages. Other topics include object-oriented programming, test-driven development, data structures and abstract data types, imperative programming and memory management, and functional programming.
By solving practical, real-life problems in different programming languages and in different ways, students learn to select a language and approach most appropriate for the situation, and prepare to learn new languages independently. The high-level goal of this course is to train students to be able to draw from a versatile set of skills, which in turn will provide a strong foundation for further study in computer science.