引言
《计算机程序的构造与解释》(Structure and Interpretation of Computer Programs,简称 SICP)一直被誉为计算机科学的经典教材。不少计算机专业的学生会在学习生涯中接触到这本书,尤其是对编程有深入兴趣的读者更是如此。我最近开始了使用 Python 版本的 SICP,也就是 UC Berkeley 的 CS61A 课程的学习。经过几天的学习,我逐渐意识到,这本书的核心在于对 抽象(Abstraction) 概念的理解与应用 ( 就是在玩抽象啊! )。
学习 SICP 的感受
在学习过程中,我采用了边看视频、边写笔记的方式。然而,随着学习的深入,我开始感觉有些疲惫。今天是第 3 天,看视频和记笔记的方式让我感到有些耗费精力,因此,我准备尝试转换方法:通过阅读中文版的书,动手跑一跑重要的概念和代码示例,来加深理解。这样可以帮助我更快速地掌握 SICP 的核心思想。
那么,学习 SICP 到底在学什么?
学习 SICP,不仅仅是在学编程技巧或某个具体的编程语言,而是在学习 抽象(Abstraction) 。SICP 从函数式编程的角度出发,通过构造程序模型,逐步引导读者深入理解抽象在编程中的重要性。可以说,整个课程都是围绕抽象来展开的。从数据抽象、过程抽象到控制抽象,SICP 给出了很多具体的工具和方法,让我们能更好地构建出优雅、模块化的程序。
SICP 的核心概念:抽象
-
数据抽象:通过抽象,可以屏蔽底层数据的具体实现,让我们只需要关心数据的“是什么”而非“如何实现”。这种思想体现在抽象数据类型的设计中,例如,通过抽象,你可以把列表视为“序列”,而不必纠结于它的内部存储细节。
-
过程抽象:这是 SICP 的另一个核心。在过程抽象中,我们不仅仅是编写函数来完成任务,更是把整个问题抽象成一系列的过程,每个过程都有清晰的输入输出关系。这样的设计不仅让代码更容易理解,还让代码更具可重用性。
-
控制抽象:SICP 还通过高阶函数、递归、组合器等手段,让我们学会抽象控制流程。这种方式大大增强了表达能力,使得我们能够用少量的代码描述复杂的行为。
如何继续学习 SICP
对于像我这样刚接触 SICP 不久的人来说,学习的过程中难免会遇到困难。除了保持耐心以外,我建议转换一下学习方法,不要让自己陷入繁复的细节中。可以选择重点概念和例子,动手实践,把每个概念真正理解透彻。
总结
学习 SICP 的过程就是一场抽象的探索之旅。抽象不仅帮助我们简化复杂问题,也让我们以更高的层次思考编程的本质。
对于每一位计算机科学爱好者来说,SICP 都值得投入时间去学习和思考。它不仅传授了编程技巧,更传递了如何用抽象的思维去解决复杂问题的能力。
What’s Next?
我的 SICP 仓库还没有更完~
更新于:2024年2月20日