|
Courses
Descriptions
Current
Future
Descriptions
Core Courses
(offered every year or every other year)
- Computer Science
141, Introduction to Object-Oriented Programing
- Computer Science
201, Data Structures
- Computer Science
225, Computer Architecture
- Computer Science
244, Discrete Math & Functional Programming
- Computer Science
273, Scientific Programming
- Computer Science
301, Algorithms
- Computer Science
305, Design of Programming Languages
- Computer Science
312, Theory of Computation
- Computer Science
326, Operating Systems
- Computer Science
335, Computer Networks
- Computer Science
351, Artificial Intelligence
Elective Courses
- Computer Science
111, Introduction to Computing: Automated Reasoning
- Computer Science
112, Introduction to Computing: Graphics and Animation
- Computer Science
113, Introduction to Computing: Robotics
- Computer Science
114, Introduction to Computing: Understanding the Computer
- Computer Science
115, Introduction to Computing: Simulating Reality
- Computer Science
116, Introduction to Computing: Semantic Web
- Computer Science
131, Cognitive Science: Languages of the Mind
- Computer Science
321, Databases: Theory and Practice
- Computer Science
352, Biologically-Inspired Machine Learning
- Computer Science
353, Modeling and Simulation
- Computer
Science
373, Software Interface Design
- Computer
Science
401, Topics in Computational Complexity
- Computer
Science
425, Compiler Design
- Computer
Science
451, Topics in Advanced Artificial Intelligence
Tutorials
The Computer
Science Program also offers tutorials on advanced topics not included
in the topics offered during the current semester.
Course Descriptions
Introduction
to Computing: Automated Reasoning
Computer Science 111
This course explores the application of computing to logical
deduction. Students will design programs that automate many aspects of
human reasoning. Topics include natural language processing, natural
language generation, automated theorem proving, and verification.
Prerequisite: Eligibility for Q courses.
Introduction
to Computing: Graphics and Animation
Computer Science 112
This course provides an introduction to the use of computer
programming for creating and displaying a wide variety of objects,
patterns, and digital images. Students will learn to use a programming
language and graphics interface to write algorithms that represent and
render two-dimensional and three-dimensional geometrical objects,
beginning with points and lines and extending three-dimensional solids.
Topics will include applied geometry, coordinate transformations,
projection, perspective, object modeling, and basic animation.
Prerequisite: eligibility for Q courses.
Introduction
to Computing: Robotics
Computer Science 113
This course introduces students to ideas that are
fundamental to
robotics and to computing in general. Teams of students will design
and build shoebox-sized robots, with guidance from the
instructor. These rather minimalist robots will be mobile and will
have multiple sensors. The student teams will use a simple programming
language to program their robots to carry out simple tasks, and will
move to a more robust programming language and more complex tasks by
the end of the semester. Prerequisite: eligibility for Q courses.
Introduction
to Computing: Understanding the Computer
Computer Science 114
This course examines several fundamental ideas from computer
science,
from the point of view of understanding the computer as a
machine. Over the course of a semester, we will move from the very
concrete (digital circuits) through increasingly abstract descriptions
of computing machinery. Along the way, we will learn how to decode the
jargon of computer advertising GB's, RAM, GHz, and so on. Students
will explore the basics of computer programming via several simple
assignments. Prerequisite: eligibility for Q courses.
Introduction
to Computing: Simulating Reality
Computer Science 115
How do rumors and fashions spread in society? Does a small
change in
environmental temperature disrupt an ecosystem? Questions like these
are explored using computers to create virtual worlds. This
introduction to modeling and simulation is intended for students who
are interested in creating computer models of objects, processes, and
complex systems using computer software. Students will create and run
several different simulation model types drawn from a variety of
disciplines, including: artificial life, cognitive science, economics,
environmental science, evolution, neuroscience, physics, and political
science. Students will gain a practical understanding of how to
combine mathematical modeling, computer simulation, and data analysis
as they use and create software that enables them to build simulation
models that answer a practical need and/or scientific question. No
prior knowledge of computer programming is required. Prerequisite:
strong background in pre-calculus mathematics or its equivalent and
eligibility for Q courses.
Introduction
to Computing: Semantic Web
Computer Science 116
This course is an
introduction to semantically
intelligent content management for the World Wide Web.
Participants in this course will construct
social networking software, similar in scope to weblogs or facebook,
using an
advanced content management system.
Strong emphasis will be placed on the development of flexible
applications that efficiently store and process data and
metadata. In addition to basic computer programming,
various XML technologies will be introduced and employed. Prerequisite:
eligibility for Q
courses.
Cognitive
Science: Languages of the Mind
Computer Science 131
How
do brains make minds? Can computers think? Is my
dog conscious? Cognitive science assumes that the brain is some sort of
computational engine, and, beginning with that premise, attempts to
find answers to such questions. This course will be taught by
faculty from biology, computer science, linguistics, philosophy, and
psychology, who will combine their different approaches to explore how
humans and other intelligent systems feel, perceive, reason, plan, and
act. In particular, the course will focus on the fundamental
importance of language, signaling, and representation at many levels,
from the neural to the organismal. Laboratories will provide
students with hands-on experience analyzing neural and behavioral data
as well as with computational modeling.
Prerequisite: pre-calculus or its equivalent and a willingness to
engage a broad variety of ideas and approaches from the natural,
mathematical, and social sciences.
Introduction
to Object-Oriented Programming
Computer Science 141
This
course introduces students with prior programming
experience to
the methodologies of object-oriented design and programming, which are
used throughout the Computer Science curriculum. Students will learn
how to move from informal problem statement, through increasingly
precise problem specifications, to design and implementation of a
solution. Good programming habits will be emphasized. Prerequisite:
Any Introduction to Computing course, or permission of instructor.
Data
Structures
Computer Science 201
This
course introduces students to the basic ideas underlying
data
storage and retrieval. Several standard data structures will be
covered, including stacks, queues, lists, hash tables, and balanced
binary trees. The course will balance implementation of structures and
formal analysis of their properties. Prerequisite: Computer Science
141.
Nonstandard
Computation
Computer Science 220
This course explores the physical
nature of computation. Standard computation is based on implementation
of algorithms for digital computers. In this course we examine
alternate systems in which computation can be performed and the
different laws of nature that apply to each. Topics to be examined
include quantum computation, DNA or molecular computation, generalized
time reversible computation, as well as emerging areas such as chaos
computing and cellular automata. Prerequisites: Mathematics 111 and
Computer Science 141, or permission of the instructor.
Computer
Architecture
Computer Science 225
An introduction to the structure and
operation of a modern computer architecture. Topics include instruction
sets, pipelining, instruction-level parallelism, caches, memory
hierarchies, storage systems, and multiprocessors. Assembly language
programming is used to demonstrate concepts. Corequisite: Computer
Science 201, with Physics 212 recommended.
Discrete Math and Functional Programming
Computer Science 244
This
course covers many mathematical concepts of importance to the
foundation of the modern computer scientist, employing a functional
programming language as a vehicle for computational expression. General
discrete mathematics topics will include logic and formal proof, sets,
relations, functions, induction and co-induction, number theory, and
graph theory. Functional programming concepts will include lambda
calculus, type theory, lists and algebraic data types, recursion and
co-recursion, and polymorphism. This course satisfies the functional
programming requirement for moderation into the computer science
program.
Prerequisites: MATH 141 and an introductory computer science course, or
their equivalents.
Scientific
Programming
Computer Science 273
Introduces numerical methods used in
the physical sciences, and the C programming language. Common
techniques of data analysis, approximation, and numerical solutions of
integral and differential equations are developed for their own sake
and also as an introduction to available analysis packages.
Prerequisites: Mathematics 211.
Algorithms
Computer Science 301
This course covers design and analysis
of correct and efficient computer algorithms. Topics include sorting,
greedy algorithms, divide-and-conquer algorithms, dynamic programming
algorithms, and graph algorithms. Advanced topics in algorithms may be
selected from specialized areas of the mathematical and empirical
sciences. Prerequisites: Computer Science 201 and Mathematics 231 or
235.
Design of
Programming Languages
Computer Science 305
Covers a selection of important issues
in the design of programming languages including, but not limited to,
type systems, procedure activation, parameter passing, data
encapsulation, dynamic memory allocation, and concurrency. In addition,
the functional, logic, and object-oriented programming paradigms are
presented, along with a brief history of high-level programming
languages. Prerequisite: Computer Science 201.
Theory of
Computation
Computer Science 312
An introduction to several
computational models developed to formalize the notion of an algorithm,
the course also offers detailed discussion of primary topics in the
theory of computation, including the theory of recursive functions,
Turing machines, and several undecidable problems, such as the Halting
problem. Prerequisites: Mathematics 231 or both Computer Science 301
and Mathematics 235.
Databases:
Theory and Practice
Computer Science 321
An introduction to the design,
implementation, and uses of databases. Topics include database design,
database models, integrity, concurrency, security, and database query
languages. Prerequisite: Computer Science 201.
Operating
Systems
Computer Science 326
Covers traditional topics of operating systems,
including interprocess
communication, semaphores, monitors, scheduling algorithms, deadlocks,
virtual memory, and file system design. In addition, discussion may
include issues in distributed systems such as the client-server model,
remote procedure call, distributed synchronization, transactions,
threads, and file servers. Prerequisite: Computer Science 201.
Computer
Networks
Computer Science 335
Takes a bottom-up approach to computer
networking, covering in detail the physical, data link, MAC, network,
transport, and application layers. TCP/IP and OSI reference models are
introduced, with examples taken from the Internet, ATM networks, and
wireless networks. Prerequisite: Computer Science 201.
Artificial
Intelligence
Computer Science 351
Provides a broad introduction to topics in artificial intelligence,
including knowledge representation and reasoning, planning and problem
solving, and machine learning. Advanced topics may include natural
language processing, multiagent systems, and image processing.
Prerequisite: Computer Science 201.
Biologically
Inspired Machine Learning
Computer Science 352
Examines computation as a metaphor for understanding adaptive
systems. Several biological systems are studied and related to
abstract models that incorporate elements of their data structures,
information processing, and learning. Neuron models, neural networks,
and evolutionary learning are studied using mathematics and computer
simulation. This course emphasizes information processing, pattern
recognition, and associated computational abilities of artificial
models, but takes an ethological approach to understanding how natural
and artificial intelligent systems adapt to their environment..
Prerequisites: Computer Science 201.
Modeling
and Simulation
Computer Science 353
This course
provides an introduction to mathematical modeling
and the computer simulation of discrete and continuous systems.
Examples will be drawn from the computational, physical, and social
sciences. Students will learn to create mathematical models of
systems, design simulation experiments, construct simulations, test
their validity, and statistically analyze model output. Students
will complete final projects in which they undertake the modeling and
simulation of a system of their choice. Prerequisite:
Mathematics 142 and Computer Science 201 or the equivalent, and at
least one 200-level course in the sciences or social sciences.
Software
Interface Design
Computer Science 373
Focuses in detail on desiderata for
good user interface design, including questions of layout, command
entry, and display of information. The course centers on event-driven
programming, using the Java programming language. Prerequisite:
Computer Science 201.
Topics in
Computational Complexity
Computer Science 401
Topics for this course may include
logic and undecidability, NP-complete problems, co- NP and function
problems, randomized algorithms, cryptography, approximation
algorithms, and logarithmic space. Prerequisites: Computer Science 301
and 312.
Compiler
Design
Computer Science 425
An introduction to the process of
writing a language translator. Topics include lexical analysis,
parsing, syntax-directed translation, optimization, and code
generation. Students complete a project involving design and
implementation of a compiler for a simple high- level programming
language. Prerequisites: Computer Science 305.
Topics in
Advanced Artificial Intelligence
Computer Science 451
This course covers a selection of topics from
artificial intelligence, which may include robotics, natural language
processing, machine learning, neural networks, genetic algorithms,
genetic programming, planning, and computer vision. Selection of topics
will be guided in part by student interest and background.
Prerequisite: Computer Science 351
|