C开发者眼中的SICP学习

谈谈自己看SICP的一些体会

第一章  构造过程抽象

这一章其实和C语言完全等价, 不打算深入学习LISP的完全可以快速略过。 基本上没有什么大的价值。

这一章最核心的价值就是下面3句话, 理解了这一章就算看完了。

语言的原型系统

·如何组合

·如何提供高层抽象

这3句话是所有语言的核心。 基本上适用所有人。 为什么有人3天学会Java, 有人3年。 关键就在你是否深入理解语言的这3点。

学习任何语言都是直接奔这个主题。所以,有些查字典的完全可以跳过。任何语言, 3天足够入门了。

后面的递归和迭代, 和C没多大区别, 不打算复习算法的完全可以跳过不看。高阶函数, C的函数指针稍微呕心了点,也凑合着能替代。

闭包, 用下面呕心的结构也能凑合替代。

typedef  stClosureFunc {

void * ctx;

void* pFunc;

} ClosureFunc

总而言之, 不打算深入学习lisp的第一章1-2个小时可以快速略过。对实际开发能力没什么大的帮助。(如果想转Lisp开发, 还是有必要花1-2个月做做题)

第二章

前面的数据抽象, 和C的玩法也没啥区别, 基本没看的价值。关于数据表示, 个人觉得用树表示复杂数据,理论上是没啥问题, 但按照KISS原则,

有点装B过头了。这方面,最喜欢和欣赏的还是Perl, 从语言的角度来说, 数组, 列表, hash表应该是基本元素。

第二章主要要学的是2.3符号系统。不过,C基本不提供, 一直打算靠C混饭吃的, 也可以不看。

从书举得例子,基本上可以感到明显的理论派风味, 这话在国内基本就是骂人的了。

事实上, 你要是面试人,人人都会说要抽象,要分层。 有核心价值的是, 你如何判断抽象是对的,是合理的, 分层是对的,是合理的。

这个,在实际项目中才是有价值的。 满怀欣喜,做完习题,信心满满, 给个实际项目一干, 设计还是个渣渣。

第三章 关于序列化,这个在实际C项目中也大量用, 基本是共通技术。关于流, 想法很新, 但个人虽然做的是信号处理系统, 但还没看到谁用过。

C用的更多是Unix系统的管道思想, 或者消息队列思想。 消息队列事实上是序列化和流技术的结合。

前面3章基本上是娱乐, 实际价值不大。 第4章, 讲的是解析器实现。 采用的是自上而下风格。这基本上是将递归发展到极致了。

去年自己一直在研究编译器, 有些不一样的体会。 但,看的时候,一直有点疑惑, 没看到词法分析,不知道是不是lisp语言没词汇要求,还是自己没看懂。

有限状态机等正则表达式概念不知道lisp是如何体现的。另一个很遗憾的问题,是书中完全没有性能分析。完全是面向学生, 这方面比龙书差太多了。

现实的,真想做编译器,还是扎实学龙书才是正途。

后面的第5章, 感觉也差不多。用来感受下不同的实现方式还是有点价值。但, 不打算学lisp的话还真不见得有多大工程价值。

整体来说, 这本书最值得学的是第5章, 对理解计算机模型本质有些帮助。 前面1-3完全没深入意义。第4章稍微可以看看。

当然, 打算C转Lisp的, 则完全要花3-6个月把4-5章 深入学习了。

时间: 2024-07-29 10:42:19

C开发者眼中的SICP学习的相关文章

转载:开发者眼中最好的 22 款 GUI 测试工具

对于很多同学来说gui程序的测试是一个难点,所以我从网上转载了一篇关于gui测试的一篇文章,里面罗列的很多工具,大家可以尝试一下学习学习. 英文原文:22 best GUI testing tools for developer 译文来自:开发者眼中最好的22款GUI测试工具 1.Abbot - Java GUI 测试框架 Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面. 它提供事件自动生成和验证Java GUI组件,使您能够轻松地启动,探索和控制应用程

向产品宣战——开发者眼中的Android UI Design

向产品宣战--开发者眼中的Android UI Design 准备了半个月,思考产品设计.交互设计,见证了公司的产品.UE和开发的撕逼,将自己的思考.感悟,整理成下文,谨代表广大程序猿,向设计狮.产品X开战.希望广大程序猿能够坚持贯彻Google的Material Design,切实认真负责的执行Android的设计思想,将MD设计带到产品中去,不做中国特色的App,将Android的开发风气带到正轨,树立正确的开发观.设计观. 希望广大程序猿朋友在博客后面留言.签名,规范Android设计.树

菜鸟vimer成长记——第0章、我眼中的vim学习

这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系列文章里有些基础概念可能不会涉及到或者不会多做解释.一个是因为有些基础概念我目前也解释不清楚.越基础的解释起来越需要能力,目前鄙人还不具备.另一个是因为我相信各位大神们,你们已经有很好的搜索功能.当然有问题也欢迎大家互相讨论和学习. 这篇主要讲的是我当前对vim学习的理解.后面的一系列文章会针对于学

jQuery开发者眼中的AngularJS

文章来源:http://blog.jobbole.com/76265/ AngualrJS是一个很贴心的web应用框架.它有很不错的官方文档和示例:经过在现实环境中的测试著名的TodoMVC project,它在海量的框架中脱颖而出:而且网上到处都是很不错演示或者展示.但是对于一个没有接触过和AngularJS相似的框架而且还是几乎都在使用像jQuery这样的JavaScript类库的开发者来讲,要从jQuery的思想转变成AngularJS的思想是有点困难的.至少对于我来说是这样的,所以我想要

移动端开发者眼中的前端开发流程变迁与前后端分离

写在最开始 移动端与前端的区别 前端开发的混沌时代 后端 MVC MVC 方案实现 MVC 的缺点与改进 前端只写 Demo HTML 模板 后端 MVC 架构总结 AJAX 与前端 MVC 前后端分离的缺点 双端 MVC 不统一 SEO 性能不够 集中 Or 分离 Nodejs 前后端分离的哲学 Nodejs 分层 实战应用 风险控制 总结 参考资料 写在最开始 这是一篇面向移动端开发者的科普性文章,从前端开发的最初流程开始,结合示范代码,讨论开发流程的演变过程,希望能覆盖一部分前端开发技术栈

程序员菜鸟必备——作为独立开发者如何系统的学习编程

接触一个行业,前期最好来一个系统的学习,有完整的框架一点一点的把基础吃透,不能左一耙子,右一锄头,以我的从业经验给大家分享如何系统的学习编程开发,刚入坑的程序员菜鸟注意了,迅速占领高地,迅速收藏了. 总体大致分为以下几类: A.教材上的知识 这部分内容来自计算机专业的课程教材.也有可能会涉及一部分来自其他相关专业或者相关课程的内容. B.编程语言 每一个程序员只有在会使用一门语言的情况下才有可能从事开发工作,所以学习并掌握一门语言是最低要求了. C.SDK 光有一门语言是不够的,从事任何实际的软

开发者眼中最好的 22 款 GUI 测试工具

1.Abbot - Java GUI 测试框架 Abbot是一个基于GUI的简单的Java测试框架,它能够帮助开发者测试Java用户界面. 它提供事件自动生成和验证Java GUI组件,使您能够轻松地启动,探索和控制应用程序.开发者可通过脚本和编译代码两种方式来使用Abbot框架,这就是为什么它被认为是在开发者的系统 测试和QA的功能测试中都能用到的最完美的GUI测试工具. 2.EggPlant - GUI自动化测试工具 EggPlant 是一个QA的GUI自动化测试工具,它是为使专业商业软件的

Java开发者必备十大学习网站

作为开发者来说,必备的除了对编码的热情还要有自己的一套技巧,另外不可缺少的就是平时学习的网站.以下本人收集的Java开发者必备的网站,这些网站可以提供信息,以及一些很棒的讲座, 还能解答一般问题.面试问题等,或许你会认为有些网站适合任何水平的开发者,但是我认为:对于Java开发大牛来说,网站的好坏取决于如何使用它们. Stack overflow Stack overflow.com 可能是编程界中最流行的网站了, 是一个与程序相关的IT技术问答网站,用户可以在网站免费提交问题,浏览问题,索引相

开发者眼中的Spring与Java EE

本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/07/spring-javaee 在Java社区中,Spring与Java EE之争是个永恒的话题.在这场争论中,来自两个阵营的布道师.架构师与铁杆粉丝都在不遗余力地捍卫着本方的尊严,并试图说服对方加入到自己的阵营当中,但结果却是双方都很难说服对方,每一方都有充分的理由表明自己的选择是正确的.参与到这场争论的有一些架构师,他们负责着平台的选择.那么对于普通开发者来说该如何思考