COMPUTER SCIENCE UNDERGRADUATE COURSES
15-050 Study Abroad
All Semesters: 0 units
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
All Semesters: 0-3 units
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
All Semesters: 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
All Semesters: 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), arrays, and simple sorting and searching algorithms. Students with prior programming experience are strongly encouraged to take 15-111. 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-105 Principles of Computation
Fall and Spring: 9 units
An introduction to principles that form the foundation of computer science for students with no prior background in computing. This course is suitable for students with a non-technical background who wish to study the key principles of computer science rather than just computer programming. Topics include the history of computation, writing algorithms and using programming constructs, data organization, the role of the compiler, programming language paradigm, recursion, algorithm correctness and efficiency, limits of computability and the Turing machine as a universal computer, the role of the operating system, an introduction to artificial intelligence, and alternative models of computation including parallel, quantum and molecular computing. Although programming principles and programming languages will be discussed, there will be no significant programming exercises in this class. Students who are interested in learning how to program in a specific programming language such as Java are encouraged to register for 15-100, 15-111 or 15-200 instead, depending on their prior programming background. Students who have completed 15-211 (or higher) are not permitted to register for this course.

15-111 Intermediate/Advanced Programming
All Semesters: 10 units
A continuation of the process of program design and analysis for students with some prior programming experience (functions, loops, and arrays, not necessarily in Java). The course reinforces object-oriented programming techniques in Java 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, 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.
Prerequisites: 15100

15-123 Effective Programming in C and UNIX
All Semesters: 9 units
This course is designed to provide a substantial exposure to the C programming language and the Unix programming environment for students with prior programming experience but minimal exposure to C. Features of the C language that are emphasized include arrays, structs and unions, dynamic memory allocation (malloc and free), pointers, pointer arithmetic, and casting. Data structures that are emphasized include lists and hash tables. Students will develop a sense of proper programming style in the C idiom, and will be exposed to cross-platform portability issues. Students will learn to use tools such as emacs/vi, make, and gdb to assist them in the design, testing and debugging of their programs. Students will learn about regular expresions and grep and will be able to use a scripting language such as Perl to solve simple problems. This course serves as the prerequisite for 15-213.
Prerequisites: 15100

15-211 Fundamental Data Structures and Algorithms
All Semesters: 12 units
Fundamental programming concepts are presented together with supporting theoretical foundations 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: 15111 and 21127

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.
Prerequisites: 15251

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.
Prerequisites: 15123

15-221 Technical Communication for Computer Scientists
Fall and Spring: 9 units
The course is designed for sophomore computer science majors to improve their abilities in practical, professional communications (both written and oral). It aims to help students compose clear, concise technical writings and oral presentations for multi-level audiences. Assignments include technical definitions, descriptions, instructions, process explanations, abstracts, memos, and research reports. Assignments may incorporate recent computer science research at Carnegie Mellon, projects in related technical courses, and professional case studies.
Prerequisites: 76101

15-251 Great Theoretical Ideas in Computer Science
Fall and 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: (15100 or 15111) and 21127

15-312 Foundations of Programming Languages
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.
Prerequisites: 15212

15-317 Constructive Logic
Spring: 9 units
This multidisciplinary junior-level course is designed to provide a thorough introduction to modern constructive logic, its roots in philosophy, its numerous applications in computer science, and its mathematical properties. Some of the topics to be covered are intuitionistic logic, inductive definitions, functional programming, type theory, realizability, connections between classical and constructive logic, decidable classes. This course counts as a Fundamentals course in the Computer Science major.
Prerequisites: 15212

15-354 Computational Discrete Mathematics
Fall: 12 units
This course is about the computational aspects of some of the standard concepts of discrete mathematics (relations, functions, logic, graphs, algebra, automata), with emphasis on efficient algorithms. We begin with a brief introduction to computability and computational complexity. Other topics include: iteration, orbits and fixed points, order and equivalence relations, propositional logic and satisfiability testing, finite fields and shift register sequences, finite state machines, and cellular automata. Computational support for some of the material is available in the form of a Mathematica package.
Prerequisites: 15251

15-355 Modern Computer Algebra
Fall: 9 units
The goal of this course is to investigate the relationship between algebra and computation. The course is designed to expose students to algorithms used for symbolic computation, as well as to the concepts from modern algebra which are applied to the development of these algorithms. This course provides a hands-on introduction to many of the most important ideas used in symbolic mathematical computation, which involves solving system of polynomial equations (via Groebner bases), analytic integration, and solving linear difference equations. Throughout the course the computer algebra system Mathematica will be used for computation.
Prerequisites: 15251

15-359 Special Topic: Probability and Computing
Spring: 12 units
Probability theory has become indispensable in computer science. In areas such as artificial intelligence and computer science theory, probabilistic methods and ideas based on randomization are central. In other areas such as networks and systems, probability is becoming an increasingly useful framework for handling uncertainty and modeling the patterns of data that occur in complex systems. This course gives an introduction to probability as it is used in computer science theory and practice, drawing on applications and current research developments as motivation and context. Topics include combinatorial probability and random graphs, heavy tail distributions, concentration inequalities, various randomized algorithms, sampling random variables and computer simulation, and Markov chains and their many applications, from Web search engines to models of network protocols. The course will assume familiarity with basic calculus and linear algebra.
Prerequisites: 15211 and 15251

15-381 Artificial Intelligence: Representation and Problem Solving
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 search and problem solving methods are applicable throughout a large range of industrial, civil, medical, financial, robotic, and information systems. We will investigate questions about AI systems such as: how to represent knowledge, how to effectively generate appropriate sequences of actions and how to search among alternatives to find optimal or near-optimal solutions. We will also explore how to deal with uncertainty in the world, how to learn from experience, and how to learn decision rules from data. 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 how automated agents learn. We also expect students to acquire a strong appreciation of the big-picture aspects of developing fully autonomous intelligent agents. Other lectures will introduce additional aspects of AI, including natural language processing, web-based search engines, industrial applications, autonomous robotics, and economic/game-theoretic decision making.
Prerequisites: 15211

15-384 Robotic Manipulation
Fall: 12 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: (15111 or 15200) and (18202 or 21241 or 24311)

15-385 Computer Vision
Spring: 9 units
An introduction to the science and engineering of computer vision, i.e. the analysis of the patterns in visual images with the view to understanding the objects and processes in the world that generate them. Major topics include image formation and sensing, fourier analysis, edge and contour detection, inference of depth, shape and motion, classification, recognition, tracking, and active vision. The emphasis is on the learning of fundamental mathematical concepts and techniques and applying them to solve real vision problems. The discussion will also include comparison with human and animal vision from psychological and biological perspectives. Students will learn to think mathematically and develop skills in translating ideas and mathematical thoughts into programs to solve real vision problems.
Prerequisites: 15113 and (18202 or 21241)

15-386 Computational Neuroscience: Visual Computation in Biological Systems
Spring: 9 units
An introduction to the computational and system neuroscience of visual perception and object recognition. We will study how the brain processes visual information that enables us to see, from computational, psychological and neurobiological perspectives. Students will gain an in-depth understanding of the working of visual systems down to the neuronal level, and learn to apply computational thinking and tools to solve engineering puzzles underlying vision. The course is appropriate for computer science, engineering, physics, psychology and neuroscience students who have at least a course in computer programming, a course in linear algebra and differential equations or a course in probability and statistics. Counted as a core application elective for CS majors. 15-686 option requires additional weekly meeting to discuss current papers on visual computation.
Prerequisites: 15113 and (18202 or 21241)

15-391 Technology Consulting in the Community
Fall and Spring: 9 units
In this course, the student develops technical consulting and management skills while collaborating on site with a community leader of a non-profit community 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.
Prerequisites: 76101 and (15111 or 70451)

15-392 Special Topic: Secure Programming
Spring: 9 units
This course provides a detailed explanation of common programming errors in C and C++ and describes how these errors can lead to software systems that are vulnerable to exploitation. The course concentrates on security issues intrinsic to the C and C++ programming languages and associated libraries. It does not emphasize security issues involving interactions with external systems such as databases and web servers, as these are rich topics on their own. Topics to be covered include the secure and insecure use of integers, arrays, strings, dynamic memory, formatted input/output functions, and file I/O.
Prerequisites: 15213

15-410 Operating System Design and Implementation
Fall and Spring: 12 units
Operating System Design and Implementation is a rigorous hands-on introduction to the principles and practice of operating systems. The core experience is writing a small Unix-inspired OS kernel, in C with some x86 assembly language, which runs on a PC hardware simulator (and on actual PC hardware if you wish). Work is done in two-person teams, and team programming skills (source control, modularity, documentation) are emphasized. The size and scope of the programming assignments typically result in students significantly developing their design, implementation, and debugging abilities. Core concepts include the process model, virtual memory, threads, synchronization, and deadlock; the course also surveys higher-level OS topics including file systems, interprocess communication, networking, and security. (Graduate) students who have not satisfied the prerequisite at Carnegie Mellon are strongly cautioned - to enter the class you must be able to write a storage allocator in C, use a debugger, understand 2's-complement arithmetic, and translate between C and x86 assembly language. The instructor may require you to complete a skills assessment exercise before the first week of the semester in order to remain registered in the class.
Prerequisites: 15213 or 15310

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 type-checking, context analysis, code generation and optimization, and memory management and run-time organization.
Prerequisites: 15213 or 15312

15-412 Operating System Practicum
Fall: 9,12 units
The goal of this class is for students to acquire hands-on experience with operating-system code as it is developed and deployed in the real world. Groups of two to four students will select, build, install, and become familiar with an open-source operating system project; propose a significant extension or upgrade to that project; and develop a production-quality implementation meeting the coding standards of that project. Unless infeasible, the results will be submitted to the project for inclusion in the code base. Variations on this theme are possible at the discretion of the instructor. For example, it may be possible to work within the context of a non-operating-system software infrastructure project (window system, web server, or embedded network device kernel) or to extend a 15-410 student kernel. In some situations students may work alone. Group membership and unit count (9 units versus 12) will be decided by the third week of the semester. Contributing to a real-world project will involve engaging in some mixture of messy, potentially open-ended activities such as: learning a revision control system, writing a short design document, creating and updating a simple project plan, participating in an informal code review, synthesizing scattered information about hardware and software, classifying and/or reading large amounts of code written by various people over a long period of time, etc.
Prerequisites: 15410

15-414 Bug Catching: Automated Program Verification and Testing
Fall: 9 units
Many CS and ECE students will be developing software and hardware that must be ultra reliable at some point in their careers. Logical errors in such designs can be costly, even life threatening. There have already been a number of well publicized errors like the Intel Pentium floating point error and the Arian 5 crash. In this course we will study tools for finding and preventing logical errors. Three types of tools will be studied: automated theorem proving, state exploration techniques like model checking and tools based on static program analysis. Although students will learn the theoretical basis for such tools, the emphasis will be on actually using them on real examples. This course can be used to satisfy the Fundamentals of Algorithms requirement for the Computer Science major.
Prerequisites: 15211 and 15251

15-415 Database Applications
Fall and Spring: 12 units
This course covers the fundamental topics for Database Management Systems: Database System Architectural Principles (ACID properties; 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), Query Processing (execution of sort, join, and aggregation operators), and Transaction Processing (recovery and concurrency control).
Prerequisites: 15211 and 15213

15-418 Parallel Computer Architecture and Programming
Spring: 12 units
The fundamental principles and engineering tradeoffs involved in designing modern parallel computers, as well as the programming techniques to effectively utilize these machines. Topics include naming shared data, synchronizing threads, and the latency and bandwidth associated with communication. Case studies on shared-memory, message-passing, data-parallel and dataflow machines will be used to illustrate these techniques and tradeoffs. Programming assignments will be performed on one or more commercial multiprocessors, and there will be a significant course project.
Prerequisites: 15213 or 18347

15-421 Web Commerce, Security and Privacy
Fall: 12 units
Course Objective: The objective of this course is to introduce students to the technologies of Web Commerce, Security and Privacy as well as to related business, policy and usability issues. Content: Over the past ten years, the Web has become an integral part of our daily life, whether at home or at work. This course provides students with an overview of the technologies and practices associated with Web Security, Privacy and Commerce. The course is organized around three parts: Part I - Web Security & Privacy Technologies The big picture, gentle introduction to cryptography, digital signatures, key management, authentication, Internet security protocols, certificates & PKI, decentralized trust management, privacy enhancing technologies, electronic payments Part II - Ethical, Social and Political Issues Sample Topics: Privacy (e.g. FTC FIP, EU Data Protection Directive), Digital Millenium Copyright Act, Internet Governance and Domain Names (ICANN), legal framework for web commerce, etc. (Note : a number of related issues are also addressed in Part I and III). Part III - Web Commerce The big picture, Internet marketing & personalization, search engines, B2B and electronic markets, P2P, Web 2.0, Mobile Commerce. Format: Lectures (including guest lectures), discussions, student presentations, and class projects.
Prerequisites: 15211

15-437 Web Application Development
Spring: 12 units
This course will introduce concepts in programming web application servers. We will study of the fundamental architectural elements of programming web sites that produce content dynamically. The primary technology introduced will be Java Servlets and Java Server Pages (JSPs), but we will also cover the related topics as necessary so that students may build significant applications. Such topics include: HTTP, HTML, XML, JavaBeans, Design Patterns (Abstract Factories, MVC), Tag Libraries (JSTL), Databases (MySQL/JDBC), Object-Relation Mapping (ORM), Security (SSL), Web Services (SOAP/WSDL/UDDI), Frameworks (Struts), and Internationalization. Several tools and software packages will be demonstrated. More information on assignments is posted on the Related URL above. This course is recommended for student contemplating enrollment in 15-413 (the Software Engineering Project). Notes: Students are required to provide their own computer hardware for this course. Hardware requirements are posted on the Related URL above. This course has several cross listings: *Two 12 unit listings run for the full semester: 15-437/15-637. This full semester course includes a project component that is the primary focus of the second half. Undergraduate students register for 15-437. Masters students register for 15-637. *Two 6 unit listings run only for Mini 3: 46-864/08-764. This half semester course consists of lectures, homework, and a final exam (but no project). Students in the Tepper's Technology Leadership Program register for 46-864. Students from other programs may register for 08-764. Note that 08-764 used to be listed as 17-660. Students that have previously taken and passed 15-437, 15-637 or 17-660 may not register for another of this semester's three web app classes (15-437, 15-637, or 08-764) without instructor permission (unlikely to be given).
Prerequisites: 15211

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: 15213 or 15310

15-451 Algorithm Design and Analysis
Fall and Spring: 12 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: 15211 and 15251

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: 15211 and 15251

15-462 Computer Graphics
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, shading, and ray tracing.
Prerequisites: (15213 and 21241 and 21259) or (15213 and 18202)

15-463 Computational Photography
Fall: 12 units
Computational Photography is an emerging new field created by the convergence of computer graphics, computer vision and photography. Its role is to overcome the limitations of the traditional camera by using computational techniques to produce a richer, more vivid, perhaps more perceptually meaningful representation of our visual world. The aim of this advanced undergraduate course is to study ways in which samples from the real world (images and video) can be used to generate compelling computer graphics imagery. We will learn how to acquire, represent, and render scenes from digitized photographs. Several popular image-based algorithms will be presented, with an emphasis on using these techniques to build practical systems. This hands-on emphasis will be reflected in the programming assignments, in which students will have the opportunity to acquire their own images of indoor and outdoor scenes and develop the image analysis and synthesis tools needed to render and view the scenes on the computer.
Prerequisites: (15213 and 21241 and 21259) or (15213 and 18202)

15-464 Technical Animation
Fall: 12 units
This course introduces techniques for computer animation such as keyframing, procedural methods, motion capture, and simulation. The course also includes a brief overview of story-boarding, scene composition, lighting and sound track generation. The second half of the course will explore current research topics in computer animation such as dynamic simulation of flexible and rigid objects,automatically generated control systems, and evolution of behaviors. The course should be appropriate for graduate students in all areas and for advanced undergraduates.
Prerequisites: 15462

15-465 Animation Art and Technology
Spring: 12 units
Animation Art and Technology is an interdisciplinary course cross-listed between Art and Computer Science. Faculty and teaching assistants from computer science and art teach the class as a team. It is a project-based course in which four to five interdisciplinary teams of students produce animations. Most of the animations have a substantive technical component and the students are challenged to consider innovation with content to be equal with the technical. The class includes basic tutorials for work in Maya leading toward more advanced applications and extensions of the software such as motion capture and algorithms for animating cloth, hair, particles, and grouping behaviors. The first class will meet in CFA room 303.
Prerequisites: 15462

15-466 Computer Game Programming
Spring: 12 units
This course will cover tools and techniques for programming interactive games and virtual reality simulations. The course will focus primarily on programming aspects, including event loops and execution threads, graphics and animation in 2D and 3D, terrain/background representation, collision detection and physically-based modeling, game AI, and multi-user games and networking. Although this course has a heavy programming focus, other topics briefly covered will include the history of computer/video game technology, game genres and design principles, and the social impact of games. Students will design and program their own games or virtual reality simulations as individual class projects using OpenGL and other standard APIs commonly used in game programming.
Prerequisites: 15462

15-482 Human Language Technologies
Fall: 12 units
During the last decade computers have begun to understand human languages. Web search engines, language analysis programs, machine translation systems, speech recognition, and speech synthesis are used every day by tens of millions of people in a wide range of situations and applications. This course covers the fundamental statistical and symbolic algorithms that enable computers to work with human language, from text processing to understanding speech and language. It provides detailed coverage of current techniques, their successes, their limitations, and current research directions. Homework assignments give hands-on experience with four different language technologies, using Internet Movie Database (IMDB) data. Students write programs that answer questions about movies using information obtained from a search engine or a structured database, automatically select good translations of French movie titles, and read movie information in computer-generated voices that sound as natural as possible.
Prerequisites: 15211

15-485 Computational Perception
Intermittent: 9 units
The goal of this course is to teach how to reason scientifically about problems and issues in perceptual cognition, how to extract the essential computational properties of those abstract ideas, and finally how to convert these into explicit mathematical models and computational algorithms. The course teaches advanced aspects of perception, scene analysis, and recognition in both the visual and auditory modalities, concentrating on those aspects that allow us and animals to behave in natural, complex environments. Both the experimental approaches of scientific disciplines and the computational approaches of engineering disciplines are emphasized. Each topic in the course begins by studying the ethology of natural behaviors, analyzing and decomposing these to identify the essential components that are required for the total behavior in a natural environment. This aspect of the course follows the lines of scientific reasoning and key experiemental results that lead to our current understanding of the important computational problems in perception and scene analysis. The course then surveys the most important solutions to these problems, focusing on the idealizations and simplifications that are sensory coding, perceptual invariance, spatial vision and sound localization, visual and auditory scene segmentation, many aspects of attention, and the basics of objects and speech recognition.
Prerequisites: 15385 or 85370

15-490 Special Topic: Computational Neuroscience
Intermittent: 9 units
An introduction to computational neuroscience, i.e. the application of computational and mathematical concepts and techniques to the study of the brain. Students will learn the fundamentals of signals and systems, pattern analysis, probability theory and information theories and apply these techniques to study how the real nervous systems compute, communicate and learn at many levels, from synapses to neurons, from neuronal populations to systems. Topics include basic anatomy and physiology of neurons and the mammalian nervous systems, biophysics of single neurons, excitable membranes and cable equation, encoding and decoding of information in single neurons and neuronal ensembles, neural adaptation and learning, signal detection and reconstruction, distributed and hierarchical computations. Concrete examples will be drawn from visual and motor systems and studied from both biological and computational perspectives. Students will do a number of Matlab programming and mathematical exercises to consolidate their learning, participate in the analysis of real neuronal data. No prior background in biology is assumed. A graduate option of the course is offered concurrently to graduate students from all disciplines in science and engineering, including psychology and computational biology.
Prerequisites: 15113 and (18202 or 21241)

15-519 Independent Study in Programming Systems
Fall and Spring: 3-36 units

15-529 Independent Study in Human-Computer Interaction
Fall and Spring: 3-36 units

15-539 Independent Study in Computer Science Pedagogy
Fall and Spring: 3-18 units

15-549 Independent Study in Computer Systems
Fall and Spring: 3-18 units

15-559 Independent Study in Theoretical Computer Science
Fall and Spring: 3-36 units

15-569 Independent Study in Graphics
Fall and Spring: 3-36 units

15-579 Independent Study in Robotics
Fall and Spring: 3-18 units

15-589 Independent Study in Artificial Intelligence
Fall and Spring: 3-36 units

15-599 Undergraduate Thesis Research
Fall and Spring: 0-18 units
Available only to students registered in the CS Senior Research Thesis Program. More information is available at the CS Undergraduate Office.