The Structure and Interpretation of Computer Programs (CS61A) // Introduction to programming and computer science. This course exposes students to techniques of abstraction at several levels: (a) within a programming language, using higher-order functions, manifest types, data-directed programming, and message-passing; (b) between programming languages, using functional and rule-based languages as examples. It also relates these techniques to the practical problems of implementation of languages and algorithms on a von Neumann machine. There are several significant programming projects.
Data Structures (CS61B) // Fundamental dynamic data structures, including linear lists, queues, trees, and other linked structures; arrays strings, and hash tables. Storage management. Elementary principles of software engineering. Abstract data types. Algorithms for sorting and searching. Introduction to the Java programming language.
Designing Information Devices and Systems I (EE16A) // This course and its follow-on course EE16B focus on the fundamentals of designing modern information devices and systems that interface with the real world. Together, this course sequence provides a comprehensive foundation for core EECS topics in signal processing, learning, control, and circuit design while introducing key linear-algebraic concepts motivated by application contexts. Modeling is emphasized in a way that deepens mathematical maturity, and in both labs and homework, students will engage computationally, physically, and visually with the concepts being introduced in addition to traditional paper/pencil exercises. The courses are aimed at entering students as well as non-majors seeking a broad foundation for the field.
Discrete Mathematics and Probability Theory (CS70) // Logic, infinity, and induction; applications include undecidability and stable marriage problem. Modular arithmetic and GCDs; applications include primality testing and cryptography. Polynomials; examples include error correcting codes and interpolation. Probability including sample spaces, independence, random variables, law of large numbers; examples include load balancing, existence arguments, Bayesian inference.
Designing Information Devices and Systems II (EE16B) // This course is a follow-on to Electrical Engineering 16A, and focuses on the fundamentals of designing and building modern information devices and systems that interface with the real world. The course sequence provides a comprehensive introduction to core EECS topics in circuit design, signals, and systems in an application-driven context.
C++ for Programmers (CS9F) // Self-paced introduction to the constructs provided in the C++ programming language for procedural and object-oriented programming, aimed at students who already know how to program.
Prototyping & Fabrication (DES INV 22) // This course teaches concepts, skills and methods required to design, prototype, and fabricate physical objects. Each week relevant techniques in 2D and 3D modeling and fabrication are presented along with basic electronics and circuit design. Projects are assigned that cover the weekly course material. Topics include a range of prototyping and fabrication techniques including laser-cutting, 3D modeling and 3D printing, soldering, basic circuits, microcontrollers (Arduino), sensors and actuators, and interface mockups.
Efficient Algorithms and Intractable Problems (CS170) // Concept and basic techniques in the design and analysis of algorithms; models of computation; lower bounds; algorithms for optimum search trees, balanced trees and UNION-FIND algorithms; numerical and algebraic algorithms; combinatorial algorithms. Turing machines, how to count steps, deterministic and nondeterministic Turing machines, NP-completeness. Unsolvable and intractable problems.
Artificial Intelligence (CS188) // Ideas and techniques underlying the design of intelligent computer systems. Topics include search, game playing, knowledge representation, inference, planning, reasoning under uncertainty, machine learning, robotics, perception, and language understanding.
Machine Structures (CS61C) // The internal organization and operation of digital computers. Machine architecture, support for high-level languages (logic, arithmetic, instruction sequencing) and operating systems (I/O, interrupts, memory management, process switching). Elements of computer logic design. Tradeoffs involved in fundamental architectural design decisions.
Physics for Scientists and Engineers (PHYSICS 7B) // Heat, electricity, and magnetism.
Machine Learning (CS189) // Theoretical foundations, algorithms, methodologies, and applications for machine learning. Topics may include supervised methods for regression and classication (linear models, trees, neural networks, ensemble methods, instance-based methods); generative and discriminative probabilistic models; Bayesian parametric learning; density estimation and clustering; Bayesian networks; time series models; dimensionality reduction; programming projects covering a variety of real-world applications.
Introduction to Robotics (EECS C106A) // An introduction to the kinematics, dynamics, and control of robot manipulators, robotic vision, and sensing. The course covers forward and inverse kinematics of serial chain manipulators, the manipulator Jacobian, force relations, dynamics, and control. It presents elementary principles on proximity, tactile, and force sensing, vision sensors, camera calibration, stereo construction, and motion detection. The course concludes with current applications of robotics in active perception, medical robotics, and other areas.
Introduction to the Internet (CS168) // This course is an introduction to the Internet architecture. We will focus on the concepts and fundamental design principles that have contributed to the Internet’s scalability and robustness and survey the various protocols and algorithms used within this architecture. Topics include layering, addressing, intradomain routing, interdomain routing, reliable delivery, congestion control, and the core protocols (e.g., TCP, UDP, IP, DNS, and HTTP) and network technologies (e.g., Ethernet, wireless).
The Social Life of Computing (ISF 100J) // In this class, we will look at computing as a social phenomenon: to see it not just as a technology that transforms but to see it as a technology that has evolved, and is being put to use, in very particular ways, by particular groups of people. We will be doing this by employing a variety of methods, primarily historical and ethnographic, oriented around a study of practices. We will pay attention to technical details but ground these technical details in social organization (a term whose meaning should become clearer and clearer as the class progresses). We will study the social organization of computing around different kinds of hardware, software, ideologies, and ideas.
Computer Vision (CS280) // Paradigms for computational vision. Relation to human visual perception. Mathematical techniques for representing and reasoning, with curves, surfaces and volumes. Illumination and reflectance models. Color perception. Image segmentation and aggregation. Methods for bottom-up three dimensional shape recovery: Line drawing analysis, stereo, shading, motion, texture. Use of object models for prediction and recognition.
Computer Security (CS161) // Introduction to computer security. Cryptography, including encryption, authentication, hash functions, cryptographic protocols, and applications. Operating system security, access control. Network security, firewalls, viruses, and worms. Software security, defensive programming, and language-based security. Case studies from real-world systems.
Designing, Visualizing and Understanding Deep Neural Networks (CS194-129) // Design principles and best practices: design motifs that work well in particular domains, structure optimization and parameter optimization. Visualizing deep networks. Exploring the training and use of deep networks with visualization tools. Understanding deep networks. Methods with formal guarantees: generative and adversarial models, tensor factorization.
Operating Systems (CS162) // Basic concepts of operating systems and system programming. Utility programs, subsystems, multiple-program systems. Processes, interprocess communication, and synchronization. Memory allocation, segmentation, paging. Loading and linking, libraries. Resource allocation, scheduling, performance evaluation. File systems, storage devices, I/O systems. Protection, security, and privacy.