大概不少programmer都看过《黑客与画家》,作者用了整整一章的篇幅讨论Lisp的强大。我自然就会手痒痒。
     几个月前,几天内攻城略地搞定了Python,用的方法便是用Py重写之前开发的类库,这样就能很快熟悉语法,培养语感。喜上眉梢的我,也尝试将同样的策略用在Lisp上,我开始查看它的语法和函数,比如如何定义类和函数,如何赋值等等。
     但我慢慢发现,Lisp几乎都不需要学语法,就是括号和几个基本过程,无非就是lambda, define, let,cons,car,cdr等等。虽然语法很快就学完了,但却很难用它写出以前Python或C#风格的命令式代码。连赋值都变得如此诡异,而且有数不清的方言,定义类时,每种方言都不一样!函数名都超长,变量甚至会用问号感叹号等平时根本不敢想的符号。
     在尝试写Lisp一天之后,我无奈的放弃了,它的思路和我之前所有的观念都很不相同!
     后来我看了《计算机程序的构造与解释》(SICP).
     这本书名气显然没有《编程珠玑》甚至《编程之美》名气大。但它的目录很对我的胃口,流模式,惰性求值,元语言抽象,听着是不是就很有逼格呢?于是我迫不及待的踏上这片土地,一边看一边做习题。
     之后发生的事情超出了我的想象,这仅仅是一本MIT的大一新生的入门课程,其思维深度,习题难度和广度都超过了我的想象。怪不得国外有那么多大神,因为人家看过了这样牛逼的教材!它的函数求导和积分的方法,高阶函数,闭包令人叹为观止,函数式风格的操作使之前不可想象的操作成为可能。Lisp递归玩的实在太溜了,它才是函数式编程语言的王者,循环迭代早成了二等公民。SICP一点点地解释程序运行的真正本质,分析结构,环境和抽象。我仅仅看到了第二章,就已经目瞪口呆,颠覆了之前不少的概念,让我极其后悔,为什么没有在大一大二的时候读这本书(那会我估计连看都看不懂)。
     很多书信息量都很低,一本书压缩后就剩几页纸。但SICP不一样,这本书不仅无法压缩,而更需要扩充。所以如果真想了解它的精妙,请直接阅读它。任何赞美都是乏力的。
     我进而迅速地投入了Lisp的怀抱,是否使用Lisp作为工作语言,这一点都不重要,深入之后,你会感受到数学的精致,理性的荣耀。我才发现,Lisp根本就不是语法,而是一种设计。用之前的编程思路去写Lisp,简直就是暴殄天物。此时,你不会再抱怨语言限制了思维,只会悔恨自己的思维配不上它的能力。
     另外,我发现看书一定要做习题,做习题,做习题。大脑学完知识,检验和巩固知识的最佳方式,就是做习题。觉得课本上讲的东西很冗余觉得自己都懂了?做一道习题分分钟被虐狗。看了大神的对习题的解答,才发现这货原来是这样!这可能就是思考的乐趣吧!
   
     

Lisp和SICP的更多相关文章

  1. etlpy: 并行爬虫和数据清洗工具(开源)

    etlpy是python编写的网页数据抓取和清洗工具,核心文件etl.py不超过500行,具备如下特点 爬虫和清洗逻辑基于xml定义,不需手工编写 基于python生成器,流式处理,对内存无要求 内置 ...

  2. 开始lisp的旅程

    不知道是不是<黑客与画家>的老pual太能忽悠了,一直想把他吹捧的lisp学习一下. 看common lisp和On lisp两本书也有一段时间了,中间还夹着看了一点SICP和land o ...

  3. SICP 阅读笔记(二)

    Chapter 1: Building Abstractions with Procedures 2015-09-29 016 Preface of this chapter QUOTE: The a ...

  4. SICP 习题 (1.9) 解题总结

    SICP 习题 1.9 开始针对“迭代计算过程”和“递归计算过程”,有关迭代计算过程和递归计算过程的内容在书中的1.2.1节有详细讨论,要完成习题1.9,必须完全吃透1.2.1节的内容,不然的话,即使 ...

  5. nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

    Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Wi ...

  6. 【SICP感应】3 级数据和符号数据

    在本书的第二章学习时,有一个问题我一直很困扰,那是2.2.4举例节.因为没有华丽的输出模式书,它只能有一个对的英文字母.两三个月的这浅浅的学校前Common Lisp同样是真实的,当.了非常赞的线条, ...

  7. 【SICP归纳】2 高阶函数和数据抽象

    上一篇博文相应的是书中的第一章的一二两节,我们已经大致的有了一种构造的感觉不是么. 书中展示了非常多有趣的句法(syntax). 如今我们要让思想进一步的抽象.写这篇博客的时候并未学完整本书.更不敢说 ...

  8. SICP 习题(1.1,1.2,1.3,1.4)解题总结。

    近来在重读SICP,以前读过一次,读了第一二章就没有坚持下去,时间一长就基本忘记了,脑海里什么都不剩,就隐约记得自己曾经读过一本很牛B的书. 这次读希望能够扎实一点,不管能读到哪里,希望可以理解一些东 ...

  9. python + lisp hy的新手注记1

    想在python里用lisp方言hy的目的: 1 用lisp去parse 包含 “数据+简单if控制流(代码.AST)”的配置文件,或者说用包含s-exp的.hy文件作为这类配置文件的实现(而不是用y ...

随机推荐

  1. 关于解决python线上问题的几种有效技术

    工作后好久没上博客园了,虽然不是很忙,但也没学生时代闲了.今天上博客园,发现好多的文章都是年终总结,想想是不是自己也应该总结下,不过现在还没想好,等想好了再写吧.今天写写自己在工作后用到的技术干货,争 ...

  2. JavaScript Math和Number对象

    目录 1. Math 对象:数学对象,提供对数据的数学计算.如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 2. Number 对象 :Js中提供数字的对象.包含整数.浮 ...

  3. InnoDB体系结构学习笔记

    后台线程 Master Thread 核心的后台线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括(脏页的刷新).合并插入缓冲.(UNDO页的回收)等 IO Thread 4个writ ...

  4. HTML骨架结构

    前面的话   一个完整的HTML文档必须包含3个部分:文档声明.文档头部和文档主体.而正是它们构成了HTML的骨架结构.前面已经分别介绍过文档声明和文档头部,本文将详细介绍构成HTML骨架结构的基础元 ...

  5. 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签

    今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...

  6. CSS知识总结(九)

    CSS常用样式 10.自定义动画 1)关键帧(keyframes) 被称为关键帧,其类似于Flash中的关键帧. 在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“ ...

  7. pt-heartbeat

    pt-heartbeat是用来监测主从延迟的情况的,众所周知,传统的通过show slave status\G命令中的Seconds_Behind_Master值来判断主从延迟并不靠谱. pt-hea ...

  8. spider RPC入门指南

    本部分将介绍使用spider RPC开发分布式应用的客户端和服务端. spider RPC中间件基于J2SE 8开发,因此需要确保服务器上安装了JDK 8及以上版本,不依赖于任何额外需要独立安装和配置 ...

  9. H3 BPM让天下没有难用的流程之功能介绍

    H3 BPM10.0功能地图如下:  图:H3 BPM 功能地图 一.流程引擎 H3  BPM 流程引擎遵循WFMC 标准的工作流引擎技术,设计可运行的流程和表单,实现工作任务在人与人.人与系统.系统 ...

  10. 微信小程序监控 - HotApp统计

    HotApp小程序统计,第一个专业的微信第三方小程序监控统计工具 1.什么是HotApp小程序统计 HotApp小程序统计是第一个微信第三方小程序统计工具,就像做android 和 ios开发的人知道 ...