CIS 61 — Structure and Interpretation of Computer Programs
Problem-solving approach to computer programming: Emphasis on design and implementation of functions, representation of abstract forms of data, and effects of different programming methods on software development.