CSCI 115 Computing and the Internet (CW,QS)
A study of core topics in computing, focusing on concepts
related to the Internet and its social implications. Topics will
include fundamental concepts in computing hardware, networks,
Web programming and design, and databases, as well as social
issues such as data privacy, intellectual property, and resource
accessibility. Students will complete significant projects in
Web design and research concerning contemporary issues.
CSCI 135 Robotics Exploration Studio (NS-L)
Introduction to mechanical design and computer programming in the
context of building and programming mobile robots. Mechanical design
topics will include vectors and forces, Newton's Laws, gears, motors,
rotational motion, friction, and the design process. Computer science
topics will 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.
CSCI 150 Foundations of Computer Science I (QS, NS)
Introduction to computer programming, the process of designing and
constructing software. It emphasizes techniques for object-oriented design
and software development by means of an introduction to the features of
the programming language Java, including the notion of classes, and
computation due to the interaction between classes. The course also
covers some of the most fundamental data structures and algorithms that
are useful in Computer Science.
CSCI 151 Foundations of Computer Science II (NS)
Builds on the skills acquired in Foundations of Computer Science I, 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, and simulations.
Programming assignments focus on the design and implementation of
algorithms and data structures. Prerequisite: CSCI 150 and either
completion of or enrollment in MATH 130.
CSCI 230 Computing Systems Organization
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 will be introduced to the
C programming language.
Prerequisite: CSCI 151.
CSCI 250 Programming Practicum (NS)
Introduction to the computer science concepts necessary for the
development of large software systems. Topics will include
human-computer interaction, multithreading, network programming,
parsing, grammars, testing, and an introduction to databases and
software engineering. Programming assignments will emphasize the
integration of multiple concepts in the context of realistic
software applications. Students will also read and reflect upon
case studies in computing ethics, as a way of understanding the
societal context in which computer programs are utilized.
Prerequisite: CSCI 151.
CSCI 280 Algorithms and Problem-Solving Paradigms (W2)
Introduction to algorithm design strategies that build upon data
structures and programming techniques introduced in the first
two computer science courses. Strategies discussed will include
brute-force, divide-and-conquer, dynamic
programming, problem reduction, and greedy algorithms. Particular
topics to be covered
will 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 will include an
introduction to complexity theory
and the complexity classes P and NP. Prerequisites: CSCI
151 and MATH 240.
CSCI 330 Computer Architecture
A study of the design concepts of major importance in modern computers.
Topics will include microprogramming, language-directed computers,
parallel processors, and pipeline computers. Emphasis will be placed on
the relationship of architecture to programming issues. Prerequisite: CSCI 250.
CSCI 335 Artificial Intelligence
An introduction to the design, analysis, implementation, and application of classical and contemporary algorithms in artificial intelligence, with an emphasis on the development of complete, embodied intelligent agents. Topics will include symbolic planning, robot programming under both subsumption and hybrid paradigms, automated theorem proving, intelligent game-playing programs, rule-based systems, genetic algorithms, neural networks, and machine learning.
Prerequisite: Any CSCI course listed 200 or above.
CSCI 340 Database Systems
Introduction to the theoretical and practical aspects of database
management systems. Emphasis is on the relational data model. Topics
covered include query languages, relational design theory, file structures,
and query optimization. Students will implement a database application
using Oracle or MySQL, Java Applets, and Servlets. Prerequisite:
Any CSCI course listed 200 or above.
CSCI 350 Software Engineering (W2)
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 in which a software development project
is carried through all of the stages of the software lifecycle. Topics
include requirements analysis, specification, design,
and verification. Emphasis will be 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.
CSCI 360 Survey of Programming Languages (W2)
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
will include examples of the procedural, functional, and
object-oriented paradigms. Prerequisite: CSCI 230.
CSCI 380 Theory of Computation
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.
CSCI 385 Scientific Computing
Students will 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
will be numerical methods for maximizing a function and solving
a differential equation.
Prerequisite: MATH 130 and CSCI 150.
CSCI 397 Cross-Disciplinary Project
[SP]
In this course intended for computer science minors, the student
will complete a semester-long project investigating the
relaionship of the student's major with computing. Typically,
this will involve 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.
CSCI 410 Technical Communication and
Analysis
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
will be design documents and user documentation; a research paper
and presentation will be the culminating assignments.
Fundamental communication skills will receive special attention.
Prerequisite: Senior standing.
CSCI 420 Operating Systems and Concurrent Computing
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.
CSCI 490 Advanced Topics in Computer Science
Faculty-student seminar. Content will vary according to the interests of
the participants and instructor. Prerequisite: consent of instructor.
CSCI 497 Senior Seminar [UR]
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.