Read this =>  Structure and Interpretation of Computer Programs