## Introduction to Program Design, Abstraction and Problem Solving CS 215

Covers basic data types, data structures and basic algorithm design and analysis techniques including recursion. Advanced programming skills in an object-oriented programming language is the goal. Students will also become familiar with basic software engineering methodology.

### Correlated Learning Outcomes

• AL-01 Analyze best, average, and worst-case behaviors of an algorithm. [Analyzing]
• AL-02 Estimate time and space complexities for a given algorithm using Big-O notation. [Evaluating]
• AL-03 Contrast standard complexity classes. [Analyzing]
• AL-04 Analyze the performances of an algorithm with various input sizes. [Analyzing]
• AL-05 Apply an appropriate algorithmic approach to a given problem. [Applying]
• AL-07 Implement basic numerical algorithms. [Applying]
• AL-08 Implement common search algorithms, including linear and binary searches. [Applying]
• AL-09 Implement common sorting algorithms, including iterative, quadratic, and recursive. [Applying]
• AL-10 Implement hash tables, including collision avoidance and resolution. [Applying]
• AL-11 Explain the runtime and memory efficiency of principal sorting, searching, and hashing functions. [Understanding]
• AL-12 Investigate factors other than computational efficiency that influence the choice of algorithms. [Applying]
• AL-13 Compare various data structures for a given problem. [Analyzing]
• AR-02 Analyze alternative formats to represent numerical data. [Analyzing]
• AR-03 Illustrate how fixed-length number representations could affect accuracy and precision, causing vulnerabilities. [Applying]
• AR-04 Examine the internal representation of non-numeric data. [Analyzing]
• AR-05 Compare different methods for converting numerical data from one format to another. [Analyzing]
• CYB-16 Explain the tradeoffs of developing a program in a type-safe language. [Understanding] See also PL-10.
• CYB-17 Implement programs that properly handle exceptions and error conditions. [Applying] See also SDF-12.
• OS-02 Compare prevailing types of operating systems. [Analyzing]
• OS-11 Use mechanisms available in an operating system to control access to resources. [Applying]
• PL-01 Design a simple class hierarchy using superclasses, subclasses, and abstract classes. [Creating]
• PL-03 Use access and visibility modifiers to secure class data and methods. [Applying]
• PL-04 Implement in code OOP constructs, including encapsulation, abstraction, inheritance, and polymorphism. [Applying]
• PL-05 Implement algorithms which utilize immutable and mutable variables. [Applying]
• PL-06 Contrast functional and object-oriented programming paradigms. [Analyzing]
• SDF-01 Design an algorithm in a programming language to solve a simple problem. [Creating]
• SDF-03 Compare multiple algorithms for a given problem. [Analyzing]
• SDF-06 Create programs which use defensive programming techniques, including input validation, type checking, and protection against buffer overflow. [Creating] See also CYB-15.
• SDF-07 Create code in a programming language that includes primitive data types, references, variables, expressions, assignments, I/O, control structures, and functions. [Creating]
• SDF-08 Create a simple program that uses persistence to save data across multiple executions. [Creating]
• SDF-09 Create a simple program that uses recursion. [Creating]
• SDF-10 Create simple programs that include each of the following data structures: lists, stacks, queues, hash tables, graphs and trees. [Creating]
• SDF-11 Compare the efficiency of basic operations across various data structures. [Analyzing]
• SDF-12 Investigate common coding errors that introduce security vulnerabilities. [Applying]
• SDF-14 Analyze programming code that utilizes preconditions, postconditions, and invariants. [Analyzing]
• SDF-15 Apply a variety of strategies to test and debug programs. [Applying]
• SDF-16 Use an integrated development environment (IDE) to create, execute, test, and debug secure programs. [Applying]
• SDF-17 Use standard libraries for a given programming language. [Applying]
• SDF-18 Apply consistent documentation and program style standards. [Applying]
• SE-12 Differentiate between program validation and verification. [Understanding]
• SE-13 Implement in code different types of testing, including security, unit testing, system testing, integration testing, and interface usability. [Applying]