--- tags: Documents --- # CS18 Learning Outcomes CS18 is designed to help you gain specific skills. They are organized into the following four theme areas. Each assignment will be labeled with a subset of these outcomes. ## Data Structures and Algorithms This theme focuses on how to organize and process data, with an emphasis on the structure of data and process organization ### Learning Objectives: - State the key structural and performance characteristics of core data structures: lists, trees, arrays, hashtables, heaps, and graphs - Select and justify a specific data structure for use in a specific problem, citing alignment with problem needs or resource constraints - Explain tradeoffs between mutable and immutable data structures in the context of a specific problem - Understand what makes a data structure mutable or immutable at the level of implementation - Embed and manipulate tree-shaped data in a linear data structure - Use memoization or dynamic programming to reduce the running time of a program - Implement reachability as a core computation when appropriate in a graph-based problem ## Object-Oriented Programming and Design This theme focuses on the idioms and mechanisms of designing and implementing good solutions with OO programming ### Learning Objectives: - Create a class hierarchy that makes proper use of interfaces (for variant types or contracts) and abstract classes (for sharing common code) - Develop classes that protect how their data is used through access modifiers and appropriate choice of provided methods - Develop programs that allow selecting different concrete data structures through the use of interfaces - Use concrete examples, invariants, hand tracing, and debugging to explore or explain how a program works - Comment code effectively with Javadocs ## Testing and Validation This theme focuses on the ability to demonstrate that a program behaves as intended ### Learning Objectives: - Develop a collection of examples and tests that exercise key behavioral requirements aspects of a problem - Write programs that can compile and run against a provided interface - Write programs that behave as expected based on a provided description or collection of test cases - Discuss how to detect whether a system has adverse impacts on individual users, populations, or organizations ## Technical and Social Impact Analysis This theme focuses on understanding the impacts of a design or a program on resources (such as time and space), users, and society ### Learning Objectives: - Correctly determine the run-time complexity of an algorithm - Correctly determine the space complexity of an algorithm - Identify potential societal impacts of a program on individual users, populations, or organizations