---
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