|
 |
 |
 |
SCS
Undergraduate Courses
Revised June, 2001
15-050 Study Abroad
Fall and Spring
Students who are interested in studying abroad should first contact the
Office of International Education.
More information on Study Abroad is available on OIE's Study
Abroad page and at the CS Undergraduate Office.
15-075
Computer Science Co-Op
Fall and Spring
Students who are interested in a Co-Op experience with an external employer
typically do so in their Junior year. A Co-Op is distinguished from a
summer internship in that it encompasses a summer and a contiguous semester,
either Spring-Summer or Summer-Fall. A list of companies who are interested
in hiring Co-Op students is available from the SCS Career Consultant at
the Career Center. More information on the Computer Science Co-Op program
is available at the CS Undergraduate Office.
15-090
Computer Science Practicum
Fall and Spring: 3 units
This course is for international students who are interested in working
for Curricular Practical Training (CPT). Such students interested in CPT
must first be authorized by the
Office of International Education before being able to enroll in the
Practicum course. More information on CPT is available on OIE's Foreign
Student Employment page and at the CS Undergraduate Office.
15-100
Introductory/Intermediate Programming
Fall and Spring: 10 units
An introduction to the process of program design and analysis using the
Java programming language for students who have NO prior programming experience.
Topics to be covered include basic data types and their operators, I/O,
control structures (selection, loops), classes (including methods and
fields), files, arrays, and simple sorting and searching algorithms. If
you've taken a programming course in a language other than Java and have
used functions, loops, and arrays, you should NOT enroll in 15-100 and
instead enroll in 15-111. NOTE: students who receive a grade of C or less
in 15-100 should discuss whether they are adequately prepared for 15-200
with their academic advisor.
15-111
Intermediate/Advanced Programming
Fall and Spring: 10 units
An introduction to the process of program design and analysis using the
Java programming language for students with some prior programming experience
(functions, loops, and arrays) in a language other than Java. Topics to
be covered include an overview of fundamental programming concepts using
Java as well as object-oriented programming techniques, data aggregates,
data structures (e.g., linked lists, stacks, queues, trees, and graphs),
and an introduction to the analysis of algorithms that operate on those
data structures. This course, along with 21-127, serves as a prerequisite
for 15-211. NOTE: students who receive a grade of C or less in 15-111
should discuss whether they are adequately prepared for 15-211 with their
academic advisor.
15-113 Systems Skills in C (mini) Fall and Spring, second
mini session: 5 units
This course is designed to provide a substantial exposure to the C programming
language and the Unix programming environment (gcc) for students with
prior programming experience but minimal exposure to C. Topics to be covered
include arrays, structs and unions, dynamic memory allocation (malloc
and free), pointers and pointer arithmetic. This course, along with 15-211,
serves as the prerequisite for 15-213. Prerequisite: 15-111 or 15-200.
15-121
Advanced Programming
Fall and Spring: 5 units
This course assumes significant prior programming experience in an object-oriented language other than Java (i.e., C++) as well as an understanding of data structures such as linked lists and binary trees. This course teaches the implementation and application of such data structures in Java. This course (or the semester-long 15-111) along with 21-127 serves as the prerequisite for 15-211. Students who receive a grade of C or less in 15-121 should discuss whether they are adequately prepared for 15-211 with their academic advisor.
15-200 Advanced Programming/Practicum
Fall and Spring: 9 units
This course assumes prior programming experience in Java (at the level
of 15-100) and is designed to expand students' knowledge of computer science
and sharpen their programming skills. The course extends object-oriented
programming techniques begun in 15-100 and covers data aggregates, data
structures (e.g., linked lists, stacks, queues, trees, and graphs), and
an introduction to the analysis of algorithms that operate on those data
structures. The course is currently taught in Java and, along with 21-127,
serves as a prerequisite for 15-211. NOTE: students who receive a grade
of C or less in 15-111 should discuss whether they are adequately prepared
for 15-211 with their academic advisor.
15-211 Fundamental Data Structures and Algorithms
Fall and Spring: 12 units
Fundamental programming concepts are presented together with supporting
theoretical bases and practical applications. This course emphasizes the
practical application of techniques for writing and analyzing programs:
data abstraction, program verification, and performance analysis. These
techniques are applied in the design and analysis of fundamental algorithms
and data structures. The course is currently taught in Java. Prerequisites:
21-127 and either 15-111 or 15-200.
15-212 Principles of Programming
Fall and Spring: 12 units
This course presents principles and techniques of programming, focusing
on sophisticated methods for specifying, constructing, and reasoning about
computer programs. Via features of a high-level functional programming
language (currently ML), this course concretely illustrates mechanisms
for building user-defined data types, including recursive and polymorphic
types, and infinite data structures such as streams; for building higher-order
control constructs such as first-class functions and continuations; and
for building large programs using advanced module composition. It also
introduces the use of formal methods for specifying and verifying programs.
Prerequisite: 15-211.
15-213 Introduction to Computer Systems
Fall and Spring: 12 units
This course provides a programmer's view of how computer systems execute
programs, store information, and communicate. It enables students to become
more effective programmers, especially in dealing with issues of performance,
portability and robustness. It also serves as a foundation for courses
on compilers, networks, operating systems, and computer architecture,
where a deeper understanding of systems-level issues is required. Topics
covered include: machine-level code and its generation by optimizing compilers,
performance evaluation and optimization, computer arithmetic, memory organization
and management, networking technology and protocols, and supporting concurrent
computation. Prerequisite: 15-113 (or equivalent experience in C) and
15-211.
15-251 Great Theoretical Ideas in Computer Science
Spring: 12 units
This course is about how to use theoretical ideas to formulate and solve
problems in computer science. It integrates mathematical material with
general problem solving techniques and computer science applications.
Examples are drawn from Algorithms, Complexity Theory, Game Theory, Probability
Theory, Graph Theory, Automata Theory, Algebra, Cryptography, and Combinatorics.
Assignments involve both mathematical proofs and programming. Prerequisites:
21-127 and either 15-111 or 15-200, or permission of the instructor.
15-312 Programming Language Design and Processing
Fall and Spring: 12 units
This course discusses in depth many of the concepts underlying the design,
definition, implementation, and use of modern programming languages. Formal
approaches to defining the syntax and semantics are used to describe the
fundamental concepts underlying programming languages. A variety of programming
paradigms are covered such as imperative, functional, logic, and concurrent
programming. In addition to the formal studies, experience with programming
in the languages is used to illustrate how different design goals can
lead to radically different languages and models of computation. Prerequisite:
15-212.
15-381 Artificial Intelligence: Representation and Problem Solving
Fall and Spring: 9 units
This course is about the theory and practice of Artificial Intelligence.
We will study modern techniques for computers to represent task-relevant
information and make intelligent (i.e., satisficing or optimal) decisions
towards the achievement of goals. The introduced methods are applicable
throughout a large range of industrial, civil, medical, financial, robotic,
and information systems. We will ask questions about AI systems such as:
how to represent knowledge, how to effectively generate appropriate sequences
of actions, how to deal with uncertainty in the world, how to learn from
experience, and how to process and provide reward and punishment? We expect
that by the end of the course students will have a thorough understanding
of the algorithmic foundations of AI, how probability and AI are closely
interrelated, and a strong appreciation of the big-picture aspects of
developing fully autonomous intelligent agents. Near the end of the course
we will spend several lectures learning about and discussing some important
current application areas of AI. Prerequisite: 15-212.
15-384 Robotic Manipulation
Fall: 9 units
Foundations and principles of robotic manipulation. Topics include computational
models of objects and motion, the mechanics of robotic manipulators, the
structure of manipulator control systems, planning and programming of
robot actions. Prerequisites: 21-122 and 21-241 (or equivalent) and either
15-111 or 15-200.
15-385 Computer Vision
Spring: 9 units
This course deals with the science and engineering of computer vision,
that is, the analysis of patterns in visual images of the world with the
goal of reconstructing and understanding the objects and processes in
the world that are producing them. The emphasis is on physical, mathematical,
and information processing aspects of vision, but biological and psychological
perspectives will also be considered. Topics covered include image formation
and representation, multi-scale analysis, segmentation, contour and region
analysis, reconstruction of depth based on stereo, text shading and motion,
and analysis and recognition of objects and scenes using statistical and
model-based techniques. Prerequisites: 15-113, 21-122 and 21-241 (or equivalent).
15-391 Technology Consulting in the Community
Fall and Spring: 9 units
In this course, the student learns process consulting while collaborating
on site with a community leader of a non profit organization. This service-learning
course de-emphasizes coding, asking the student instead to analyze a complex
organization, then design and implement a work plan that will expand the
organization's capacity to use information technology. Throughout the
semester, students develop a consulting report. They learn how to use
this working document to collaborate with others and to think through
and communicate a strategic technology plan. Students also experience
how urban community organizations function, seeing the valuable benefits
these organizations provide to society. Prerequisite: 15-211.
15-411 Compiler Design
Fall: 12 units
This course covers the design and implementation of compiler and run-time
systems for high-level languages, and examines the interaction between
language design, compiler design, and run-time organization. Topics covered
include syntactic and lexical analysis, handling of user-defined types
and typechecking, context analysis, code generation and optimization,
and memory management and run-time organization. Prerequisite: 15-312.
15-410 Operating System Design and Implementation
Fall and Spring: 12 units
Operating systems monitor the execution of user programs and the allocation
of various resources such as memory space and peripheral devices. The
course introduces the basic concepts of multiprogramming, timesharing
and asynchronous processes. These concepts lead to interesting problems
of synchronization, scheduling, memory management, information sharing
and protection. Emphasis of the course is on the design aspects of operating
systems. Prerequisites: 15-213.
15-415 Database Applications
Fall: 12 units
This course covers the fundamental topics for Database Management Systems:
Database System Architecture (ANSI/SPARC Architecture; data abstraction;
external, conceptual, and internal schemata; data independence; data definition
and data manipulation languages), Data models (entity-relationship and
relational data models; data structures, integrity constraints, and operations
for each data model; relational query languages: SQL, algebra, calculus),
Theory of database design (functional dependencies; normal forms; dependency
preservation; information loss), Query Optimization (equivalence of expressions,
algebraic manipulation; optimization of selections and joins), Storage
Strategies (indices, B-trees, hashing), and Transaction Processing (recovery
and concurrency control). Advanced topics which are also covered: the
object-oriented data model and distributed databases. Prerequisite: 15-212,
or permission of the instructor.
15-441 Computer Networks
Fall and Spring: 12 units
This is an introductory course about computer networks. The emphasis will
be on the basic performance and engineering tradeoffs in the design and
implementation of computer networks. Students will learn not only what
computer networks are and how they work today, but also why they are designed
the way they are and how they are likely to evolve in the future. We will
draw examples primarily from the Internet. Topics to be covered include:
LAN, congestion/flow/error control, routing, addressing, naming, multicasting,
switching, internetworking, quality of service, and network security.
There will be both written and programming assignments, and a substantial
project involving the design and implementation of a complete protocol
stack. Prerequisites: 15-213.
15-451 Algorithm Design and Analysis
Fall and Spring: 9 units
This course is about the design and analysis of algorithms. We study specific
algorithms for a variety of problems, as well as general design and analysis
techniques. Specific topics include searching, sorting, algorithms for
graph problems, efficient data structures, lower bounds and NP-completeness.
A variety of other topics may be covered at the discretion of the instructor.
These include parallel algorithms, randomized algorithms, geometric algorithms,
low level techniques for efficient programming, cryptography, and cryptographic
protocols. Prerequisites: 15-212 and 15-251 (or 21-228).
15-453 Formal Languages and Automata
Spring: 9 units
An introduction to the fundamental ideas and models underlying computing:
finite automata, regular sets, pushdown automata, context-free grammars,
Turing machines, undecidability, and complexity theory. Prerequisites:
15-212 and 15-251 (or 21-228).
15-462 Computer Graphics 1
Fall and Spring: 12 units
This course provides a comprehensive introduction to computer graphics
modeling, animation, and rendering. Topics covered include basic image
processing, geometric transformations, geometric modeling of curves and
surfaces, animation, 3-D viewing, visibility algorithms, and shading.
Students gain experience producing simple animations. Prerequisites: 15-213,
21-241 and 21-259 (or equivalent).
15-463 Computer Graphics 2
Spring: 12 units
More advanced computer graphics. Like 15-462, its goal is to teach students
to understand how graphics algorithms work, and how to develop their own,
rather than on the use of commercial software systems. Topics include:
image filtering, Fourier transforms, image warping, parametric surfaces,
spatial data structures, animation, antialiasing, recursive ray tracing,
radiosity, and volume rendering. Prerequisite: 15-462.
15-499 Special Topics in Computer Science
Fall and Spring: 9-12 units
Offered from time to time on various topics. Prerequisites, hours, and
units to be announced at the time of registration.
15-5x9 Independent Study
Fall and Spring: 3-12 units
Specially selected projects and readings in programming systems, human-computer
interaction, computer systems, theory, graphics, and artificial intelligence.
Prerequisites, hours, and units to be negotiated with individual instructors.
More information is available at the CS Undergraduate Office.
15-599 Undergraduate Thesis Research
Fall and Spring: 18 units
Available only to students registered in the CS Senior Research Thesis
program. More information is available at the CS Undergraduate Office
and on the SCS undergraduate curriculum suggested
options page.
15-681 Artificial Intelligence: Machine Learning
Fall: 12 units
Machine Learning is concerned with computer programs that automatically
improve their performance through experience (e.g., programs that learn
to spot high-risk medical patients, recognize human faces, detect credit
card fraud, and drive autonomous robots). This course covers the theory
and practical algorithms for machine learning from a variety of perspectives.
We cover topics such as datamining, decision tree learning, neural network
learning, statistical learning methods, genetic algorithms, Bayesian learning
methods, explanation-based learning, and reinforcement learning. The course
covers theoretical concepts such as inductive bias, the PAC learning framework,
minimum description length principle, and Occam's Razor. Short programming
assignments include hands-on experiments with various learning algorithms.
Typical assignments include neural network learning for face recognition,
and decision tree learning from databases of credit records. Prerequisite:
15-212, or permission of the instructor.
Graduate Courses
All graduate courses are available to undergraduate students who have
appropriate prerequisites and permission of the instructor. Descriptions
of graduate courses may be obtained from the School of Computer Science.
Maintained by Catharine
Fichtner, CS Undergraduate Program Administrator.
|