Computer Science


CS 128: Programming & Problem Solving

Credits 4

This course provides an introduction to foundational computer science concepts centered on analytical thinking, programming, and problem-solving skills. Through a rigorous approach to dissecting and systematically solving challenges, students develop core algorithmic techniques for addressing real-world issues. The course focuses on fostering an understanding of computational solutions while strengthening critical thinking, logic, and creativity.

CS 130: Symbolic Logic

Credits 3
The study of formal, deductive logic emphasizing the methods for demonstrating the validity of arguments. Includes truth functional propositional logic and quantification theory through the logic of relations.

CS 256: Data Structures

Credits 4
A systematic introduction to the methodology of problem solving with computers. Emphasizes the design and development process, data abstraction and fundamental data structures, programming for reuse and the development of large programs. Introduces the basic notions of software engineering and analysis of algorithms. Discusses ethical issues in computing.

CS 266: Computing Skills

Credits 1
This module-based course provides students with practice using the computing tool chains and technical skills they will need to use throughout their courses and careers. These tools will generally apply to their chosen track and may include the Linux command line, version control systems, individual programming languages, regular expressions, security best practices or other tools.

CS 275: Computing for Social Good

Credits 3

This course critically examines some important “for social good” problems that computer science and technology can help address. Students will study topics such as ethical community engagement, engineering for social justice, ways to advocate for social change, and models to implement “for social good” projects. This course does not involve computer programming and is open to any student interested in social justice, community engagement, ethical application of technology, and similar social issues.

CS 281: Applied Groups

Limited to members of the Computer Science Applied Groups. Working under the direction of a faculty or staff member, groups of CS students provide infrastructure support for the CS Department and the College. Current groups include: CS System Administrators, Hardware Interfacing Project, Helping Others Program, CS for Social Good, and Web Development. No more than three credits total in an academic career.

CS 310: Algorithms

Credits 3
A study of algorithms and the data structures on which they are based, with a focus on the analysis of their correctness and complexity in terms of running time and space.

CS 320: Principles of Computer Organization

Credits 3
An introduction to the structure and function of computing machines. The concept that computing machines consist of layers of virtual machines is an organizing principle. Topics include information representation, automata, assembly language programming, register machines, microprogramming, conventional machines and language processors.

CS 325: Systems Engineering & Administration

Credits 3

This course is an introduction to the engineering and administration or computing systems and the associated storage and networking systems required to support users of modern science and commerce platforms. The course material is built around a sequence of hands-on labs which cover topics from the design of computing systems and facilities through the full provisioning of a machine which supports end users. Additional topics include the ethics of system administration, data privacy and protection.

CS 330: Computational Science

Credits 3

An introduction to Functional Programming, one of the three major programming paradigms. Focuses on well-structured interactive program development using a modern functional programming language. Introduces the formal study of data types and the meaning of programs.

CS 335: Advanced Data Structures

Credits 3

Data structures are a central topic in computer science. Building on the material developed in CS 256 Data Structures, this course covers more advanced approaches to organizing data on network, tree and string based structures. Problems are chosen from data-intensive domains, motivating students to solve complex problems by using efficient data structures.

CS 340: Robotic Animals

Credits 4
Introduces computer science tools and techniques that support computational science and high performance computing. Computational methods are an integral part of modern science, including multidisciplinary research into climate change, the origins of the universe and the underlying cause of diseases such as Alzheimer's. Topics include scientific libraries and kernels, parallel distributed and grid resources, and the principle software patterns found in this domain.

CS 345: Software Engineering

Credits 3

The theory, techniques and technologies associated with the deconstruction, and testing of software systems, particularly large software systems. Students learn various approaches to procedural decomposition and system architecture and build multiple large collaborative software projects. Explores the tools used for building and testing software systems, particularly in the context of open source software.

CS 350: Electronics & Instrumentation

Credits 3

A laboratory-oriented course dealing with analog and digital circuits. Circuit theory is developed for diodes, transistors, operational amplifiers and simple digital circuits. Components are used to construct a range of devices, including power supplies, oscillators and amplifiers. Check the Physics cross-listing for this course.

CS 355: Computer Game Design

Credits 3

This course covers a variety of software engineering and user experience topics through the lens of game design. Students construct several games over the course of the term, first individually and then collaboratively, putting theory into practice.

CS 360: Parallel & Distributed Computation

Credits 3

This course covers the development and application of parallel programming and problem-solving techniques to solve computationally intensive problems in a variety of disciplines. Parallel computation invites new ways of thinking about problems and is an important skill in corporate and research environments. Students learn about programming paradigms used in parallel computation, the organization of parallel systems, and the application of programs and systems to solving problems in biology, physics, geography, and other disciplines.

CS 365: Artificial Intelligence and Machine Learning

Credits 3

This course offers an introduction to topics in Artificial Intelligence and Machine Learning and covers their theoretical underpinnings while providing opportunities to put various techniques into practice. Topics covered may include search, planning, game-playing neutral networks and other machine learning approaches.

CS 370: Computer Graphics

Credits 3
An introduction to computer graphics with an emphasis on Open-GL and the mathematical foundations of modeling and rendering. Experientially oriented with frequent small projects. Requires good coding skills in C++ or, with considerably more work, C. Mathematical aspects based in Linear Algebra.

CS 375: Cyberethics in the Current Age

Credits 3
In this course, students will grapple with ethical issues related to technology. We will examine who benefits and who is harmed by technologies - especially insofar as these technologies might amplify existing marginalities and privileges. We also will consider unintended consequences of technologies and develop various lenses to examine technologies for their social, ethical, and social justice consequences.

CS 380: Theory of Computation

Credits 3
A study of computability and non-computability from a perspective that views the problems to be solved as formal languages. Study of automata-theoretic (finite state automata, pushdown automata and Turing machines) and generative (regular languages, regular, context-free and unrestricted phrase structure grammars) mechanisms along with the properties of the classes of languages they can define.

CS 383: Bioinformatics

Credits 4
Bioinformatics is the application of statistics and computer science to the field of biology. This course is a wide ranging introduction to the field, the tools, and the techniques used to work with large datasets, and will principally concentrate on the analysis and visualization of novel genomic and metagenomic data. The course is centered around doing research and using tools, with much of the course time dedicated to active learning.

CS 388: Methods For Research and Dissemination in Computer Science

Credits 3

This course provides an introduction to the process of proposal writing. In the course, students focus primarily on the learning of how to select an advanced topic, write an annotated bibliography, review related literature, and finally write a proposal. 

CS 410: Networks & Networking

Credits 3
A study of the hardware and software technology and standards which support local area networks, wide area networks and the Internet. Emphasizes the TCP/IP protocol suits and the associated tools that provide universal connectivity to a wide variety of systems around the world. Explores the network hierarchy, from the physical level (transmission media) up through client/server applications such has HTTP servers and the domain name system.

CS 420: Operating Systems

Credits 3
A study of the software that manages the hardware and provides the interface between application programs and system resources. Topics include scheduling, memory management, persistent storage, resource contention, locking and multi-processor synchronization. Using open source software, students explore a production quality operating system and learn by modifying it.

CS 430: Database Systems

Credits 3
An introduction to database management systems. Database design and development are viewed from the perspective of a user, an application program and the database kernel itself. Focuses primarily on relational and object-oriented data models and related software.

CS 440: Programming Languages

Credits 3
The nature of programming languages and the programs that implement them. Focuses on the abstract structures programming languages provide for expressing algorithms and the methods by which they are realized on concrete hardware.

CS 455: Computer Game Design Studio

Credits 1
This studio course allows students to take skills they have developed in other courses and apply them to a term-long project in which they will undertake all aspects of the game design process in greater depth.

CS 474: Programming Music for Computer

Credits 3
This course is centered around the study of the programming language "Max/MSP," which remains the central approach to creating interactive computer music systems in academic settings around the world.

CS 481: Internship (requires departmental approval)

Credits 0 3

An internship or practicum organized by the student in consultation with the adviser. Credits for the experience must be negotiated between the adviser and the on-site supervisor. The experience involves one of the following: (a) teaching or tutoring a second language, (b) a special research project or (c) interpreting / translation. Depending on the experience, students enhance their communicative skills, develop a critical understanding of linguistic and cultural differences, connect to other disciplines through languages, come to a deeper understanding of the role of translation in cross-cultural communication, and/or reflect on career and life goals.

CS 485: Independent Study

Credits 1 3

Investigation of a specific topic conceived and planned by the student in consultation with a faculty supervisor. Culminates in a comprehensive report prepared in the style of a thesis or research paper.

CS 488: Senior Seminar

Credits 3

Each participant completes a semester-long capstone project in a research group setting. Weekly meetings are scheduled with the instructor individually and with the group as a whole. In addition, explores topics from the cultural, ethical, historical or broader scientific context of computer science in readings and discussion. Culminates in a public seminar and student presentation.