Subject Description
Computer Science

CSCI 330 | Algorithms and Advanced Data Structures

This course is an introduction to the design and analysis of algorithms. Students study algorithmic design techniques including greedy algorithms, divide-and-conquer, dynamic programming, and backtracking. This course also provides an introduction to advanced data structures such as Red-Black trees, AVL trees, 2-3 trees, and graphs. Students will also be exposed to notions of computability and NP-completeness.

CSCI 335 | Optimization

This course is about how to find the best - or at least good - solutions to large problems frequently arising in business, industrial, or scientific settings. Students learn how to model these problems mathematically, algorithms for finding solutions to them, and the theory behind why the algorithms work. Topics include the simplex method, duality theory, sensitivity analysis, and network models. The focus is on linear models and models with combinatorial structure, but some nonlinear models are considered as well. Optimization software is used frequently.

CSCI 252 | Network Programming

Computer networks have become a fundamental part of our everyday lives, used for everything from social networking to research and commerce. This course introduces the concepts behind modern computer networks and their implementation. It covers the software and hardware architecture of the internet, networking protocols like TCP and IP, how services like Email and the Web work, approaches for reliable and secure communication, and the details of both wired and wireless transmission. Programming exercises reinforce key concepts from the course.

CSCI 340 | Computer Graphics

This course is an introduction to the process of generating images with a computer. The emphasis is on the design and use of graphical facilities for three-dimensional graphics. Students study the mathematical theory underlying computer generated graphics, and will implement programs utilizing these techniques. The mathematical topics covered include affine transformations, perspective, texture, light, and shadow. The core pieces of the graphics pipeline used in current graphics hardware are studied.

CSCI 280 | Problem Seminar

Consideration of a diverse range of problems in computer science from problems in the design of correct and efficient algorithms and the implementation of data structures through problems in the theory of computation. The primary focus is on solving problems quickly and correctly, as for programming competitions or interviews.

CSCI 215 | Programming Language Paradigms

Declarative programming languages are an important alternative to languages (such as C, C++, and Java) that use the more familiar imperative programming paradigm. This course introduces the functional and logic programming paradigms in depth through assignments in the programming languages Haskell and Prolog. These languages are based on models of computation that are fundamentally different from the von Neumann model underlying imperative programming languages, and exposure to these new paradigms provides valuable perspective on programming and problem solving in general.

CSCI 261 | Computer Science II

This course is a continuation of CSCI 161. It provides an introduction to the study of fundamental data structures and their associated algorithms. Students learn how to choose appropriate data structures and algorithms for particular problems. They learn about lists, stacks, queues, trees, sorting, searching, abstract data types, and object-oriented programming using an object-oriented programming language. A weekly laboratory is required.

CSCI 220 | Software Engineering

Students study the design and implementation of large-scale, real-world software systems. Topics include software engineering tools, practices, and methodologies. Students will also learn about non-technical aspects of software engineering including intellectual property, professionalism, and team communication. A weekly laboratory is required.