# COMPUTER SCIENCE BS Course Descriptions

## CS 103: Artificial Intelligence for Everyone

**Credits:**2.0

In this class students will learn what Artificial Intelligence (AI) is and how it impacts our lives. We will also learn how it comes to decisions and its strengths and weaknesses. Additionally we will focus on AI ethics and how it affects business and culture. **Prerequisite(s):** Placement into ENGL&101 or higher is required to take this course.

**Course Level Objectives**

- Define AI and explain how AI uses algorithms to solve problems, perform computations, and automate reasoning.
- Explain the basic components of AI algorithms to a person unfamiliar with AI.
- Identify and utilize basic AI tools to solve a problem.
- Recognize and analyze the usage of AI in our society.
- Identify and discuss various ethical, regulatory, and policy implications resulting from the integration of AI in our society.

## CS 115: Principles of Computer Science

**Credits:**5.0

Introduces fundamental concepts needed for computer programming and computational thinking. Includes an introduction to logical reasoning, procedural decomposition, conditionals, iteration, problem solving, and abstraction. No previous programming experience is expected. **Prerequisite(s):** Completion of MATH 93or MATH 97with a minimum grade of 2.0 or placement above MATH 97 or instructor permission.

**Course Level Objectives**

- Distinguish the field of computer science from programming. Including descibing some of the fundementals of computer science such as how data is stored, binary numbers, searching and sorting.
- Interpret code and determine its output without running it.
- Translate a given algorithm into a working program in a given programming language with output matching a provided specification.
- Given a simple program with errors, apply debugging techniques to find and fix the problems.
- Determine the correct logical construct to use to solve a programming problem.
- Write maintainable code that matches a provided style guide.
- Describe what code does to both technical and non-technical audiences.

## CS 119: Introduction to Database Data Processing

**Credits:**3.0

An introduction to retrieving data from a database with a query language and processing it with a spreadsheet program. Topics include designing queries that sort, filter and aggregate data and using spreadsheets to clean, calculate, summarize and chartdata. **Prerequisite(s):** Admission into the Data Analytics Certificate (Beginner/Early Career) program or permission from the instructor.

**Course Level Objectives**

- Recognize and be able to describe how a database stores information via tables.
- Compose database queries to retrieve data stored in multiple tables/collections from a database.
- Compose and troubleshoot database queries that join, sort, filter and aggregate data across multiple tables/collections.
- Construct formulas in spreadsheet softwares, including the use of built-in functions, and relative and absolute references (e.g. VLookUp, Find)
- Developand modify charts.
- Explore datasets and apply consolidation andde-duplication strategies.
- Use pivot tables to calculate, summarize and analyze data.

## CS 122: Introduction to Statistical Analysis and Experimentation

**Credits:**4.0

Apply statistical techniques to datasets to produce useful and non-biased results. Topics include probability theory, central tendancy, characterizing ditribution types, hypothesis testing, statistical significance and cognitive bias. **Prerequisite(s):** Admission into the Data Analytics Certificate (Beginner/Early Career) program or permission from the instructor.

**Course Level Objectives**

- Demonstrate the application of the basics of probability theory and apply conditional probability and Bayes' Theorem to determine likelihood of outcomes.
- Define concepts in Central Tendency, and examine its applications in interpreting data skewness and kurtosis.
- Illustrate how to describe data and its variability through summary statistics such as mean, median, variance and quantiles.
- Characterize similarities and differences between various probability distributions including probability density functions and cumulative density functions.
- Define hypothesis testing and statistical significance, and evaluate how these are relevant in A/B testing.
- Analyze cognitive biases using case studies.

## CS 123: Introduction to Machine Learning

**Credits:**4.0

An exploration of machine learning models with a focus on identifying when each is best used and data ethics. Models discussed include supervised learning, unsupervised learning and classification. **Prerequisite(s):** CS 122 with a minimum grade of 2.0 or instructor permission.

**Course Level Objectives**

- Explore types of machine learning models including supervised andunsupervised learning, and classify when to use these general models.
- Compare supervised learning models, and examine differences between regression andclassification models.
- Formulate linear regression models, evaluate its assumptions, and interpret its applications.
- Design classification models using Logistic Regression andDecision Trees, and compute their performance.
- Recognize when to use unsupervised learning models and applyclustering algorithms such ask-means to group data.
- Explore Data Ethics in Machine Learning using case studies.

## CS 124: Introduction to Data Processing with Scripting

**Credits:**4.0

Introduction to performing data analysis tasks by writing code in a scripting language. Tasks include, ingesting data in various formats, using existing libraries to clean, organize and manipulate data and using programming constructs to accomplish project-specific tasks. **Prerequisite(s):** Admission into the Data Analytics Certificate (Beginner/Early Career) program or permission from the instructor.

**Course Level Objectives**

- Compose code in a scripting language to ingest data files in various formats (such R or Python)
- Useexisting libraries such as pandas and dataframe concepts, cleannumerical andcategorical data including imputation of missing values.
- Design and formulate techniques to store andmanipulate data using common data structures, conditionals, loops, and built-in functions.
- Write basic custom functions for repeatable analysis.

## CS& 131: Computer Science I C++

**Credits:**5.0

Introduction to computer programming in C++ for students with a small amount of programming experience. Includes procedural programming including data types, control structures (loops, conditionals), functions, and arrays and related algorithms. **Prerequisite(s):** CS 115 or ENGR 121, with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Design, implement, document, test and debug computer code.
- Breakdown a solution for a computing problem into distinct tasks, using methods, parameters and returns to reduce redundancy and capture code structure.
- Write comments for computer code correctly and appropriately for collaboration and communication.
- Use variables, constants and various data types in computer programs correctly and within appropriate scope.
- Execute the software design process of planning code before writing it using pseudocode, drawing diagrams or charts or writing a description.
- Explain the differences between syntax errors, runtime errors and logic errors and be able to debug each type.

## CS 132: Computer Science II C++

**Credits:**5.0

Builds upon concepts learned CS& 131 Computer Science I. Reinforces good program design, style, and decomposition while also introducing students to object-oriented programming in C++. Students gain the ability to solve bigger and more complex computing problems by learning how to use data structures (lists, dictionaries, sets, etc.), recursion, interfaces and inheritance. **Prerequisite(s):** Completion of CS& 131 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Implement programming solutions following a provided object-oriented design and common best practices.
- Employ advanced inheritance concepts in programming to link common data types together and simplify their construction.
- Read, write and debug C++ programs utilizing recursion.
- Solve computer science problems using common computer science abstract data types, libraries and algorithms.
- Implement and test a design of relationships among objects using a class hierarchy and inheritance.

## CS 133: Computer Science III C++

**Credits:**5.0

C++ Data Structures. Focuses on the implementation and analysis of elementary data structures such as lists, stacks, queues, maps, sets, trees, and related algorithms. **Prerequisite(s):** Completion of CS 132 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Demonstrate the implementation of the underlying data structures used in computer science, such as the list, set and map implementations using both array and linked node implementations.
- Describe, implement and debug simple algorithms using the concept of recursion as a tool for data structure implementation.
- Study complexity and performance tradeoffs using classical algorithms and standard notation such as Big-O.
- Demonstrate the ability to decompose a large scale process into multiple object oriented classes/interfaces/etc. to make a single unified solution.

## CS 134: Introduction to Data Visualization and Storytelling

**Credits:**4.0

An introduction to how to effectively communicate the results of data analysis. Topics include effective design and creation of charts, graphs and dashboards as well as presenting data findings to an audience. **Prerequisite(s):** CS119 or CS 122 with a minimum grade of 2.0 or instructor permission.

**Course Level Objectives**

- Construct basic graph andchart designs that maximize impact of displayed data.
- Review Tufte's principles of data visualizations and examine graphs andcharts for better cognitive understanding.
- Discover how to build custom interactive dashboards using Tableau.
- Use the Pyramid Principle to develop a compelling narrative using data.
- Developa presentation that pitches a new idea or shares recommendations based on data analysis.

## CS& 141: Computer Science I Java

**Credits:**5.0

Introduction to computer programming in Java for students with a small amount of programming experience. Includes procedural programming including primitive data types, control structures (loops, conditionals), methods, and arrays and related algorithms. **Prerequisite(s):** Completion of CS 115 or ENGR 121 or equivalentwith a grade of 2.5 or higher; or instructor permission.

**Course Level Objectives**

- Design, implement, document, test and debug computer code.
- Breakdown a solution for a computing problem into distinct tasks, using methods, parameters and returns to reduce redundancy and capture code structure.
- Write comments for computer code correctly and appropriately for collaboration and communication.
- Use variables, constants and various data types in computer programs correctly and within appropriate scope.
- Execute the software design process of planning code before writing it using pseudocode, drawing diagrams or charts or writing a description.
- Explain the differences between syntax errors, runtime errors and logic errors and be able to debug each type.

## CS 142: Computer Science II Java

**Credits:**5.0

Builds upon concepts learned in CS& 141 Computer Science I. Reinforces good program design, style, and decomposition while also introducing students to object-oriented programming in Java. Students gain the ability to solve bigger and more complex computing problems by learing how to use data structures (lists, dictionaries, sets, etc.), recursion, interfaces and inheritance. **Prerequisite(s):** Completion of CS& 141 or equivalent with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Implement programming solutions following a provided object-oriented design and common best practices.
- Employ advanced inheritance concepts in programming to link common data types together and simplify their construction.
- Read, write and debug Java programs utilizing recursion.
- Solve computer science problems using common computer science abstract data types, interfaces and methods.
- Implement and test a design of relationships among objects using a class hierarchy and inheritance.

## CS 143: Computer Science III Java

**Credits:**5.0

Java Data Structures. Focuses on the implementation and analysis of elementary data structures such as lists, stacks, queues, maps, sets, trees, and related algorithms. **Prerequisite(s):** Completion of CS 142 or equivalent with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Demonstrate the implementation of the underlying data structures used in computer science, such as the list, set and map implementations using both array and linked node implementations.
- Describe, implement and debug simple algorithms using the concept of recursion as a tool for data structure implementation.
- Study complexity and performance tradeoffs using classical algorithms and standard notation such as Big-O.
- Demonstrate the ability to decompose a large scale process into multiple object oriented classes/interfaces/etc. to make a single unified solution.

## CS 171: Linear Algebra for Computer Science

**Credits:**5.0

This course uses a high-level programming language as a vehicle to discuss those aspects of linear algebra that are most important in data analytics and computer science. It will cover the theory behind linear algebra ideas as well as how and when to apply them. The main topics include basic matrix operations, linear transformations, ranges, linear combinations and spans, systems of linear equations, symmetric matrices, inverses, determinants, triangular matrices, trace, eigenvalues, and eigenvectors. **Prerequisite(s):** Completion of CS& 131 or CS& 141 with a grade of 2.5 or higher, and placement into MATH& 141, or instructor permission.

**Course Level Objectives**

- Solve problems using concepts and methods of linear algebra including topics such as Gauss-Jordan elimination, vector spaces, eigenvalues, eigenvectors, vector spaces, and linear transformations.
- Apply linear algebra concepts to common computing, engineering and mathematical problems.
- Write a program using linear algebra to solve an appropriate data analytics problem.
- Describe the relationship between computer-based activities and application of linear algebra concepts.
- Identify possible uses of linear algebra in various career fields.

## CS 199: Special Project: Computer Science

**Credits:**5.0

Special study to be arranged by student and supervising instructor. S/U grade option. Credit available with approval. For information contact the division secretary in Alderwood Hall 218A or phone 425.640.1679.

**Course Level Objectives**

- Successfully complete a project related to the specified topic.

## CS 200: Capstone Project I

**Credits:**4.0

Apply skills learned in other Data Analytics courses to real world data and produce a portfolio-worthy analytics report. **Prerequisite(s):** Completion of at least three other Data Analytics Early Career Certificatecourses.

**Course Level Objectives**

- Integrate and apply what was learned in previous courses to a real world scenario.
- Construct individual analytics projects to simulate application of learnings with full ownership, responsibility, and engagement from the student.
- Demonstrate collaboration techniques with others on a larger project as needed.
- Produce a completed analytics project suitable for publishing in astudents' portfolio using a tool such as Github or Tableau Public.

## CS 202: Discrete Structures I

**Credits:**5.0

An introductory course covering the study of objects that have discrete as opposed to continuous values including the foundations of logic, algorithm complexity, mathematical induction and reasoning, recursion, relations, and combinatorics. **Prerequisite(s):** Completion of CS& 141 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Use logical notation to define and reason about fundamental mathematical concepts such as sets, relations, functions, and integers.
- Formulate induction hypotheses and write simple induction proofs.
- Use the elementary properties of modular arithmetic and explain their applications in computer science such as cryptography and hashing algorithms.
- Calculate the possible outcomes of combinatorial processes such as permutations and combinations.
- Calculate probabilities and discrete distributions for simple combinatorial processes.

## CS 219: Advanced Database Data Processing

**Credits:**3.0

Advanced programming features allowing students to make more complex selections in databases, manipulate, clean and process data in more advanced ways with a high level scripting language like R or Python and optimize code to improve performance on very large datasets. This course is part of the Data Analytics for Professionals program.

**Course Level Objectives**

- Review basic database commands such as join, select, join, filtering, and union operations.
- Apply advanced SQL commands to curated data including aggregate functions, common table expressions, subqueries, and window functions.
- Compose code using R or Python to extract, transform and load data, and use libraries to update, insert into, aggregate and synthesize information using common data structures such as lists, tuples and dataframes.
- Examine standard techniques in exploring, cleaning, and transforming data for analysis including imputing missing data, binning of data, and one hot encoding.
- Assess performance of queries and scripts, and enhance code for optimal runtime.
- Describe and articulate differences between relational databases and NoSQL databases.

## CS 220: Computing, Data, and Society

**Credits:**5.0

Exploration of the use and impact of technology on society. This includes issues that arise from artificial intelligence, algorithmic bias, social media, mass data collection, and the spread of disinformation. Also discussed are great computing failures, and legal issues related to copyrights and patents. **Prerequisite(s):** Completion of ENGL& 101 with a 2.0 or higher or instructor permission.

**Course Level Objectives**

- Describe the history of computing and identify key social, regulatory, political or technical advances which resulted in significant impact on society.
- Compare and contrast the benefits and risks of generative AI systems to solve a given problem.
- Describe Algorithmic Bias and identify impacts on society.
- Analyze the effects of Social Media on society including mass data collection, mass personalization and the spread of disinformation.
- Compare and contrast disinformation and misinformation.
- Evaluate ways that technology erodes privacy and facilitates spying, providing assessment on the benefits and risks to society.
- Describe ways that technology has benefited (and challenged) society.
- Explain the application of copyright and patents to computer software.

## CS 222: Advanced Statistical Methods for Data Analysis

**Credits:**3.0

Students will build on their current probability and statistics skills to allow them to analyze and interpret complex data. This course is part of the Data Analytics for Professionals program.

**Course Level Objectives**

- Review basic probability theory including law of total probability, conditional probabilities, probability distribution functions and cumulative distributive functions.
- Practice designing experiments including determining number of variants, holdout strategy, sample sizes.
- Practice evaluating experiments and testing for significance in cases of large versus small samples or skewed data.
- Discover pitfalls of A/B testing. Examine Type I and Type II errors, and how to assess trade-offs between the errors when evaluating experiments.
- Identify when to use causal inference, and evaluate data for causality when experimentation at scale is not possible.
- Explore how to design objective functions when examining errors between predicted and modeled outputs for numerical data.
- Tabulate confusion matrices for categorical data, and compare various performance metrics to assess performance of models.
- Describe bias-variance trade-off, and its importance in analyzing data results.
- Recognize standard approaches for survey design and analysis.

## CS 223: Supervised Learning Models

**Credits:**2.0

Compare and apply supervised machine learning models (such as classification models versus regression models) using popular modeling techniques including linear regression, decision trees, random forests etc. This course is part of the Data Analytics for Professionals program. **Prerequisite(s):** Successful completion of CS 222or instructor permission.

**Course Level Objectives**

- Review linear regression, pitfalls and how to compare predicted values to actuals.
- Compare and contrast techniques to apply when datasets are small or when overfitting might occur such as cross-validation, bootstrapping, and bagging.
- Use supervised models for numerical data prediction using decision trees, random forest, neural networks and gradient boosting trees.
- Evaluate regression models with error measurements.
- Classify categorical outputs using tree-based models, logistic regression, Naive Bayes and Linear SVM models.
- Evaluate classification models using confusion matrices, plotting ROC, precision and recall curves, and calculating other performance metrics

## CS 224: Unsupervised Learning Models

**Credits:**2.0

Compare and apply unsupervised machine learning models using modeling and analysis techniques such as clustering, dimensionality reduction, and association. This course is part of the Data Analytics for Professionals program. **Prerequisite(s):** Successful completion of CS 222or instructor permission.

**Course Level Objectives**

- Characterize when dimensionality reduction may be needed and use common techniques such as Principal Components Analysis, Latent Dirichlet Analysis and Singular Value Decomposition.
- Apply key types of unsupervised learning and popular clustering methods such as k-means, k-modes, hierarchical clustering, and Gaussian Mixture Model.
- Describe reinforcement learning and when it should be used.

## CS 227: Data Communication and Authoring Research

**Credits:**3.0

Evaluate business domains to which data analytics can be applied, translate business questions into data questions, and formulate analysis plans. Demonstrate communication techniques used to influence business stakeholders including authoring presentations to a leadership audience, and writing technical papers to convey research & analytics findings. This course is part of the Data Analytics for Professionals program.

**Course Level Objectives**

- Integrate end-to-end the scientific method of answering business questions with data and machine learning models. Evaluate frameworks such as the Cross-Industry Standard Process for Data Mining (CRISP-DM).
- Use the Pyramid Principle to structure communications and to influence stakeholders to make data-informed decisions.
- Exercise data visualization skills including design of static graphs and charts, and interactive dashboards.
- Practice developing presentations and writing papers to convey information from analyses, models and research.

## CS 228: Programming for Text Analytics

**Credits:**2.0

Students will learn to process natural language using a high level programming language like Python or R. This course is part of the Data Analytics for Professionals program. **Prerequisite(s):** Completion of CS 219 Advanced Data Processing or instructor permission.

**Course Level Objectives**

- Extract, transform and load raw text data files into Python development environment.
- Convert raw text data into meaningful components for word frequency analysis and other relational analyses (e.g. parse data into phone numbers, email addresses etc.)
- Use natural language processing libraries to extract meaning out of text data including use of lemmatization to detect topics and evaluate sentiment.

## CS 243: Software Development Tools

**Credits:**3.0

This course covers the basics of navigating, using, and setting up a Unix/Linux environment. This includes using a command line interface to connect to remote servers, managing files and processes, and user permissions. Students will also learn basic bash scripting, regular expressions, and the basic principles of version control. **Prerequisite(s):** Completion of CS 132 orCS 142 with a 2.5 or higher or instructor permission.

**Course Level Objectives**

- Demonstrate effective navigation and interaction with a file system using the command line.
- Write short scripts to move, alter or modify files.
- Write a regular expression to match a given pattern.
- Demonstrate using a version control system.

## CS 248: Full Stack Web Development

**Credits:**5.0

Foundations of web application programming for developing interactive web sites using client and server-side scripting. Explores frameworks and libraries, application design patterns, and persistent data storage and retrieval. Students will develop, test, and debug applications. **Prerequisite(s):** Completion of CS132 or CS 142 with a grade of 2.5 or higher orinstructor permission.

**Course Level Objectives**

- Compare and contrast client-server programming practices with programming practices employed in other applications.
- Explore application platforms, libraries, and APIs for use in web applications.
- Articulate the use of good design patterns and practices in the context of creating a web application.
- Implement a layout and general appearance for an application from a provided picture or description.
- Write code to generate a dynamic website using a web framework.
- Integrate a data store into a web application.
- Utilize troubleshooting and debugging appropriate to web application programming.

## CS 255: Special Topics in Computer Science

**Credits:**Maximum of 5.0 possible

Current topics of interest to students of computer science. Topics will change from offering to offering. **Prerequisite(s):** A minimum of four computing related courses or instructor permission.

**Course Level Objectives**

- Understand basic principles involved in the topic of consideration.
- Implement a small program or system that makes use of principles involved in the topic.

## CS 296: Computer Science Career Seminar

**Credits:**2.0

Includes review and reflection on the variety of computing careers, their associated skills, and professional responsibilities, mapping these to program requirements and ethical implications. Students create or refine a professional persona including resume and online portfolio, identify local professional networks and networking events, and investigate community based learning, internships, and mentorships. **Prerequisite(s):** Completion of CS 132or CS 142 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Assess various careers that a computer science degree can lead to and refine opportunities based on personal interest.
- Develop a professional online profile, resume, and portfolio.
- Participate in professional networking opportunities while employing professional communication skills.
- Find and evaluate internship and full time job opportunities.

## CS 299: Special Project: Computer Science

**Credits:**5.0

Special study to be arranged by student and supervising instructor. S/U grade option. Note: Credit available with approval. For more information contact the division secretary in Alderwood Hall 218A or phone 425.640.1679.

**Course Level Objectives**

- Successfully complete a project related to the specified topic.

## CS 301: Foundations of Computer Science

**Credits:**5.0

Work with other students to apply elementary data structures and algorithms to medium-scale applications. Exploration of the design, implementation, and evaluation of computer systems, including operating systems, networking, and distributed systems. **Prerequisite(s):** Completion of CS 133 or CS 143, and completion of CS 243 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Explain low level memory management techniques.
- Evaluate and justify algorithmic and code choices through the lens of optimizing memory management
- Demonstrate the principles of concurrency including synchronization and scheduling through code. Describe the protocol stack, why it is needed and its purpose.
- Explain the basic architecture of a network including the difference between client and server programming.
- Implement a solution that requires working with bits to detect and fix data errors.

## CS 302: Discrete Structures II

**Credits:**5.0

This course builds on CS 202 to introduce students to more ideas and techniques from discrete mathematics. These techniques form the basis of data structures and algorithms used in Computer Science. Students will learn the fundamentals of graph theory, set theory, relations, enumeration, and recursive structures. **Prerequisite(s):** Completion of CS 202 and CS 301 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Write proofs of multiple types such as, direct proof, proof by contradiction, proof by cases, and mathematical induction.
- Evaluate elementary mathematical arguments and identify incorrect reasoning (not just incorrect conclusions).
- Prove elementary properties of modular arithmetic and explain their applications in Computer Science such as in cryptography and hashing algorithms.
- Apply graph theory models of data structures and state machines to solve problems of connectivity and constraint satisfaction such as scheduling.
- Apply the method of invariants and well-founded ordering to prove correctness and termination of processes and state machines.
- Calculate numbers of possible outcomes of elementary combinatorial processes such as permutations and combinations.

## CS 320: Databases and Information Management Systems

**Credits:**5.0

Exploration and practice with relational and non-relational databases, including cloud databases. Students will learn practical techniques for designing solutions for managing persistent data. **Prerequisite(s):** Completion of CS 248 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Design a relational database using the concepts from relational database design theory and organization.
- Write concise and efficient queries.
- Describe the principle of transactions.
- Compare and contrast SQL, NoSQL, and NewSQL database design and development, including pros and cons of each.
- Evaluate database programming tools to manage large datasets (e.g., Pig, Hive).
- Compare and contrast techniques for storing persistent data, including cloud technologies and serverless programming.
- Troubleshoot and normalize data including adding appropriate rules to assure data integrity.
- Integrate a robust database into a software solution, such as a mobile app or website.

## CS 333: Data Structures and Algorithms I

**Credits:**5.0

Students will explore and implement several structures commonly used for data storage. They will analyze these structures and their associated algorithms in order to identify the right structure for a task based on time and space performance. **Prerequisite(s):** Completion of CS 202 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Apply the principles of algorithm complexity analysis, using common notation, to various data structures.
- Explain the advantages and disadvantages of array based and linked based structures.
- Explain the benefits of and implement various types of linear structures (linked lists, stacks, queues, priority queues, etc).
- Design and implement hash tables including collision handling strategies.
- Implement and compare multiple types of tree balancing techniques and identify where each technique is best used.
- Implement trees with different storage rules such as heaps and binary search trees, and the algorithms used with them.
- Evaluate, compare, and implement various sorting and searching algorithms for given real-world problems.

## CS 334: Data Structures and Algorithms II

**Credits:**5.0

Students continue the exploration of data structures and algorithms by investigating real-world applications of algorithms such as undirected graphs, directed graphs, minimum spanning trees, shortest paths, tries, regular expressions, reductions, and intractability. **Prerequisite(s):** Completion of CS 333 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Describe, implement and reason about the underlying data structures used for multiple types of graphs.
- Analyze graph properties and types to choose the optimal graph for solving a problem.
- Explain, implement, and compare fundamental algorithms for spanning trees, identifying shortest paths, and graph searching.
- Explain and analyze memory usage and caching with B-Trees.
- Evaluate algorithms that interact with memory including exploration of time locality, spatial locality, and cache efficiency.
- Analyze and apply commonly used algorithms such as check sum, TCP, and UDP, for applications in memory and data transfer.

## CS 350: Software Engineering

**Credits:**5.0

Fundamentals of software engineering best practices, both in theory and in practice. This includes analysis of system requirements, software design principles, patterns, evaluation of appropriate engineering compromises, and application of collaborative software development practices, and tools, such as version control. **Prerequisite(s):** Completion of CS 320 and CS 334 with a grade of 2.5 or higher orinstructor permission.

**Course Level Objectives**

- Compare, and contrast different software engineering lifecycle development models and choose an appropriate model for a given situation.
- Devise and present an appropriate testing approach for a given project, based upon the needs of the indicated project and development approach.
- Present an implementation or deployment approach for a project solution that meets the needs of the project.
- Provide an overview of ethical issues that the different software development tasks may involve.
- Explore and articulate design patterns such as SOLID, MVC, MVP, and REST.
- Write documentation (e.g., UML, JavaDoc) to discuss and communicate design decisions.
- Use version control and manage pull requests and conflicts.
- Demonstrate collaborative problem solving in a group.

## CS 370: Introduction to Computer Systems and Architecture

**Credits:**5.0

Examines key computational abstraction levels below modern high-level languages; number representation, assembly language, memory management, the operating-system process model, high-level machine architecture including the memory hierarchy, and how high-level languages are implemented. **Prerequisite(s):** Completion of CS 133 or CS 143, and completion of CS 243 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Describe the multi-step process by which a high-level program becomes a stream of instructions executed by a processor.
- Describe the basic organization of the memory hierarchy and the effect of its parameters on system performance.
- Trace the execution of assembly code, map the assembly to high-level language constructs, and write simple pieces of assembly programs.
- Write C code using pointers to create and manipulate complex data structures;
- Write (or rewrite) code to take advantage of the computer execution model to improve execution efficiency.
- Explain the role of an operating system.
- Identify the design priorities present in technical systems, both explicit and implicit, and how they relate to historical context.

## CS 395: Computer Science Seminar I

**Credits:**1.0

Presentation, review, and discussion of individual and team projects across cohorts. Practice code review, effective critique, and peer support. **Prerequisite(s):** Completion of CS& 131 or CS& 141 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Present a software development or computer science project to an audience of potential employers, academics, and peers.
- Complete code reviews and peer critiques.
- Communicate technical ideas through written, verbal, and graphical representation for a variety of audiences, technical and non-technical.
- Prepare and deliver responses to mock interview questions.
- Develop a growth mindset while receiving constructive feedback to improve interview skills.
- Develop conflict resolution skills to effectively work on teams and be prepared for difficult conversations with managers.
- Apply life-long learning strategies to respond to new technology and enhance technology skills.

## CS 396: Computer Science Seminar II

**Credits:**1.0

Presentation, review, and discussion of individual and team projects across cohorts. Practice code review, effective critique, and peer support. **Prerequisite(s):** Completion of CS 395 with a grade of 2.5 or higher.

**Course Level Objectives**

- Present a software development or computer science project to an audience of potential employers, academics, and peers.
- Complete code reviews and peer critiques.
- Communicate technical ideas through written, verbal, and graphical representation for a variety of audiences, technical and non-technical.
- Prepare and deliver responses to mock interview questions.
- Develop a growth mindset while receiving constructive feedback to improve interview skills.
- Develop conflict resolution skills to effectively work on teams and be prepared for difficult conversations with managers.
- Apply life-long learning strategies to respond to new technology and enhance technology skills.

## CS 397: Computer Science Seminar III

**Credits:**1.0

Presentation, review, and discussion of individual and team projects across cohorts. Practice code review, effective critique, and peer support. **Prerequisite(s):** Completion of CS 396 with a grade of 2.5 or higher.

**Course Level Objectives**

- Present a software development or computer science project to an audience of potential employers, academics, and peers.
- Complete code reviews and peer critiques.
- Communicate technical ideas through written, verbal, and graphical representation for a variety of audiences, technical and non-technical.
- Prepare and deliver responses to mock interview questions.
- Develop a growth mindset while receiving constructive feedback to improve interview skills.
- Develop conflict resolution skills to effectively work on teams and be prepared for difficult conversations with managers.
- Apply life-long learning strategies to respond to new technology and enhance technology skills.

## CS 398: Algorithmic Problem Solving

**Credits:**2.0

Applications of algorithms to solve problems. Includes dynamic programming. Prepares students for technical interviews. **Prerequisite(s):** Completion of CS 334 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Present an appropriate algorithm for solving a given problem in a mock interview and explain the rational for the choice.
- Describe an efficient solution using pseudocode and whiteboarding for a given programming problem in a mock interview,
- Recommend an alternate approach to a provided inefficient programming solution that is optimal based on algorithmic efficiency.
- Refactor code to enhance readability, reuse, and to increase efficiency.

## CS 402: Current Topics in Computer Science

**Credits:**5.0

Provides exposure to emerging technologies and topics of current interest in computer science. Varies each quarter depending upon the state of technology. Can be repeated for credit as long as the topic covered is significantly different. **Prerequisite(s):** Completion of CS 334 with a grade of 2.5 or higher, or instructor permission.

**Course Level Objectives**

- Develop a programming solution using a language, algorithm, or technology that has been created or gained a high amount of popularity in the last two years.
- Evaluate new techniques against the techniques they are replacing.
- Identify where new techniques are helpful and where old solutions are still better.

## CS 433: Programming Languages

**Credits:**5.0

Fundamental concepts of programming languages through the study of the underlying principles, including, but not limited to type checking, compiled versus interpreted languages, functional programming, objects, collections, and threads. Prepares students to identify and apply appropriate programming languages to computer science problems. Builds a foundation for quickly learning new and emerging programming languages. **Prerequisite(s):** Completion of CS 302 and CS 334 with a grade of 2.5 or higher, or instructor permission.

**Course Level Objectives**

- Compare and contrast different programming languages and how they might use different paradigms such as functional, object-oriented, and procedural approaches.
- Define what a language is and differentiate the syntax, semantics, and data types used by the language.
- Be able to describe the flow of control through a program, both in the primary program unit and any secondary program units involved in a program.
- Compose programs in a sampling of languages to demonstrate the commonality and differences between different programming language paradigms.
- Describe the type of language to use for a given scenario and justify why that language is appropriate.

## CS 442: Algorithm Design and Analysis

**Credits:**5.0

Principles of design of efficient algorithms: recursion, divide and conquer, balancing, dynamic programming, greedy method, and data structure selection. Correctness and analysis of algorithms. Examples drawn from problems in sorting, searching, set manipulation, pattern-matching, graphs, matrices, polynomials, and integers. **Prerequisite(s):** Completion of CS 302 and CS 334 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Translate word problems into computational problems.
- Determine an appropriate algorithm design paradigm for a new problem.
- Design an algorithm using a variety of algorithm-design paradigms (including greedy algorithms, divide and conquer, dynamic programming, flow modeling, and others).
- Prove an algorithm produces the correct answer.
- Reduce between a known problem and a new problem (for showing hardness or for reusing existing algorithms).
- Identify and cope with computational problems that are infeasible.
- Assess the implications of modeling decisions in the real world.

## CS 450: Security Foundations

**Credits:**5.0

Explore elements of security and common security threats. Topics include various types of cyber attacks and risks to a system as well as fundamentals for mitigating those risks at the software level. May also discuss common security issues due to integration with networking systems. **Prerequisite(s):** Completion of CS 302 and CS 334 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Identify and avoid social engineering (human level security).
- Explain and implement multiple types of authentication.
- Discuss security issues in relation to the cloud.
- Evaluate code for common software vulnerabilities such as buffer overflow, SQL injection, etc.

## CS 463: Artificial Intelligence

**Credits:**5.0

Principal ideas and developments in artificial intelligence and machine learning. Topics include problem solving and search, game playing, knowledge representation and reasoning, uncertainty, regression, classification, clustering, retrieval, recommended systems, and deep learning. **Prerequisite(s):** Completion of MATH& 146 and CS 334 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Compare artificial intelligence (AI) with human intelligence and traditional information processing and discuss its strengths and limitations as well as its application to complex and human-centered problems.
- Explain the core concepts and algorithms of advanced AI, such as dynamic Bayesian networks, inductive learning, statistical learning, reinforcement learning, deep learning, natural language processing, and robotics.
- Apply basic principles, models, and algorithms of AI to recognize, model, and solve problems.
- Analyze the structures and algorithms of a selection of techniques related to searching, reasoning, machine learning, and language processing.
- Design AI functions and components involved in intelligent systems such as computer games, expert systems, semantic web, information retrieval, machine translation, mobile robots, decision support systems, and intelligent tutoring systems.

## CS 470: Operating Systems

**Credits:**5.0

Principles of operating systems including process management, memory management, auxiliary storage management, and resource allocation. Includes some discussion of networking and distributed systems. **Prerequisite(s):** Completion of CS 302 and CS 334 with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Describe, contrast and compare the services provided by and the design of operating systems.
- Explain the structure and organization of the file system.
- Use system calls to manage processes, memory, and the file system.
- Contrast different approaches of memory management.
- Write code to implement additional operating system behavior.

## CS 485: Capstone Project I

**Credits:**5.0

Identify a project related to some aspect of computer science for research and implementation. Work with a mentor and stakeholders to complete all of the steps of the software design and development process in collaboration with other developers. **Prerequisite(s):** Completion of at least 10 CS credits at the 400 level with a grade of 2.5 or higher or instructor permission.

**Course Level Objectives**

- Collaborate with others on a shared codebase.
- Demonstrate the design and implementation process.
- Design a solution to a problem with external stakeholders in a collaborative environment.
- Contribute to a large codebase using industry standard tooling.
- Evaluate and select an appropriate communication strategy for communicating with technical and non-technical stakeholders.
- Write clear, organized documentation about a proposed project's scope, deliverables, and timelines.

## CS 486: Capstone Project II

**Credits:**5.0

Continued research and implementation toward capstone project milestones. This includes, regular reports on progress, documentation, and presenting results to appropriate internal and/or external audiences. **Prerequisite(s):** Completion of CS 485 with a grade of 2.5 or higher.

**Course Level Objectives**

- Collaborate with others on a shared codebase.
- Demonstrate the design and implementation process.
- Design a solution to a problem with external stakeholders in a collaborative environment.
- Contribute to a large codebase using industry standard tooling.
- Evaluate and select an appropriate communication strategy for communicating with technical and non-technical stakeholders.
- Write clear, organized documentation about a proposed project's scope, deliverables, and timelines.