Course Descriptions

Computer Science Courses

CSCI 107: Introduction to Web Programming

A broad introduction to World Wide Web programming and related technologies. Topics include Internet history and its architecture, managing an account on a Web server, HTML markup, use of style sheets (CSS), page layout design, introduction to interactive programming with JavaScript, the document object model (DOM), and HTML forms. This is a general audience course suitable for those with no prior programming experience. (This course satisfies Quantitative Reasoning and Technology Intensive.)


CSCI 112: Computer Science I

Introduction to computer science. Topics include the basic building blocks of problem solving (sequence, selection, repetition), object-oriented programming, basic data structures and algorithms. A prior knowledge of computer science is not required, although a good background in high school Mathematics is recommended. Students may receive credit for this course based on the AP computer science exam. (This course satisfies Quantitative Reasoning and Technology Intensive.)


CSCI 212: Computer Science II

Continuation of Computer Science I. Emphasis on advanced data structures, algorithms, and object-oriented design. Topics include linked data structures, recursion, algorithm analysis, interfaces, and inheritance. Prerequisite: Computer Science 112 with a grade of C or better. (This course satisfies Quantitative Reasoning and Technology Intensive.)


CSCI 213: Intro to Computer Architecture

Computer architecture, including digital logic, modern CPU design, memory layout, assembly language programming, addressing techniques, input/output design, and interfacing with high-level languages. Prerequisite: Computer Science 112. (This course satisfies Quantitative Reasoning and Technology Intensive.)


CSCI 214: Principles of Digital Logic

Basic logic, digital electronics, microcomputer architecture, and interfacing, with hands-on laboratory activity. Prerequisite: Computer Science 213. (This course satisfies Quantitative Reasoning.)


CSCI 231: Linear Algebra

This course is designed to provide students with knowledge of linear algebra concepts while emphasizing the practical implementation of these concepts through programming. Topics include matrices, determinants, eigenvalues, eigenvectors, vector spaces, linear independence, applications to linear systems, and data analysis. Prerequisite: CS 112 and MATH 230 or permission of the instructor. (This course satisfies Quantitative Reasoning.)
cross listed: MATH 231


CSCI 240: Intro to Computational Math

(Introduction to Computational Mathematics.) This course provides a survey of computational techniques and methods that are rooted in mathematics and computing. Topics covered include numerical differentiation and integration, numerical solutions to ordinary differential equations, non-linear equations in one variable, and classification methods. Applications of the techniques to "real-life" problems encountered in economics, physics, and/or the life sciences is emphasized. Constructing computer programs to implement the techniques presented also is emphasized. Prerequisites: MATH 110 and CSCI 112.
cross listed: MATH 240


CSCI 250: Programming for Data Applications

Introduction to data-oriented Python packages, decision trees, support vector machines (SVM), neural networks, and machine learning. Prerequisite: CSCI 112: Computer Science I.


CSCI 270: Web Development

This course builds upon Web programming fundamentals. It includes a review of HTML and CSS fundamentals and detailed coverage of CSS topics including selectors, cascade, positioning, page layout techniques, CSS media queries, and responsive/mobile design techniques. The course provides an introduction to server-side scripting and server side includes, advanced CSS/JavaScript frameworks, responsive grid design, and user interface tools. Prerequisites: CSCI 107 and Art 142. (This course satisfies Quantitative Reasoning and Technology Intensive.)


CSCI 317: Data Structures and Algorithms

The study of advanced data structures and algorithm analysis. Topics include trees, hash tables, heaps, sorting algorithms, and graph algorithms. The emphasis will be on applying data structures to design and implement efficient algorithms. Additional topics may include dynamic programming and computational complexity. Prerequisite: Mathematics 230 and Computer Science 212 with a grade of C or better.


CSCI 318: Programming Languages

A study of different problem solving paradigms, and representative programming languages. Topics include imperative vs. functional vs. event-driven vs. declarative paradigms, markup vs. computation, typing, memory organization, scope, and lifetime management. Lab exercises focus on working in the various paradigms, and the trade-offs involved. Prerequisite: Computer Science 212.


CSCI 323: Cryptography

An introduction to cryptology and cryptanalysis, the making of codes and the breaking of codes. History and basic concepts. Classical ciphers and attacks on classical ciphers. One-time Pad. Modern ciphers including DES, AES. Public key ciphers including RSA and Diffie-Hellman. Digital signatures. Additional topics may include Elliptic Curve systems, knapsack systems, and other cryptographic systems. Prerequisites: Mathematics 230 and Computer Science 212, or permission of the instructor.
cross listed: MATH 323


CSCI 325: Artificial Intelligence

This course is an introduction to AI via various techniques and theory including, but not limited to, state space search strategies; deterministic and nondeterministic finite automata and Turing machines; neural networks and deep learning; natural language processing (NLP); computer vision; reinforcement learning; and large language models (LLMs). Prerequisite: Computer Science 212.
cross listed: NEUR 325


CSCI 327: Introduction to Database Systems

An in-depth study of proper methods of design for database systems, with an emphasis on the relational model. Topics include relational design, query languages, and transactional processing. Lab exercises focus on GUI-driven, SQL-based access as well as modern, multi-tier styles of design. Prerequisite: Computer Science 212.


CSCI 334: Theory of Computation

This course covers fundamental ideas in the theory of computation, including formal languages, computability, complexity, and reducibility among computational problems. Topics include formal languages, finite state automata, Kleene's theorem, formal grammars, pushdown automata, context-free languages, Turing machines, computability, Church's Thesis, decidability, unsolvability, and NP- completeness. Prerequisites: CSCI 212 and Mathematics 230.
cross listed: MATH 334


CSCI 336: Operating Systems

An introduction to modern operating systems and their most important features. Topics include multiprocessing, virtual memory, multithreading, concurrency, I/O, networking, security, and distributed computing. Students construct a major component of an operating system in C or C++. Prerequisites: Computer Science 317.


CSCI 360: Mathematical Modeling

Introduction to the process and techniques of modeling physical problems, including computing strategies and analysis of results. Python programming will be emphasized. Numerical methods covered include solutions to linear and non-linear equations, solutions to ordinary and partial differential equations, finite elements, linear programming, and optimization algorithms. Prerequistes: MATH 210 and CSCI 112.
cross listed: MATH 360


CSCI 375: Combinatorics & Graph Theory

Enumeration techniques with emphasis on permutations and combinations, generating functions, recurrence relations, inclusion and exclusion, and the pigeonhole principle. Graph theory with emphasis on trees, circuits, cut sets, planar graphs, chromatic numbers, and transportation networks. Additional topics from designs with emphasis on Latin squares, finite projective and affine geometries, block designs, and design of experiments. Prerequisite: Mathematics 230.
cross listed: MATH 375


CSCI 417: Algorithms and Algorithm Analysis

The study of algorithms and their mathematical analysis. Divide-and-conquer, greedy, brute-force, dynamic programming, backtracking, advanced tree and graph algorithms, big-O notation, case and amortized analysis. Prerequisites: Mathematics 230 and Computer Science 317.


CSCI 450: Computer Vision & Machine Learning

This course introduces the fields of Computer Vision and Machine Learning. Computer Vision concepts covered include histrogram normalization, color transformation and filtering, and extraction techniques such as HOG, LBP and SIFT. Machine Learning concepts such as clustering and deep neural networks are also introduced. Prerequisite: CSCI 212 and CSCI 250. (This course satisfies Senior Studies and Technology Intensive.)


CSCI 461: Compiler Design

An introduction to the design and construction of compilers for modern programming languages. Topics include grammars, formal language definition, abstract syntax trees, symbol tables, syntax and semantic checking, code generation, and optimization. Students construct a modern compiler for an object-oriented programming language. Prerequisites: Mathematics 230 and Computer Science 317. (This course satisfies Senior Studies.)


CSCI 488: Software Engineering for Web Apps

(Software Engineering for Web Applications.) A project-oriented course in Software Engineering for Database-Driven Web Applications. Topics include JavaScript, DHTML, JQuery, AJAX, PHP, MySQL, CRUD operations, ORM/AR Techniques, Application Design, Unit Testing, Web Sockets, and the GIT protocol. Prerequisites: Computer Science 317 and 327.


CSCI 489: Advanced Topics in Computer Science

Special topics and projects in computer science, including but not limited to distributed systems, secure computing, Web development, user-interface design, and software engineering. Prerequisites: Computer Science 317.