The Academic Program > Majors, Departments & Interdisciplinary Programs > Mathematics & Computer Science

Three years of high school mathematics, including two years of algebra and one year of geometry, or equivalent preparation, are necessary for all courses offered in the Department. Trigonometry/Precalculus is strongly recommended.

**Advanced placement:** A student who scores a 4 or higher on
the Computer Science exam will receive course credit
for CSCI 150 *Foundations of Computer
Science*.

Introductory computer science

(Select a course title to view its description.)

Introduction to mechanical design and computer programming in the
context of building and programming mobile robots. Mechanical design
topics include vectors and forces, Newton's Laws, gears, motors,
rotational motion, friction, and the design process. Computer science
topics include an introduction to programming, the programming
of sensors and motors, and an introduction to artificial intelligence. Other
topics include application of scientific method, teamwork skills, technical
writing, and the relationship between the science fiction portrayal of
robots and current technological reality. *Cross-listed as PHYS 135.*

Introduction to solving computational problems, including the fundamentals
of computer programming. Topics include imperative programming
constructs (variables, loops, conditionals, functions,
recursion), basic object-oriented constructs (classes, objects),
and some fundamental algorithms and data structures
(dictionaries, arrays, linked lists, basic sorting).
Students learn these concepts through studying the Python programming
language.

Intermediate computer science

Builds on the skills acquired in CSCI 150
*Foundations of Computer Science*, placing
special emphasis on object oriented software design and data abstraction.
Students are introduced to some of the most important and frequently
used data structures: lists, stacks, queues, trees, graphs, and programming
techniques such as recursion. Other topics covered include analysis of
algorithm complexity, program verification, multithreading,
and inheritance.
Programming assignments focus on the design and implementation of
algorithms and data structures using the Java language.
*Prerequisite: CSCI 150 and either
completion of or enrollment in MATH 130.*

A study of the layers of abstraction composing the design of
modern computing systems. Topics include numeric representation,
digital logic, the memory hierarchy, machine language and
assembly language, the program stack, the system call concept,
and the compilation process. Students are introduced to the
C programming language.
*Prerequisite: CSCI 150.*

A study of the application of artificial intelligence to solving
problems in robotics. Topics include subsumption, planning,
machine learning, vision, neural networks, localization, and
mapping. Students configure provided implementations of
algorithms to control physical robots.
*Prerequisite: CSCI/PHYS 135
***OR** CSCI 150.

Introduction to the computer science concepts necessary for the
development of large software systems. Topics include
user interface design, multithreading, network programming,
parsing, grammars, testing, and an introduction to databases and
software engineering. Programming assignments emphasize the
integration of multiple concepts in the context of realistic
software applications. Students receive experience
with completing projects in teams of four of more developers.
*Prerequisite: CSCI 151.*

Introduction to algorithm design strategies that build upon data
structures and programming techniques introduced in the first
two computer science courses. Strategies discussed include
brute-force, divide-and-conquer, dynamic programming, problem
reduction, and greedy algorithms. Particular topics to be covered
include graph traversal and shortest paths, string matching,
searching, sorting, and advanced data structures such as balanced
search trees, heaps, hash tables, state machines and union-find
structures. In addition, the course includes an introduction to
complexity theory and the complexity classes P and NP.
*Prerequisites: CSCI 151 and MATH 240.*

Advanced computer science

A study of the design concepts of major importance in modern computers.
Topics include microprogramming, language-directed computers,
parallel processors, and pipeline computers. Emphasis is placed on
the relationship of architecture to programming issues.
*Prerequisite: CSCI 230.*

An introduction to the design, analysis, implementation, and
application of classical and contemporary algorithms in artificial
intelligence. Topics include intelligent robot behavior,
theorem-proving systems, heuristic search, alpha-beta search,
metaheuristic optimization, neural networks, and machine learning.
*Prerequisite: CSCI 151.*

A study of designing and using a database management system
(DBMS) and of developing Web applications.
Topics include HTML, CSS, the JavaScript language, relational
database theory, techniques for supporting ACID properties, and
frontiers in database research. As part of a large team,
students design and develop a system
with a Web front end that interacts with a DBMS using SQL.
*Prerequisite: CSCI 151.*

In this course, students learn and gain practical experience with software
engineering principles and techniques. The practical experience centers
on a semester-long team project which is
carried through all of the stages of the software lifecycle. Topics
include requirements analysis, specification, design,
and verification. Emphasis is placed on writing precise
requirements, employing formal and semiformal methods to assist
in design and verification of software, and using incremental
software development.
*Prerequisite: CSCI 250.*

Concepts and structures governing the design and implementation of
modern programming languages. Introduction to concepts of compilers
and run-time representations of programming languages. Features of
programming languages supporting abstraction. Languages studied
include examples of the procedural, functional, and
object-oriented paradigms.
*Prerequisite: CSCI 230.*

Covers basic topics in automata, computability, and complexity theory,
including: models of computation (finite automata, Turing machines and
RAMs); regular sets and expressions; recursive, r.e., and non-r.e. sets and
their basic closure properties; complexity classes; determinism vs.
non-determinism, with and without resource bounds; reductions and
completeness; practice with NP- and P-completeness proofs; and the
complexity of optimization and approximation problems.
*Prerequisite: MATH 240.*

Students study problems arising from the physical,
biological, and/or social sciences and the algorithms and theory
used to solve them computationally. Included among the problems
are numerical methods for maximizing a function and solving
a differential equation.
*Prerequisite: MATH 130
and CSCI 150.*

In this course intended for computer science minors, the student
completes a semester-long project investigating the
relationship of the student's major with computing. Typically,
this involves developing software to solve a computational
problem in the major discipline. This course must be taken as an
independent study, supervised by a computer science faculty
member in consultation with a faculty member in the student's
major discipline.
*Prerequisite: CSCI 151.*

Focuses on written and oral communication concerning computing,
with a secondary emphasis on quantitative performance analysis
and reading and research skills. Among the written assignments
are design documents and user documentation; a research paper
and presentation are the culminating assignments.
Fundamental communication skills receive special attention.
*Prerequisite: Senior standing.*

Basic principles of modern operating systems design: emphasis on
concurrency including problems (nondeterminism), goals
(synchronization, exclusion) and methods (semaphores, monitors);
resource management including memory management and processor
scheduling; file systems; interrupt processing; multithreaded
programming.
*Prerequisite: CSCI 230.*

Faculty-student seminar. Content varies according to the interests of
the participants and instructor.
*Prerequisite: consent of instructor.*

A required seminar for all senior computer science majors which meets
throughout the academic year. Each student will develop an individual
research project under the direction of a faculty member and present the
results both orally and in written form.
*Students also majoring in mathematics should enroll in
CSCI 497 for one semester and MATH 497 in the other.*