Courses

- 1010 Understanding Computers and the Internet
- 1030 Exposing Digital Photography
- 1050 Introduction to Computer Science and Programming
- 1110 Programming Methodology
- 1116 The Structure and Interpretation of Computer Programs
- 1120 Introduction to Algorithms
- 1130 Programming Abstractions
- 1135 Data Structures
- 1140 Machine Structures
- 2210 Introduction to Robotics
- 3110 Computer Graphics
- 3210 Programming Paradigms
- 4110 Machine Learning
- 4210 Principles of Digital Communications I
- 4220 Principles of Digital Communications II
- 9000 Seminars on IT

## Information Technology

**1010. Understanding Computers and the Internet**

This course is all about understanding: understanding what's going on inside your computer when you flip on the switch, why tech support has you constantly rebooting your computer, how everything you do on the Internet can be watched by others, and how your computer can become infected with a worm just by being turned on. Designed for students who use computers and the Internet every day but don't fully understand how it all works, this course fills in the gaps. Through lectures on hardware, software, the Internet, multimedia, security, privacy, website development, programming, and more, this course "takes the hood off" of computers and the Internet so that students understand how it all works and why. Through discussions of current events, students are exposed also to the latest technologies.

(David J. Malan, Dan Armendariz, Dan Armendariz and David J. Malan of Harvard University)

**1030. Exposing Digital Photography**

Photography has exploded in recent years as digital cameras have become affordable and easier to use. There are many courses that teach students the artistic aspect of "how to become a better photographer" or "how to improve your eye," but this is not one of them. Instead, students - from one-time users to professionals - become better photographers through an understanding of the technical aspects and terms of a digital camera.
Learn why photos look blurry at night, why color management is important, what the difference between sports mode and portrait mode on the camera's dial is, and how to manipulate the camera without the need of these modes in the first place.

(Dan Armendariz, Dan Armendariz of Harvard University.)

**1050. Introduction to Computer Science and Programming**

This subject is aimed at students with little or no programming experience. It aims to provide students with an understanding of the role computation can play in solving problems. It also aims to help students, regardless of their major, to feel justifiably confident of their ability to write small programs that allow them to accomplish useful goals. The class will use the Python programming language. (The course include a full set of video lectures).

(Prof. Eric Grimson, Prof. John Guttag, Massachusetts Institute of Technology: MIT OpenCourseWare)

**1110. Programming Methodology**

This course is the largest of the introductory programming courses and is one of the largest courses at Stanford. Topics focus on the introduction to the engineering of computer applications emphasizing modern software engineering principles: object-oriented design, decomposition, encapsulation, abstraction, and testing. The course is taught by Mehran Sahami who is Associate Professor (Teaching) of Computer Science in the Computer Science Department in Stanford.

(Mehran Sahami, Stanford University: Stanford Engineering Everywhere)

**1116. The Structure and Interpretation of Computer Programs**

This course provides an introduction to programming and computer science. It is taught using Scheme, a dialect of the LISP programming language. It is based on the book *Structure and Interpretation of Computer Programs* by Abelson, Sussman, and Sussman. An online version of book is available here. The course is taught by Brian Harvey, Computer Science Division, University of California at Berkeley.

(Brian Harvey, University of California, Berkeley: Webcast.Berkeley)

**1120. Introduction to Algorithms**

This course is taught at MIT by Prof. Erik Demaine and Prof. Charles Leiserson. Prof. Leiserson co-authored the textbook for the course *Introduction to Algorithms, Second Edition*. This course teaches techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing. A full set of lecture notes is available together with this course.

(Prof. Erik Demaine, Prof. Charles Leiserson, Massachusetts Institute of Technology: MIT OpenCourseWare)

**1130. Programming Abstractions**

This course covers such advanced programming topics as recursion, algorithmic analysis, and data abstraction using the C++ programming language, which is similar to both C and Java. Programming Abstractions assumes that you already have familiarity with good programming style and software engineering issues (at the level of Programming Methodology), and that you can use this understanding as a foundation on which to tackle new topics in programming and data abstraction. The lecturer for this course is Julie Zelenski.

(Julie Zelenski, Stanford University: Stanford Engineering Everywhere)

**1135. Data Structures**

This course is taught by Prof. Paul Hilfinger in University of California, Berkeley. It covers 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. The course includes an introduction to the Java programming language. A good set of lecture notes is available for this course.

(Prof. Paul Hilfinger, University of California, Berkeley: Webcast.Berkeley)

**1140. Machine Structures**

This course covers the internal organization and operation of digital computers. Topics include 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. The course is taught by a dynamic lecturer Dan Garcia who managed to make a relatively dry subject very interesting. A good set of lecture notes is available.

(Dan Garcia, University of California, Berkeley: Webcast.Berkeley)

**2210. Introduction to Robotics**

This is a very interesting course on robotics taught by Prof. Oussama Khatib in Stanford. The purpose of this course is to introduce you to basics of modeling, design, planning, and control of robot systems. In essence, the material treated in this course is a brief survey of relevant results from geometry, kinematics, statics, dynamics, and control. Topics include robotics foundations in kinematics, dynamics, control, motion planning, trajectory generation, programming and design.

(Prof. Oussama Khatib, Winter 2007/2008, Stanford University: Stanford Engineering Everywhere)

**3110. Computer Graphics**

This course is an introduction to computer graphics hardware, algorithms, and software. Its primary goal is to introduce many important data structures and algorithms that are useful for presenting data visually on a computer and to provide you with sufficient background to write computer graphics applications.

(Prof. Frédo Durand, Prof. Barbara Cutler, Massachusetts Institute of Technology: MIT OpenCourseWare)

**3210. Programming Paradigms**

This course covers advanced memory management features of C and C++; the differences between imperative and object-oriented paradigms. The functional paradigm (using LISP) and concurrent programming (using C and C++). There will also be brief surveys of other modern languages such as Python, Objective C, and C#.

(Prof. Jerry Cain, Stanford University: Stanford Engineering Everywhere)

**4110. Machine Learning**

This course in Artificial Intelligence provides a broad introduction to machine learning and statistical pattern recognition and will cover recent applications of machine learning, such as to robotic control, data mining, autonomous navigation, bioinformatics, speech recognition, and text and web data processing. Students are expected to have the following background: Knowledge of basic computer science principles and skills, at a level sufficient to write a reasonably non-trivial computer program; Familiarity with the basic probability theory; Familiarity with the basic linear algebra.

(Prof. Andrew Ng, Stanford University: Stanford Engineering Everywhere)

**4210. Principles of Digital Communications I**

This course is a graduate level introduction to the basic principles of digital communication systems. A digital communication system is one that transmits a source (voice, video, data, etc.) from one point to another, by first converting it into a stream of bits, and then into symbols that can be transmitted over channels (cable, wireless, storage, etc.). The use of the digital bit-stream as the interface between the source and the channel is universal regardless of what kind of source and channel are involved. Digital communication principle, with "bit" as the most important concept of the information age, and applications in computer science, Internet, wireless, etc., is one of the most successful stories of applying mathematics in engineering designs.

(Prof. Robert Gallager, Prof. Lizhong Zheng, Massachusetts Institute of Technology: MIT OpenCourseWare)

**4220. Principles of Digital Communications II**

This course is the second of a two-term sequence with *Principles of Digital Communications I*. The focus is on coding techniques for approaching the Shannon limit of additive white Gaussian noise (AWGN) channels, their performance analysis, and design principles. After a review of 6.450 and the Shannon limit for AWGN channels, the course begins by discussing small signal constellations, performance analysis and coding gain, and hard-decision and soft-decision decoding. It continues with binary linear block codes, Reed-Muller codes, finite fields, Reed-Solomon and BCH codes, binary linear convolutional codes, and the Viterbi algorithm.

(Prof. David Forney, Massachusetts Institute of Technology: MIT OpenCourseWare)

**9000. Seminars on IT**

A collection of interesting seminars, presentations and lectures from various institutions.