SICP就是著名的《计算机程序的结构与解释》。本文罗列若干网络资料,给出一些学习建议。并呼吁大学新生尽快进入SICP的学习。尽快寻找编程的乐趣!“This book is dedicated, in respect and admiration, to the spirit that lives in the computer.”
致敬
SICP的“献词”说得非常好,首先看看AJ Perlis怎么说。
(在计算机科学的领域中)不要失去对兴趣的识别力。
我们不需要成为传教士,不要总把自己当成圣经的售卖者......
不要以为成功的钥匙只掌握在你自己的手中,我希望,你手中只掌握着智慧.....
``I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don't become missionaries. Don't feel as if you're Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don't feel as if the key to successful computing is only in your hands. What's in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.''
--Alan J. Perlis (April 1, 1922-February 7, 1990)
看来,需要反省的首先是我。不是说我严重地犯了以上错误,而是说,这三个方面我做得还不够好。
谁应该学习SICP?
计算机专业大一新生,或者任何需要训练计算机程序思维的人士。推荐一篇Review,也许有所帮助。
再加一句:也许所有的电子工程师都适合阅读SICP。
为什么学习SICP?
训练程序思维,锻炼程序设计能力。为程序设计语言理论的进一步学习奠定基础。
如果你看了这段话就思考,“什么是程序思维”,“什么是程序设计能力”,请停止思考,请去阅读。阅读、做题、阅读、做题......
学习SICP需要多少时间?
有人用了20天,有人用了五个月,有的人一辈子都没看完。对初学者而言,第一遍看完,估计需要连续的一个月。然后,需要花比较长的完成所有练习,这个比较难估算,建议大家可以定一个一年计划。
如何开始?
建议如下:
首先,需要做好计划,争取联系的时间发起攻击。要快,要狠,要准。
其次,建议在阅读之前准备好Scheme的编程环境,边阅读边练习,通过练习来加深(或帮助)理解。
第三,首次阅读,碰到不懂的题目可以跳过,保持阅读的稳步持续进展。
第四,SICP有中文翻译版,我不能说它的翻译有什么不好,但是我必须强调且建议,看英文原版!如何阅读英文教材?
关于SICP的若干讨论
关于对SICP的评价看了很多,有奉为圣经的,有贬损的,有不以为然的,各种不同意见。个人意见是,读懂这些评价,不如花时间去读懂SICP。
2、如何看待Berkeley开设的CS61A:SICP in Python课程?
3、二十天刷SICP
为什么(我说)SICP-Py不能取代SICP
目前,MIT已经使用python来教sicp,然而,我看的网络上的教材sicp-python并不能取代sicp。理由如下:
1、sicp-python太依赖python的特性,而sicp对scheme的依赖非常少;
2、sicp-python用python讲解计算模型显得很牵强,而sicp就很自然;
3、sicp-python的例子选用只是摘取了sicp的内容,体现不出一种教学整体性;
4、sicp的习题完胜sicp-python!sicp-python竟然没习题!
毕竟,使用Python进行教学是一回事,而出现一本经典教材又是另一回事。总之,sicp的整体性、思想性、教学特性应该完胜sicp-python。
资料
书中附带的代码:Codes for SICP
电子书的英文版 SICP
推荐使用的Scheme版本Racket-SICP
小结
程序设计的学习需要一个比较长时间的积累与沉淀,不是一门课、一本书可以解决战斗的事情。SICP是众多教材当中比较适合入门的一本:难易度适中,理论性与实践性俱佳,且具有自包含的属性。
在经历了2017年寒假的CLRS与暑假的CSAPP之后,小明的女朋友终于无法忍受,与小明分手了..... 在这个非标准假设的前提下,小明非常痛苦地来找我:“寒假又要来了,老师,我怎么样能找回我的女朋友?” 我很坚决地对他说:“你需要规划!” “怎么说?什么是规划?如何规划?” “要解决这些问题,你需要这个!SICP!” 于是,小明很开心地蹦蹦跳跳着学习去了......多么快乐的一个寒假啊!