## Computer Science (CSC)

### Principles of Computer Science - CSC 110

Effective: 2022-03-31

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 110 is designed as an introductory computing course for general education. This course may meet the computing competency requirement for non-CS majors as determined by the institution. It is not meant as part of a sequence and is a terminal course.

### Course Objectives

- Civic Engagement
- Identify and discuss ideas about the civic impact of computing. Explore potential contributions to existing societal problems
- Critical Thinking
- Retrieve relevant information from the perspective of other disciplines to develop solutions using computing principles.
- Written Communication
- Communicate technical information through the use of appropriate language and computing-specific design representations or diagrams.
- Quantitative Literacy
- Perform basic numerical conversion relevant to computing.
- Develop solutions which require the use of arithmetic and logical operators and interpret quantitative results.
- Scientific Literacy
- Assess how current and emerging technologies contribute to technological development and dissemination
- Professional Readiness
- Work well with others and display situationally and culturally appropriate demeanor and behavior
- Creative Development
- Collaborate in the development of solutions to problems
- Identify the purpose of the program and develop potential inputs
- Design an appropriate method or approach to solve the problem.
- Correct errors in the algorithm, including error discovery through desk checking.
- Data
- Explain how computers represent text, images, and sounds using digital data.
- Explain the consequences of using bits to represent data
- Convert from decimal to binary and vice versa for positive integers to develop an understanding of how the computer represents data.
- Algorithm and Programming
- Develop algorithmic solutions using logical design tools such as flowchart or pseudocode
- Identify program inputs and outputs
- Use arithmetical and logical operators as part of expressions
- Apply conditional and iterative structures
- Describe basic concepts used in computing such as lists, binary search, modules, random values and libraries
- Compare the efficiency of different algorithms for solving a problem.
- Computer Systems and Networks
- Explain how computing devices work together in a network.
- Explain the basic structure and data transmission across the Internet.
- Explain how the Internet is different from the World Wide Web.
- Describe the concept and benefits of fault tolerance.
- Recognize sequential, parallel, and distributed computing.
- Define cybersecurity.
- Explain why cybersecurity is important, on an individual level, when using computers and mobile devices.
- Explain the relationship between the hardware, system software, and application software
- Social, Legal and Ethical Impact of Computing
- Explain how an effect of a computing innovation can be both beneficial and harmful
- Describe issues that contribute to the digital divide.
- Explain how bias exists in computing innovations.
- Explain how people participate in problem-solving processes at scale.
- Explain the concepts of intellectual property in computing.
- Identify behaviors that support a secure cyber presence

### Major Topics to be Included

- Creative Development
- Data
- Algorithm and Programming
- Computer Systems and Networks
- Social, Legal and Ethical Impact of Computing

### Computer Organization - CSC 205

Effective: 2022-01-01

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 205 or CSC 215 is intended to fulfill a first course in Computer Architecture, Organization and Systems in the CS curriculum. The focus of CSC 205 is on Architecture and Organization with a sampling of Systems content.

### Course Prerequisites/Corequisites

Prerequisite: CSC 221

### Course Objectives

- Machine level data representations
- Describe how numbers, text, analog, and other information are stored in a digital form
- Interpret computer data representation of unsigned integer, signed integer (in 2's complement form) and floating-point values in the IEEE-754 formats
- Explain the impact due to the limitations of data representations such as rounding effects and how their propagation affects the accuracy of chained calculations, overflow errors, and mapping of continuous information to discrete representation
- CPU and Instruction set architectures
- Differentiate various instruction set architectures
- Correlate instruction set architecture, microarchitecture, and system architecture
- Explain the concept of an instruction set architecture, ISA, and the nature of a machine-level instruction in terms of its functionality and use of resources (registers and memory).
- Define the various classes of instruction: data movement, arithmetic, logical, and flow control
- Describe the low-level operation and architecture of a typical CPU, including components, data pathways, and control signals
- Explore Instruction Set Architecture (ISA) design options
- Discuss CPU and Cache performance
- Describe hardware multithreading techniques
- Memory Hierarchy
- Identify the memory technologies found in computer processors, and computing systems
- Describe the various ways of organizing memory and the impacts on cost-performance tradeoffs, speed, capacity, latency, and volatility (also include long term storage with tape drives, hard drives, and SSDs with performance enhancements like RAID.)
- Memory Model
- Explains how high-level languages structure memory into stack, static, and dynamic regions and explain how each is used to include Mapping logical addresses to physical memory chips
- Digital logic, digital systems, and digital design
- Design a simple combinational circuit using logic gates
- Apply Boolean functions, algebraic theorems, and Karnaugh Maps to simplify combinational circuits
- Explain the role feedback plays in sequential circuits
- Identify and analyze common combinational and sequential circuits used in computer systems.
- Language hierarchy
- Explain how programming language abstractions at multiple levels are translated to lower levels and are executed
- I/O
- Explain how interrupts are used to implement I/O control and data transfers.
- Identify various types of buses in a computer system and describe how devices compete for a bus and are granted access to the bus.

### Major Topics to be Included

- CPU and Instruction set architectures
- Memory Hierarchy
- Memory Model
- Digital logic, digital systems, and digital design
- Language hierarchy
- I/O

### Introduction to Discrete Structures - CSC 208

Effective: 2021-08-01

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 208 is designed to provide students with components of discrete mathematics in relation to computer science used in the analysis of algorithms, including logic, sets and functions, recursive algorithms and recurrence relations, combinatorics, graphs, and trees.

### Course Objectives

- Critical Thinking
- Evaluate the success of computational solutions for a given scenario.
- Written Communication
- Develop concrete and implementable solutions to a computational problem, and exchange ideas with robust logic and mathematically soundness in the computer literate community.
- Quantitative Literacy
- Perform accurate calculations, interpret quantitative information, apply and analyze relevant numerical data, and use results to support conclusions
- Professional Readiness
- Work well with others and display situationally and culturally appropriate demeanor and behavior
- Scientific Literacy
- Assess how current and emerging technologies contribute to technological development and dissemination
- Sets, Relations, and Functions
- Explain with examples the basic terminology of functions, relations, and sets.
- Perform the operations associated with sets, functions, and relations.
- Compare practical examples to the appropriate set, function, or relation model, and interpret the associated operations and terminology in context.
- Use the terms cardinality, finite, countably infinite, and uncountably infinite to identify characteristics is associated with a given set.
- Demonstrate the algebra of sets, functions, sequences, and summations.
- Proof Techniques
- Outline the basic structure of each proof technique, including direct proof, proof by contradiction, and induction.
- Apply each of the proof techniques (direct proof, proof by contradiction, and proof by induction) correctly in the construction of a sound argument.
- Deduce the best type of proof for a given problem.
- Explain the parallels between ideas of mathematical and/or structural induction to recursion and recursively defined structures.
- Explain the relationship between weak and strong induction and give examples of the appropriate use of each.
- ? Construct induction proofs involving summations, inequalities, and divisibility arguments.
- Basics of Counting
- Apply counting arguments, including sum and product rules, inclusion-exclusion principle and arithmetic/geometric progressions.
- Apply the pigeonhole principle in the context of a formal proof.
- Calculate permutations and combinations of a set, and interpret the meaning in the context of the particular application.
- Compare real-world applications appropriate to counting formalisms.
- Solve a variety of basic recurrence relations.
- Analyze a problem to determine underlying recurrence relations.
- Perform computations involving algebraic and modular arithmetic.
- Determine if a recursive solution is more efficient than an iterative solution.
- Basic Logic
- Use a truth table to prove the logical equivalence of statements.
- Convert logical statements from informal language to propositional and predicate logic expressions.
- Apply formal logic proofs and/or informal, but rigorous, logical reasoning to real problems such as predicting the behavior of software or solving problems such as puzzles.
- Use the rules of inference to construct proofs in propositional and predicate logic.
- Describe how symbolic logic can be used to model computer applications.
- Apply formal methods of symbolic propositional and predicate logic, such as calculating validity of formulae and computing normal forms.
- Describe the strengths and limitations of propositional and predicate logic.
- Graph & Trees
- Illustrate the basic terminology of graph theory including properties and special cases for each type of graph/tree
- Demonstrate different traversal methods for trees and graphs, including pre-, post-, and in-order traversal of trees.
- Solve a variety of real-world problems in computer science using appropriate forms of graphs and trees, such as representing a network topology or the organization of a hierarchical file system.
- Implement graph algorithms.
- Implement and use balanced trees and B-trees.
- Demonstrate how concepts from graphs and trees appear in data structures, algorithms, proof techniques (structural induction), and counting.
- Describe binary search trees and AVL trees.
- Explain complexity in the ideal and in the worst-case scenario for both implementations.
- Discrete Probability
- Calculate probabilities of events and expectations of random variables for elementary problems.
- Differentiate between dependent and independent events.
- Explain the significance of binomial distribution in probabilities.
- Apply Bayes Theorem to determine conditional probabilities in a problem.
- Apply the tools of probability to solve problems.
- Recurrence Relations
- Explain recurrence relations in respect sequence or multidimensional array of values in computing.
- Explain what types of problems are solved using recurrence methods.
- Explain how recurrence ties to complexity analysis.
- Apply recurrence relations in a given scenario.
- Boolean Algebra & Expressions
- Convert a verbal specification into a Boolean expression
- Explain basic properties of Boolean algebra: duality, complements, standard forms.
- Apply Boolean algebra to prove identities and simplify expressions.
- Translate verbal specifications into Boolean expressions and state machines.
- Use Karnaugh maps to find minimal sum-of-products and products-of-sums expressions.
- Combinatorial Circuits
- Explain the operation of discrete logic gates.
- Describe the relationship between Boolean algebra and electronic circuits.
- Analyze a combinational network using Boolean expressions.
- Design simple combinational networks that use NAND, NOR, and XOR gates.
- Design with MSI components such as encoders, decoders, multiplexers, adders, arithmetic-logic units, ROMs, and simple programmable logic arrays
- Calculate delays in ripple carry adders and simple combinational arrays

### Major Topics to be Included

- Sets, Relations, and Functions
- Proof Techniques
- Basics of Counting
- Basic Logic
- Graph & Trees
- Discrete Probability
- Recurrence Relations
- Boolean Algebra & Expressions
- Combinatorial Circuits

### Computer Systems - CSC 215

Effective: 2022-01-01

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 205 or CSC 215 is intended to fulfill a first course in Computer Architecture, Organization and Systems in the CS curriculum. The focus of CSC 215 is on Systems with a sampling of Architecture and Organization content.

### Course Prerequisites/Corequisites

Prerequisite: CSC 221

### Course Objectives

- Machine level data representations
- Describe how numbers, text, and other analog or discrete information can be represented in digital form
- Interpret computer data representation of unsigned integer, signed integer (in 2's complement form) and floating-point values in the IEEE-754 formats
- Explain the impact due to the limitations of data representations such as rounding effects and their propagation affect the accuracy of chained calculations, overflow errors, and mapping of continuous information to discrete representation
- CPU and Instruction Set Architecture
- Differentiate various instruction set architectures
- Memory Hierarchy
- Identify the memory technologies found in a computer processor and computing systems
- Describe the various ways of organizing memory and the impacts on cost-performance tradeoffs, speed, capacity, latency, and volatility (also include long term storage with tape drives, hard drives, and SSDs with performance enhancements like RAID)
- Describe the operation of common cache mapping schemes: Direct, Associative, and Set associative
- Digital Logic, Digital Systems, and Digital Design
- Design a simple combinational circuit using logic gates
- Apply Boolean functions, algebraic theorems, and Karnaugh Maps to simplify combinational circuits
- Memory model
- Explain how high-level languages structure memory into stack, static, and dynamic regions and explain how each is used to include mapping logical addresses to physical memory chips
- Virtual Memory
- Examine the hardware and control structures that support virtual memory
- Explain how logical addresses are mapped to physical addresses by the OS
- Explain how VM is used for caching and memory protection
- Security
- Explain how security concerns impact the development and design of computer systems
- Operating Systems
- Explain the general structure of a multi-programmed operating system
- Explain how a common file system works, including structure, I/O operations, and security
- Describe the role of the kernel in operating systems
- Compare processes vs. threads in terms of how each are created, what resources are shared, and how they communicate
- Language hierarchy
- Explain how programming language abstractions at multiple levels are translated to lower levels and executed
- C/Linux
- Complete C programming projects on the command line using common Linux utilities (e.g., cd, ls, pwd, mkdir, rmdir, rm, cat, cp, man, tar, nano)
- Compile and run C programs using gcc and makefiles
- Debug C programs using gdb to step through code, stop at breakpoints, and examine variables/registers/memory
- Write C programs that perform low-level manipulations involving bitwise operations, masking, memory manipulation and management, structs and unions, signed vs. unsigned integers, strings, arrays, and file I/O

### Major Topics to be Included

- Machine level data representations
- CPU and Instruction Set Architecture
- Memory Hierarchy
- Digital Logic, Digital Systems, and Digital Design
- Memory model
- Virtual Memory
- Security
- Operating Systems
- Language hierarchy
- C/Linux

### Introduction to Problem Solving and Programming - CSC 221

Effective: 2021-08-01

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 221, CSC 222, and CSC 223 comprise the standard sequence of minimal programming content for computer science majors. The course sequence will teach the students to use high-level languages and their applications to problem solving by using algorithms within procedural and object-oriented techniques, while ensuring data adheres to a structured model. This course is the first course in the sequence. It introduces computer based problem solving and implementation of solutions in a high level programming language. Python is the preferred language for this course, institutions may offer using a different language to align with primary 4-year partner requirements.

### Course Objectives

- Civic Engagement
- Engage and build technology that responds to human needs and helps people navigate institutional systems
- Critical Thinking
- Assess why certain solutions might not work and to save time in coming up with a more efficient approach
- Professional Readiness
- Work well with others and display situationally and culturally appropriate demeanor and behavior
- Quantitative Literacy
- Perform accurate calculations, interpret quantitative information, apply and analyze relevant numerical data, and use results to support conclusions
- Scientific Literacy
- Represent real-world objects and processes virtually by identifying properties, behavior, and operations relevant to solving problems on a computer.
- Written Communication
- Develop, convey, and exchange ideas in writing, as appropriate to a given context and audience
- Basic concepts of computer systems
- Differentiate computer components by functionality.
- Define basics of computer storage devices.
- Illustrate the computer structure.
- Define Binary and Hexadecimal numeration systems.
- Define types of software
- Explain the use of computers, and the social impact they have.
- Discuss secure programming
- Evaluate the ethical aspects of programming
- Processing Code
- Editors, compilers and/or interpreters; distinguishing source code, object code, and executables.
- Reading and evaluate compilation error messages.
- Executing programs.
- Analyzing and resolving run-time errors.
- Problem analysis and algorithmic modeling
- List and apply the steps involved in problem solving through algorithmic modeling.
- Describe activities related to program modeling and design including algorithm development.
- Solve problems using techniques such as pseudocode, flowcharts, and model development.
- Verify algorithms and identify errors.
- Distinguish between procedural techniques and object-oriented techniques.
- Write programs using good programming practices.
- Use of data
- Compare and contrast data types.
- Describe the use of variables.
- Build expressions using variables, literal data, and operators, correctly using rules of operator precedence.
- Decision structures
- Describe how conditional selection operations are used to alter the sequential execution of a program.
- Describe how relational and Boolean operators are used to form logical expressions that evaluate to true or false
- Identify techniques to evaluate selection statements for logic errors.
- Develop programs using sequential and selection operations.
- Repetition structures
- Describe how repetition structures are used to alter the sequential execution of a program.
- Choose appropriate repetition structures based on the type of application.
- Identify techniques to evaluate repetition statements for logic errors.
- Develop programs using repetition structures.
- Programming with Procedures
- Apply modularization to manage complexity of programming
- Describe the roles of parameters in a procedure definition.
- Illustrate parameter passing when invoking procedures.
- Solve problems using procedures.
- Classes and Introduction to Libraries
- Describe information hiding and encapsulation.
- Describe the concept of class and object of a class.
- Use language classes from the standard library to develop programs.
- Arrays
- Define the nature and purpose of an array.
- Use arrays as parameters and returned values in procedures.
- Evaluate programs that use arrays.
- Develop applications using arrays.

### Major Topics to be Included

- Basic concepts of computer systems
- Processing Code
- Problem analysis and algorithmic modeling
- Use of data
- Decision structures
- Repetition structures
- Programming with Procedures
- Classes and Introduction to Libraries
- Arrays

### Object-Oriented Programming - CSC 222

Effective: 2021-08-01

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 221, CSC 222, and CSC 223 comprise the standard sequence of minimal programming content for computer science majors. The course sequence will teach the students to use high-level languages and their applications to problem solving by using algorithms within procedural and object-oriented languages, while ensuring data adheres to a structured model. The Introduction to Object-Oriented Programming course covers the topics of classes, objects, encapsulation, cohesion, inheritance, abstraction, and polymorphism. JAVA is the preferred language for this course, institutions may offer using a different language to align with primary 4-year partner requirements.

### Course Prerequisites/Corequisites

Prerequisite: CSC 221 or equivalent, or departmental consent.

### Course Objectives

- Civic Engagement
- Engage and build technology that responds to human needs and helps people navigate institutional systems
- Critical Thinking
- Assess why certain solutions might not work and to save time in coming up with a more efficient approach
- Professional Readiness
- Work well with others and display situationally and culturally appropriate demeanor and behavior
- Quantitative Literacy
- Perform accurate calculations, interpret quantitative information, apply and analyze relevant numerical data, and use results to support conclusions
- Scientific Literacy
- Represent real-world objects and processes virtually by identifying properties, behavior, and operations relevant to solving problems on a computer.
- Written Communication
- Develop, convey, and exchange ideas in writing, as appropriate to a given context and audience
- Review of Procedural Problem-Solving Concepts
- Describe activities related to program development
- Solve problems using techniques such as pseudocode, flowcharts, UML, and model development.
- Evaluate algorithms for errors
- Discuss the presence of algorithms in various activities
- Review of Procedural Programming
- Design programs using appropriate program design techniques.
- Develop programs using sequential and selection operations
- Choose adequate repetition structures based on the type of application
- Solve problems using procedures
- Develop applications using arrays
- Object-Oriented Design
- List the members of a class and identify the purpose of each.
- Describe the mechanisms used to provide and restrict access to class members.
- Explain the difference between overloading and overriding
- Explain how to construct and release objects within a program
- Explain cohesion and how to achieve high cohesion
- Compare procedural design to an object-oriented design
- Development & Testing Tools
- Apply a variety of tools for program development and testing.
- Apply a version control system in team or multiple revision scenarios.
- Apply the use of an automated debugger to set breakpoints and examine data values.
- Abstract data type (ADT) Implementations & Applications
- Design and implement classes
- Design, implement, and manipulate objects belonging to classes
- Explain the difference between data structures that are internal versus external to a class.
- Recursion
- Explain the parallels between ideas of mathematical and/or structural induction to recursion and recursively defined structures.
- Create a simple program that uses recursion.
- Describe how recursion is implemented on a computer.
- Inheritance & Polymorphism
- Explain the benefits and restrictions of inheritance
- Distinguish between inheritance of implementation and inheritance of design
- Design class hierarchies using inheritance and interfaces.
- Create a class which implements an interface
- Explain how inheritance and virtual functions implement dynamic binding with polymorphism.
- Files & Exceptions
- Create programs using file handling techniques
- Describe the use of relative and absolute paths to identify a file.
- Detecting end of input conditions and common error conditions.
- Explain encapsulating exceptions
- Demonstrate throwing and catching exceptions
- Write code to implement try catch and finally blocks
- Write code to create a custom Exception

### Major Topics to be Included

- Review of Procedural Problem-Solving Concepts
- Review of Procedural Programming
- Object-Oriented Design
- Development & Testing Tools
- Abstract data type (ADT) Implementations & Applications
- Recursion
- Inheritance & Polymorphism
- Files & Exceptions

### Data Structures and Analysis of Algorithms - CSC 223

Effective: 2021-08-01

### Course Description

The course outline below was developed as part of a statewide standardization process.

### General Course Purpose

CSC 221, CSC 222, and CSC 223 comprise the standard sequence of minimal programming content for Computer Science majors. The course sequence will teach the students to use high-level languages and their applications to problem solve by using algorithms within procedural and object-oriented languages, while ensuring data adheres to a structured model. JAVA or C++ is the preferred language for this course, institutions may offer using a different language to align with primary 4-year partner requirements.

### Course Prerequisites/Corequisites

Prerequisite: CSC 222 or departmental consent. Corequisite: CSC 208 or equivalent.

### Course Objectives

- Civic Engagement
- Engage and build technology that responds to human needs and helps people navigate institutional systems
- Critical Thinking
- Assess why certain solutions might not work and to save time in coming up with a more efficient approach
- Professional Readiness
- Work well with others and display situationally and culturally appropriate demeanor and behavior
- Quantitative Literacy
- Scientific Literacy
- Represent real-world objects and processes virtually by identifying properties, behavior, and operations relevant to solving problems on a computer.
- Written Communication
- Develop, convey, and exchange ideas in writing, as appropriate to a given context and audience
- Review of Object- Oriented Principles
- Compare and contrast procedural versus object-oriented programming
- Design class hierarchies using inheritance and interfaces
- Implement in code OOP constructs including encapsulation, inheritance, and polymorphism
- Review the design, implementation, and efficiency of recursive algorithms
- Review of arrays and exception handling
- Analysis of Algorithms
- Discuss the differences between iterative vs. recursive algorithms
- Demonstrate worst-case complexity function
- Define other complexity functions such as best case, average case, and amortized
- Data Structures
- Describe and explain abstract data types including stacks, queues, singly and doubly linked list, sets, maps and graphs
- Compare and contrast contiguous and linked structures
- Explain the purpose and use of iterators
- Implement in code the various data structures using both contiguous and linked applications where applicable
- Analyze the time and space efficiency of data structures and algorithms and apply this analysis to select the best tools for solving problems.
- Explain how generics and parameterized types implement dynamic binding with polymorphism.
- Searching and Sorting Algorithms
- Analyze a variety of algorithms for searching and sorting
- Classify the various sorting algorithms in terms of their Big-O analysis
- Implement both recursive and non-recursive algorithms for searches
- Additional Data Structures
- Demonstrate the appropriate use of trees, graphs, sets, heaps, hash tables, and maps to computational problems
- Describe techniques to generate keys for hashed structures
- Discuss collision handling for hashing analysis
- Demonstrate the use of binary search trees
- Identify other types of tree data structures and their applications
- Real-World Applications
- Create a solution to real-world computing problems by applying appropriate data structures.
- Employ best practices to design, document and implement the solution to a real-world application
- Make efficient use of formal testing and debugging.
- Apply the use of a version control system or a sandbox environment in team or multiple revision scenarios.
- Demonstrate proficiency in the use of programming languages to solve complex problems in a secure and robust manner.
- Discuss ethical aspects of programming and data handling.

### Major Topics to be Included

- Review of Object-Oriented Principles
- Analysis of Algorithms
- Data Structures
- Searching and Storing Algorithms
- Additional Data Structures
- Real-World Applications