为什么要读《SICP》-- 专栏导引
自古学习先了解和接触产生兴趣进行练习和付出收获反馈提炼总结输出。适合哪些读者如果刚刚接触编程那么这本书可能不适合你不管你现在主要使用的是那一门编程语言都不影响阅读。因为sicp的魔法它介绍编程的时候是非语言绑定的“我需要判断逻辑需要谓词然后介绍语言的对应实现”sicp中使用的编程语言是lisp十分简单完全不需要担心因为不熟悉语言而影响阅读与市面上普通编程算法书的区别这本书非是现在普遍的先带你过一遍语言基础语法然后介绍一些普通算法的流水线产品这本书非常严肃地讨论、解析了很多编程中的核心抽象直指本质。先有核心概念其他所有都围绕它依次展开为什么要读反思自身深入地理解编程算法数据结构这些概念而不只是使用它们。培养能力理解原理并能自己扩展举一反三。对学习的思考理解为什么需要学习原理如何形成思考原理的思维习惯重视原理和本质的价值观。这本书的定位学习这本书并非为了某种特定的技术而是为了夯实基础深入学习和理解数据结构编程语言算法。所以在学习过程中应该有耐心和毅力逼迫自己去深入思考而不是只掌握表面。有的时候不能过于功利对于书中的一些数学知识应该采取包容的态度认真对待不要敷衍它们都是很好的学习材料。主要内容因为能力有限这个部分又很难写如有错漏请指出。作为一个导引我深知只说空话是不行的必须有些干货才行所以我总结第一章近50页的内容请诸位读者品鉴。基本概念的辨析函数和过程之间的矛盾不过是在描述一件事的特征和描述如何去做一件事的普遍性差异。换一种说法就是说明性知识和行动性知识的差异。本书清楚描述了数学函数和编程中的函数的区别数学中的函数描述是什么而编程的函数描述怎么做。这也是sicp将函数称为过程本书中的术语英文procedure的原因而非使用编程中惯用的function。这些关于概念的辨析也是sicp的特点之一有趣的算法思维费马小定理如果n是一个素数且a是一个小于n的整数那么a的n次方模n等于a。假设我们大致知道n不是一个素数时上述定理也成立的概率。那么我们就可以通过不断检查小于n的整数来确定n不是素数或者n是素数的概率这样的算法称为费马检查。从特征上看,费马检查和我们熟悉的算法都不一样。一般的算法都保证计算结果一定正确而费马检查得到的结果则只有概率上的正确性。我们能说的是对于任何数n如果执行这一检查的次数足够多而且看到n通过了检查那么就能使这一检查出错的概率减少到所需要的程度。能够证明或者可以想象存在着这样的可以使出错的概率达到任意小的检查算法小到什么程度使出错概率小到计算机本身运行出错的概率。而且当使用常规算法的计算时间不能接受时概率检查却不受多大影响。数学知识作为引导sicp的在这一章会使用一些有趣的但又轻度的数学知识来作为计算对象。你知道如何计算开根号吗你知道牛顿迭代法吗。你知道函数不动点吗而牛顿迭代法可以转换为求一个函数的不动点的问题那么能不能做到将牛顿迭代法作为参数传递给不动点计算框架进行计算呢由于牛顿迭代法和不动点问题可以转换那么能否借助数学上对于不动点的深入研究优化牛顿迭代法呢以抽象为基石我觉得很有趣的一点是明明我在阅读这本书之前根本不懂函数式编程本书语言所采用的编程范式但是在阅读时却完全没有违和感。其对于抽象概念的叙述自然而然水到渠成没有一点学术的臭味。这门书将极大地锻炼递归函数的编写能力推荐跟着例子亲手写否则容易看睡着。而对于递归的概念本书更是进行了深入讨论。结语人无完人书无完书。即使是sicp也有很多适合的读者。但也有很多想读但又读不下去的读者你是不是其中之一呢或者是难以接受函数式编程或者是被“相对密集”的数学概念困扰或者不知道怎么一步步从浅到深地学习。那么我相信你需要一些辅助——提炼重点并进行针对性思考和练习我所做的就是这个。资源本书英文版有免费资源sicp英文版视频教程MIT视频教程b站也有关于中文版国内有工业出版社的实体书github上也有一些中文翻译版本。阅读此书使用英文版更好但用中文版也没有多大缺点反而更流畅看自己的选择。另外本书使用的语言lisp有很多实现的版本推荐scheme或者racketracket有一个专门的IDE叫DrRacket。后续会一步步更新。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →