Courses
Courses offered in the past four years.
▲ indicates offered in the current term
▹ indicates offered in the upcoming term[s]
CSCI 0101 - The Computing Age ▲ ▹
The Computing Age
In this course we will provide a broad introductory overview of the discipline of computer science, with no prerequisites or assumed prior knowledge of computers or programming. A significant component of the course is an introduction to algorithmic concepts and to programming using Python; programming assignments will explore algorithmic strategies such as selection, iteration, divide-and-conquer, and recursion, as well as introducing the Python programming language. Additional topics will include: the structure and organization of computers, the Internet and World Wide Web, abstraction as a means of managing complexity, social and ethical computing issues, and the question "What is computation?" 3 hr. lect./lab
Spring 2009, Fall 2009, Spring 2010, Fall 2010, Spring 2011, Fall 2011, Spring 2012, Fall 2012, Spring 2013, Fall 2013, Spring 2014
CSCI 0102 - Math Foundations of Computing
Mathematical Foundations of Computing
An introduction to the mathematical foundations of computer science, with an emphasis on formal reasoning. Topics include propositional and predicate logic, sets, functions, and relations; basic number theory; mathematical induction and other proof methods; combinatorics, probability, and recurrence relations; graph theory; and models of computation. (CSCI 0101 previously or concurrently) 3 hrs. lect./disc.
Spring 2009, Spring 2010
CSCI 0150 - Computing for the Sciences ▲ ▹
Computing for the Sciences
In this course we will provide an introduction to the field of computer science geared towards students interested in mathematics and the natural sciences. We will study problem-solving approaches and computational techniques utilized in a variety of domains including biology, chemistry, physics, and engineering. Students will learn how to program in Python and other languages, how to extract information from large data sets, and how to utilize a common technique employed in scientific computation. The course has no prerequisites and assumes no prior experience with programming or computer science. 3 hrs. lect./lab
Fall 2011, Fall 2012, Fall 2013, Spring 2014
CSCI 0190 - Computer Models & Simulation ▲
Computer Models and Multi-Agent Simulation
In this course we will explore agent-based computer models and simulations as a means of studying phenomena from both biological and social sciences. Agent-based simulation will then be used as a basis for introducing individual-based modeling and complex adaptive systems. A significant amount of time will be spent teaching the NetLogo programming language as a software tool for developing simulations. We will also introduce some of the important topics in the discipline of computer science, including algorithmic reasoning and data abstraction. No prior experience in programming is assumed. This course counts as an environmental studies lab science cognate. 3 hrs. lect./lab
Fall 2009, Spring 2011, Spring 2013, Fall 2013
CSCI 0200 - Math Foundations of Computing ▹
Mathematical Foundations of Computing
In this course we will provide an introduction to the mathematical foundations of computer science, with an emphasis on formal reasoning. Topics will include propositional and predicate logic, sets, functions, and relations; basic number theory; mathematical induction and other proof methods; combinatorics, probability, and recurrence relations; graph theory; and models of computation. (One CSCI course at the 0100-level previously or concurrently; formerly CSCI 0102) 3 hrs. lect./lab
Spring 2012, Spring 2013, Spring 2014
CSCI 0201 - Data Structures ▲ ▹
Data Structures
In this course we will study the ideas and structures helpful in designing algorithms and writing programs for solving large, complex problems. The Java programming language and object-oriented paradigm are introduced in the context of important abstract data types (ADTs) such as stacks, queues, trees, and graphs. We will study efficient implementations of these ADTs, and learn classic algorithms to manipulate these structures for tasks such as sorting and searching. Prior programming experience is expected, but prior familiarity with the Java programming language is not assumed. (One CSCI course at the 0100-level) 3 hrs. lect./lab
Spring 2009, Fall 2009, Spring 2010, Fall 2010, Spring 2011, Fall 2011, Spring 2012, Fall 2012, Spring 2013, Fall 2013, Spring 2014
CSCI 0202 - Computer Architecture ▲
Computer Architecture
A detailed study of the hardware and software that make up a computer system. Topics include assembly language programming, digital logic design, microarchitecture, pipelines, caches, and RISC vs. CISC. The goal of the course is teach students how computers are built, how they work at the lowest level, and how this knowledge can be used to write better programs. (CSCI 0201 previously or concurrently) 3 hrs. lect./lab
Fall 2009, Fall 2010, Fall 2011, Fall 2012, Fall 2013
CSCI 0301 - Theory of Computation ▲
Theory of Computation
This course explores the nature of computation and what it means to compute. We study important models of computation (finite automata, push-down automata, and Turing machines) and investigate their fundamental computational power. We examine various problems and try to determine the computational power needed to solve them. Topics include deterministic versus non-deterministic computation, and a theoretical basis for the study of NP-completeness. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.
Fall 2009, Fall 2010, Fall 2011, Fall 2012, Fall 2013
CSCI 0302 - Algorithms and Complexity ▹
Algorithms and Complexity
This course focuses on the development of correct and efficient algorithmic solutions to computational problems, and on the underlying data structures to support these algorithms. Topics include computational complexity, analysis of algorithms, proof of algorithm correctness, advanced data structures such as balanced search trees, and also important algorithmic techniques including greedy and dynamic programming. The course complements the treatment of NP-completeness in CSCI 0301. (CSCI 0200 and CSCI 0201) 3 hrs. lect./disc.
Spring 2009, Spring 2010, Spring 2011, Spring 2012, Spring 2013, Spring 2014
CSCI 0311 - Artificial Intelligence
Artificial Intelligence
Artificial Intelligence (AI) is the study of computational systems that exhibit rational behavior. Applications include strategic game playing, medical diagnosis, speech and handwriting recognition, Internet search, and robotics. Course topics include intelligent agent architectures, search, knowledge representation, logical reasoning, planning, reasoning under uncertainty, machine learning, and perception and action. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab
Fall 2009, Spring 2013
CSCI 0312 - Software Development ▹
Software Development
This course examines the process of developing larger-scale software systems. Laboratory assignments emphasize sound programming practices, tools that facilitate the development process, and teamwork. (CSCI 0200 previously or concurrently, and CSCI 0201) 3 hrs. lect./lab
Spring 2010, Spring 2012, Spring 2014
CSCI 0313 - Programming Languages
Programming Languages
A systematic approach to concepts and features of programming languages. The course focuses on four major programming paradigms: procedural, object-oriented, functional, and logic programming languages. Students will program in several languages representing the different paradigms. Topics include grammars, data types, control structures, run-time organization, procedure activation, parameter passing, higher-order functions, lambda expressions, and unification. (CSCI 0200 and CSCI 0202) 3 hrs. lect./lab
Spring 2009, Fall 2010, Fall 2012
CSCI 0314 - Operating Systems ▲
Operating Systems
An operating system manages the complex resources of modern computers and provides an interface between the user and the hardware. This course covers the key concepts of operating systems, including process, memory, and storage management; synchronization and deadlock; protection and security; and distributed systems. (CSCI 0200 previously or concurrently, and CSCI 0202) 3 hrs. lect./lab
Spring 2011, Fall 2013
CSCI 0425 - Computational Geometry
Computational Geometry
Computational geometry involves the design and analysis of algorithms and data structures for the solution to problems of a geometric and computational nature. It is an old field, involving aspects of algorithms, geometry, combinatorics and probability, whose roots can be found in algorithmic questions posed by Euclid. Modern applications of computational geometry include geographic information systems, medical imaging, computer-aided design, and robotics. This course will explore some famous problems in computational geometry, including convex hulls, Voronoi diagrams, proximity problems, and triangulations. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab
Spring 2009
CSCI 0433 - Compiler Design
Compiler Design
An introduction to the design and construction of compilers and translators. Topics include context-free grammars, lexical analysis, symbol tables, top-down and bottom-up parsing, parser generators, error recovery, run-time organization, declaration processing, type checking, code generation, and optimization. Through the course of the semester students will implement a complete compiler for a simple programming language. (CSCI 0202 and CSCI 0301) 3 hrs. lect./lab
Spring 2011
CSCI 0451 - Machine Learning ▲
Machine Learning
Machine Learning is the study and design of computational systems that automatically improve their performance through experience. This course introduces the theory and practice of machine learning and its application to tasks such as database mining, pattern recognition, and strategic game-playing. Possible topics include decision-tree methods, neural networks, Bayesian and statistical methods, genetic algorithms, and reinforcement learning. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab
Fall 2013
CSCI 0453 - Computer Vision
Computer Vision
The goal of computer vision is to extract information from digital images and movies. Topics covered in this course include algorithms for edge and motion detection, stereo vision, object recognition, and recovering structure from motion. A range of mathematical techniques will be used to model problems and algorithms. Students will implement, test, and evaluate several computer vision techniques, and will gain experience with analyzing real, noise-contaminated image data. (CSCI 0202 and MATH 0200) 3 hrs. lect./lab
Spring 2010, Spring 2013
CSCI 0457 - Natural Language Processing
Natural Language Processing
In this course we will explore computational models for processing natural (human) language. We will introduce statistical and algorithmic techniques for processing language at the word, syntactic, and semantic levels in the context of a number of application areas including language translation, parsing, summarization, information extraction, and language modeling. Assignments will involve constructing and modifying systems and will incorporate a variety of large corpora. (CSCI 0200 and CSCI 0201) 3 hrs. lect./lab
Fall 2011
CSCI 0458 - Information Retrieval
Information Retrieval
In this course we will explore how search engines work. Topics to be covered include basic text processing, index construction, text similarity, evaluation, and searching other types of media. We will examine related application areas such as language modeling, clustering, classification and e-commerce. This course is project driven: through the assignments and final project we will build a functioning search engine. (CSCI 0201)
Fall 2012
CSCI 0461 - Computer Graphics
Computer Graphics
The mathematical techniques for creating graphics on the computer. Topics include clipping, perspective, coordinate transformations, hidden surface algorithms, and animation. (CSCI 0202 and MATH 0200) 3 hrs. lect./lab
Spring 2012
CSCI 0500 - Advanced Study ▲ ▹
Advanced Study
Individual study for qualified students in more advanced topics in computer science theory, systems, or application areas. Particularly suited for students who enter with advanced standing. (Approval required) 3 hrs. lect.
Spring 2009, Fall 2009, Winter 2010, Spring 2010, Fall 2010, Winter 2011, Spring 2011, Fall 2011, Winter 2012, Spring 2012, Fall 2012, Winter 2013, Spring 2013, Fall 2013, Spring 2014
CSCI 0702 - Senior Seminar ▹
Senior Seminar
Each student will complete a major capstone project in this course. This project can take the form of either (1) a thesis on a topic chosen with the advice of a faculty member, or (2) a group programming project approved by the computer science faculty. All students will present their work at the end of the semester. In addition, during the academic year, all seniors are expected to attend a series of lectures designed to introduce and integrate ideas of computer science not covered in other coursework. 3 hrs. lect./disc
Spring 2009, Spring 2010, Spring 2011, Spring 2012, Spring 2013, Spring 2014
CSCI 1020 - Lego Robot Design Studio
Lego Robot Design Studio
This course gives students the opportunity to design, build, and program small, mobile robots using Lego pieces, tiny onboard computers, and a variety of sensors and actuators. In this context, we will explore important concepts from computer science such as structured programming, abstraction, reasoning under uncertainty, real-time control, and elementary robotics. We will also engage other disciplines, including creative design, mechanics, and electronics. The course will culminate with a light-hearted robot talent show featuring the robots created by each team of 3 students. No prior experience with programming or Lego is required.
Winter 2010, Winter 2013
CSCI 1099 - C++ and the STL
C++ and the STL
In this course, we will work from students’ existing knowledge of Java to enter into the realm of the C++ language. Students will work on I/O and algorithm design in C++ through a combination of self-contained programming problems and larger projects. In the process, students will gain a core working knowledge of C++ and the Standard Template Library, including the Boost libraries if time permits. (CSCI 0101)
Winter 2010