CSD Home | SCS Home

 

 

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, Automata, and Computability
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.

 

      CSD Home   Webteam  ^ Top   SCS Home