UCB-CS61A: The Structure and Interpretation of Computer Programs, Fall 2013
The CS 61 series is an introduction to computer science, with particular emphasis on software and on machines from a programmer's point of view. This first course concentrates mostly on the idea of abstraction, allowing the programmer to think in terms appropriate to the problem rather than in low-level operations dictated by the computer hardware. The next course, CS 61B, will deal with the more advanced engineering aspects of software, such as constructing and analyzing large programs. Finally, CS 61C concentrates on machines and how they carry out the programs you write.
In CS 61A, we are interested in teaching you about programming, not about how to use one particular programming language. We consider a series of techniques for controlling program complexity, such as functional programming, data abstraction, and object-oriented programming. Mastery of a particular programming language is a very useful side effect of studying these general techniques. However, our hope is that once you have learned the essence of programming, you will find that picking up a new programming language is but a few days' work.
There is also a self-paced version of this course, 61AS, which fulfills the same requirements.
61A uses the Python 3 programming language. Python is a popular language in both industry and academia. It is also particularly well-suited to the task of exploring the topics taught in this course. It is an open-source language developed by a large volunteer community that prides itself on the diversity of its contributors.
In previous semesters, this course was taught using the Scheme language, a dialect of Lisp, which is the oldest programming language that is still recruiting new users today. Lisp and Python are similar in many ways. In fact, Lisp popularized many of the features that make Python a great language. Our choice to change languages is primarily motivated by the strength of Python's programming community, which you will soon join as you learn the language. Python also has excellent library support for a vast range of application areas. Knowing Python will help you pursue your future programming interests, wherever they may lead you.
Math 1A is a corequisite for 61A. (That is, it may be taken concurrently.)
There is no formal programming-related prerequisites for admission to 61A. However, most 61A students have had significant prior programming experience. There is no need for you to be familiar with any particular programming language. If you have taken the CS Advanced Placement AB course in C++ or Java, you are certainly ready for 61A.
If you don't feel ready for 61A, we recommend that you take CS 10 : The Beauty and Joy of Computing, which is an introduction to computer science for non-majors (and majors needing more programming experience). The course will teach students how to program using BYOB (based on Scratch), one of the friendliest programming languages ever invented. It's purely graphical, which means programming involves simply dragging blocks around, and building bigger blocks out of smaller blocks. But the course is far more than just learning to program! You'll learn some of the "Big Ideas" of computing, such as abstraction, design, recursion, concurrency, simulations, and the limits of computation. You'll also see some beautiful applications of computing that have changed the world, as well as talk about the history of computing and where it will go in the future.
Non-technical students (for instance, ones who prefer Math 16A to Math 1A) should probably avoid CS 61A entirely, and should take CS 10 to satisfy their need for or interest in a programming course.
If you are not strongly interested in computer programming at all, but instead want to learn how to use computers as a tool, you should consider IDS 110, a course that presents a variety of personal computer software along with a brief introduction to programming.
If you have substantial prior programming background, you may feel that you can skip 61A. In most cases we don't recommend that. Although 61A is the first course in the CS sequence, it's quite different from most introductory courses. You won't be bored in 61A. Perhaps your prior experience will allow you to skip 61B or 61C, which are more comparable to courses taught elsewhere.
There is no required textbook for this course. Our primary text will be a series of lecture notes based on the classic book, Structure and Interpretation of Computer Programs, which has been the textbook for 61A for many years. Lecture notes will be posted to the course website.
|Lecture 4||Higher-Order Functions|
|Lecture 6||Newton's Method|
|Lecture 8||Tree Recursion|
|Lecture 9||Function Examples|
|Lecture 10||Data Abstraction|
|Lecture 12||Lists and Dictionaries|
|Lecture 13||Strings and Sequence Processing|
|Lecture 14||Mutable Data|
|Lecture 17||Recursive Objects|
|Lecture 18||Orders of growth|
|Lecture 20||Multiple Representations|
|Lecture 21||Generic Functions|
|Lecture 22||Data Examples|
|Lecture 23||Functional Programming|
|Lecture 27||Tail Calls|
|Lecture 28||User Interfaces|
|Lecture 31||Declarative Programming|
|Lecture 33||Distributed Computing|
|Lecture 35||Natural Language Processing|