**Lower Level**

**CSC 100 Computer Science 0: Foundations (4)** An introduction to algorithmic thinking and problem-solving using computers. Topics include functions, composition, recursion, states, mutability, and programming applications using a functional language such as Racket or Scheme. Satisfies the core laboratory or general science division core requirement. Prerequisite: MTH 111.

** CSC 101 Computer Science 1: Principles (4)** A first course in programming using JAVA or C++. Topics include object-oriented analysis and design (abstraction, encapsulation, inheritance, and polymorphism), recursion, iterative algorithms, and formal methods. Satisfies the core laboratory or general science division core requirement. Prerequisite: CSC 100.

**CSC 202 Computer Science 2: Data Structures (4)** A second course in programming using JAVA or C++. Topics include the properties and implementation of various Data Structures (Lists, Stacks, Queues, Sets, Maps, Trees, Graphs), algorithms analysis and reasoning using invariants and assertions. Prerequisite: CSC 101.

**CSC 203 Computer Science 3: Algorithms (4)** Design and analysis of algorithms. Topics include techniques (e.g. greedy algorithms, dynamic programming), applications (e.g. graphs, sorting, searching), and underlying data structures. Prerequisites: CSC 202 and MTH 322.

**CSC 210 Computer Architecture (4)** A project-based course on the design of modern computing systems from logical gates to user-level applications. Topics include combinational and sequential logic, Hardware Description Languages, computer architecture, assembly language, virtual machines, high level languages, virtual machines, compilers, operating systems and applications. Prerequisite CSC 202

**Upper Level**

**CSC 311 Operating System: Design and Implementation (4)** A course on modern operating system design where students explore a Unix-like OS through in-depth projects written in C. Topics include virtualization of CPU and memory resources, concurrency, files, file systems, networking, systems programming and security. Prerequisite CSC 210.

**CSC 312 Database Systems and Theory (3)** A first semester course on the theory, design and application of database systems with projects written in SQL and C++. Topics include the Relational Model, SQL, Entity-Relationship Model, database internals and design (including indexing and hashing, physical storage and file structure and Query Processing), application design, big data storage systems (noSQL) and data analytics. Prerequisites CS 103 and CSC 311.

**CSC 313 Systems and Software Security (3)** This course covers the security aspects of computing systems and software through the perspective of an attacker. Through readings and hands on labs students will study security policy and its relationship between system components, systems programming, debugging and reverse engineering, techniques for analyzing insecure software and crafting attack mechanism as well as a practical exploration of contemporary cybersecurity tools. Prerequisite CSC 210. CSC 315

**Cloud Computing and Development Operations (3)** A course on cloud infrastructure (the virtualization of compute, network, and storage resources) and its deployment as an extension of software development. Prerequisite CS 210. CSC 320 Automata (3) (W) An introduction to automata, computability, and complexity. Prerequisites: MTH 301 and CSC 203.

**CSC 321 Programming Language Theory (3)** An analytic study of programming languages through the design of a programming language and its interpreter in Racket or Scheme. Topics include substitutions and functions, lazy evaluation, recursion, state, continuations, semantics, types, type-systems and a survey of contemporary languages. Prerequisite CSC 203.

**CSC 330 Junior Software Engineering Seminar (2) (W) (O)** Individual capstone experience for juniors majoring in computer science, covering software engineering topics not covered in other courses, varying from year to year. Prerequisites: CSC 203 and CSC 210.

**CSC 399 Topics in Computer Science (1-3)** A course designed to address the topics of special interest to the faculty. Map be repeated for credit as topics vary. Prerequisite MTH 322 or instructor permission.

**CSC 414 Networking and Network Security (3)** A course on the functions of a networking system through the lens of an attacker. Through hands on labs students will develop knowledge of the layers of the TCP/IP and OSI Model, network design, network application programming, the tools for investigating and exploiting weakness in the network stack. Prerequisite CSC 210.

**CSC 422 Parallel Computing (3)** A study of the theory and application of parallel programming with projects written in C++. Topics include theory of scalability, parallel computer architectures, concurrency mechanism, patterns of parallel computing, identifying parallelism in applications and parallel programming models. Prerequisites CSC 210 and MTH 221.

**CSC 431 Senior Software Architecture Seminar (1) (W)** Group capstone experience for seniors majoring in computer science, covering software architecture topics not covered in other courses, varying from year to year. Prerequisite CSC 330.