Structure and Interpretation of Computer Programs (SICP) course at UC Berkeley.