I reread one of my favorite textbook, structure and interpretation of computer programs (SICP), recently. I would like to summarize some insights I got from the book to investigate some understandings with my previous experience . So the content would be some personal random notes and not for everyone. :-) Here comes some from chapter 1, Building Abstractions with Procedures. * Why using the a non-mainsteam programming language? Because Scheme has very simple syntax and flexible semantics to implement broad range of applications easily, that's so important for a computer science student to know the main ideas by constructing infrastructures so that they won't get lost among the fancy features coming up everyday. I think this is useful especially when programmers get mature. They will find out that language features are not so important. The important thing is to deeply understand the ideas behind the complex components. If we can construct toy examples, that will be huge