Structure and Interpretation of Computer Programs JavaScript Edition by Harold Abelson