CS - Computer Science

CS 104 - Introduction to Game Programming

This course provides hands-on experience developing computer games. The course covers the basic techniques of game programming, including graphics, events, controls, animations, and intelligent behaviors. Students learn the concepts and skills of object oriented programming by designing and implementing a sequence of computer games. No prior knowledge in programming and computer games if required. A good understanding of algebra and geometry is strongly recommended. Lecture/laboratory. 

Corequisite
MATH 141 or MATH 161

CS 105 - Digital Media Computing

Digital media processing forms a basic block in technologies underlying today's successful media, social and publishing companies. This course covers various techniques for the creation and manipulation of multimedia, including pictures, sounds, texts, and movies. Students learn the concepts and skills of object-oriented programming by designing and implementing a series of digital effects. No prior background or experience in programming is required. Lecture/laboratory.

Corequisite
MATH 141 or MATH 161

CS 110 - Introduction to Computer Programming

This course offers an introduction to computational thinking and programming, emphasizing problem-solving skills and foundational concepts in computer science. Students will learn to design, write, and debug programs using the Python programming language. Topics include fundamental programming concepts such as variables, data types, control structures, functions, loops, and basic data structures like lists and dictionaries. Social issues with data, such as privacy and ethics, will also be discussed. No prior programming experience is expected.

CS 120 - Computer Science I

This course builds on foundational programming knowledge and introduces students to the principles and practices of object-oriented programming in Java. Through hands-on projects and practical exercises, students will also explore topics like recursion, exception handling, and data structures in the Java Collections Framework.

Prerequisite
CS 110
Corequisite
MATH 141 or MATH 161

CS 150 - Data Structures and Algorithms

This course continues the development of object oriented approaches to the design and implementation of software systems. Students will learn to analyze problems, algorithms and develop object-oriented solutions to problems. Students will also learn to use multiple data structures and the accompanying algorithms to store, index and retrieve data.

Prerequisite
CS 104 or CS 105 or CS 120

CS 200 - Computers and Society

This course examines the intersection of computers and society through political, legal, ethical, psychological, and philosophical lenses. Students will cultivate their critical thinking and communication skills in a collaborative environment. The course provides deep insights into the societal implications of computing, recognizing its significance in our evolving technological landscape. Topics include legal and ethical frameworks, the history of computing, cybersecurity and privacy, freedom of speech, algorithmic influence on society, and professional ethics.

CS 202 - Analysis of Algorithms

The design and analysis of algorithms and their complexity. This course studies techniques for measuring algorithm complexity, fundamental algorithms and data structures, intractable problems, and algorithm-design techniques.

Prerequisite
CS 150 and MATH 182

CS 203 - Computer Organization

This course provides a software-centric understanding of modern computer architecture and organization to develop students' intuitions of secure computing, code parallelism, code performance, compiler functionality, computer network organization and Instruction Set Architectures (ISAs), in physical and virtual computing machines. Topics include: C systems programming, the process memory image, memory data layout, memory-pyramid, building exploit-resistant code, cache performance approaches, IP network organization, threading/parallel programming, traditional compute processor organization, digital logic, and ISA design.


Prerequisite
CS 150

CS 205 - Software Engineering

The course covers analysis, design, and implementation strategies for large-scale software projects. Work is group-intensive. In large groups, students design and implement a comprehensive semester-long project, progressing from an informal concept to a functional deliverable. Concurrently, the large group experience is supported by a small group lab sequence introducing core software engineering tools. Essential to the completion of the project are topics including information management, high-level networking, distributed client-server development, and secure computing practices. (Lecture/Lab)

Prerequisite
CS 150

CS 301 - Principles of Programming Languages

An introduction to the theory of the design and implementation of contemporary programming languages. Topics include the study of programming language syntax and semantics, translators, and imperative, functional, logic and object-oriented language paradigms.

Prerequisite
CS 202, CS 203

CS 303 - Theory of Computation

An introduction to the theoretical foundations of computer science and formal models of computation. Topics will include formal languages, finite automata, computability, and undecidability.

Prerequisite
CS 202

CS 320 - Database Management Systems

This course examines the organization, design, and implementation of database management systems.

Prerequisite
CS 205
Corequisite
CS 202

CS 390-394 - Independent Study and Research

Independent study projects for juniors and seniors. Hours arranged. Permission of department head required. Applicability of Independent Study/Research as a 300-level CS major elective is only by approval of the department.

CS 406 - Operating Systems

An in-depth study of operating systems, covering: process and memory virtualization; data persistence using file systems; concurrency through threading, interprocess communication, and distributed programming. The coursework focuses on simulations and a continuing group project to provide mechanisms for specific topical understanding and the creation of simplified system software like: system-shells, web-servers and database-servers.

Prerequisite
CS 203 or ECE 313
Corequisite
CS 205

CS 410-415 - Special Topics

This course considers recent advances and/or subjects of current interest in computer science.

Prerequisite
Prerequisites vary according to the topic.

CS 420 - Artificial Intelligence

An introduction to the study of intelligence as computation. Topics include problem-solving techniques, heuristic searches and knowledge representation.

Prerequisite
CS 202

CS 424 - Introduction to Machine Learning

This course is an introduction to the theoretical and practical aspects of the design and implementation of Machine Learning (ML) algorithms. It will provide students with an in-depth introduction to the areas of Supervised ML algorithms. The course will cover core ML algorithms for classification and regression, such as Linear and Logistic Regression, Neural Network and Deep Learning.

Prerequisite
CS 202
Corequisite
MATH 272 or MATH 300

CS 425 - Human-Computer Interaction

This course covers topics in Human-Computer Interaction (HCI), including identifying users’ needs, rapid prototyping, visual design, and the evaluation of existing systems. Students learn principles and methods that will help them recognize and create usable interfaces. Students apply these methods to evaluate real-world systems, measuring how they impact productivity, and more broadly experience.

Prerequisite
CS 205 or permission of the instructor

CS 470 - Senior Project

In this course, students work in teams on the analysis, design, and implementation of a large-scale software project.

Prerequisite
Senior standing and CS 205

CS 495-496 - Thesis

A two-semester, independent research project on a topic selected by the student and approved by the department. A student must undertake such a program for two semesters to graduate with honors.