Learning SICP: (sqrt 2.0) - 行者无疆 始于足下 - 行走,思考,在路上

Learning SICP: (sqrt 2.0)

xiaohanyu posted @ Tue, 30 Aug 2011 23:46:27 +0800 in Lisp with tags Scheme SICP , 4345 readers

接触计算机也算四年有余,对自己的所学所知却毫无信心。回头看了看以前写过的很多文章,诸如配置IDE环境啦、配置Linux操作系统啦、零零散散的小程序啦,等等诸如此类,不成体系,都是在小打小闹。因此我决定,在可以预见的几年内,一方面做好百度份内的工作,赚一点养家糊口的钱;另一方面也要从基础做起,一点一点地夯实自己的技术实力。技术是基础,无论是以后创业,还是继续在程序员的行业里面模爬滚打,扎实的技术都是一个必备的条件。Google的创始人曾经说过,要成为一个企业家,需要“Be an expert in all aspects”,而一个公司赖以生存的基础,除了良好的营销、管理,最最基本的还是需要有能拿的出手的产品,而产品的基础就是技术。所以我从来不赞成“码农没有前途”等等诸如此类的说法,这样说的人,多半自己不是一个合格的码农,又或是对IT互联网本身就没有深刻的理解,信口雌黄罢了。

人类生存于世的一大乐趣就是自己制造工具,能否制造工具也是人类之所以成为万物之灵的根本。而学计算机的一大好处就是可以方便地、随心所欲地制造自己想要的工具,没有想不到,只有做不到,工具的级别取决于程序员的技术能力。譬如Fabrice Bellard就用JavaScript写了一个PC模拟器,可以在浏览器里面跑Linux,而此君的其他作品,诸如ffmpeg、qemu、tinycc,在开源社区几乎是无人不知无人不晓。

学计算机的一大好处就是经典教材诸如SICPCSAPPTAOCP、龙书、虎书等等数不胜数,思忖再三,决定还是以MIT经典的那本SICP开始。关于SICP的具体内容我不再多言,Wikipedia一查便知。让我沉思的两点是,这本书是MIT大一新生学习计算机的第一门课,也就是计算机的导论课程,而这样一门大一新生的导论课程,在两百多页的教材中,确涉及到了图灵机理论、递归算法、lambda算子等等诸多关于编程本质的知识,不得不感叹MIT课程的高质量,同样作为国内高校翘楚的浙江大学,大一新生恐怕还都在背诵C语言各种符号的优先级,还在古老的Turbo C 2.0上写着古老的graphics.h程序呢;第二,这本书长盛不衰几十年,被数百所大学选为计算机系的教材,并且对计算机教育产生了深远的影响,国内有那本教材能够达到这样的境界?谭浩强的?严尉敏的?都不是。除了教材本身,作者的态度,还有配套的相关资料,以及由此推动的深入挖掘和研究才是最重要的。SICP的作者Gerald J. Sussman同时也是Scheme语言的发明人之一。

利用晚上和周末空余的时间,断断续续地看完了SICP第一章的大半部分,还有前面的几段讲义和视频。讲义中的有一个求方根的程序:

#!/usr/bin/guile -s
!#

(define square
  (lambda (x)
    (* x x)))

(define average 
  (lambda (x y)
    (* (+ x y) 0.5)))

(define close-enuf?
  (lambda (guess x)
    (< (abs (- (square guess) x)) 0.001)))

(define improve
  (lambda (guess x)
    (average guess (/ x guess))))

(define sqrt-loop 
  (lambda (G X)
    (if (close-enuf? G X)
      G
      (sqrt-loop (improve G X) X))))

(define sqrt
  (lambda (x)
    (sqrt-loop 1.0 x)))

;;(display (sqrt 2))
;;(newline)

短短几行,几乎涵盖了二分法的精髓。程序就是数据,函数本身可以当数据来操作,本身就蕴涵着深刻的和谐统一的数学美。

其实学习这个东西就像武侠小说里的武功,公式技巧编程语言都是花拳秀腿,对整个学科体系的理解、数学的功底才是精深的内功,是一切上乘武功的根基。由此我又想到一个人的工作的价值。私以为,一个人的价值(也可以说是薪水),是以这个人的不可替代性来衡量的。如果你现在走掉,而你的老板随随便便就能找一个人来顶替你的岗位,那么你做的工作是可替代性非常高的工作,自然薪水也不会太高;反之亦然。

ps:写博客写到一半的时候is-programmer忽然挂掉,所以出现了半截文章。看来我也该考虑考虑租一个独立的虚拟主机或者VPS了。

Auston Jary said:
Wed, 31 Aug 2011 01:26:56 +0800

最后一段没写完?

Avatar_small
mazenvoy said:
Wed, 31 Aug 2011 10:15:07 +0800

学长的意见我不完全同意,对于Turbo C 2.0什么的确实是讨厌,但是我觉得我们的计算机基础和国外的不同,我想在浙大至少有一半人和我一样刚进来时完全是电脑白痴。我不知道你说的那几本书是怎么样的,但是我想如果要看好必然得花不少时间。但是浙大现在的是大类培养,大一的同学都不确定以后的专业。让非计算机学生看你说的那基本书我想没必要吧。当然,学校里的大学计算机基础这种书和课确实是废材。我以为这是在国内不可解决的问题

Avatar_small
mazenvoy said:
Wed, 31 Aug 2011 10:15:12 +0800

学长的意见我不完全同意,对于Turbo C 2.0什么的确实是讨厌,但是我觉得我们的计算机基础和国外的不同,我想在浙大至少有一半人和我一样刚进来时完全是电脑白痴。我不知道你说的那几本书是怎么样的,但是我想如果要看好必然得花不少时间。但是浙大现在的是大类培养,大一的同学都不确定以后的专业。让非计算机学生看你说的那基本书我想没必要吧。当然,学校里的大学计算机基础这种书和课确实是废材。我以为这是在国内不可解决的问题

cntszyy said:
Sat, 10 Sep 2011 01:36:28 +0800

你滴学弟好可爱啊

Avatar_small
Lox said:
Wed, 21 Sep 2011 12:41:34 +0800

知识是一方面,眼界是另一方面。
turbo c和gcc的选择,从很大程度上反映了这个学校的教学水平是否与时俱进,能否跟上时代的脚步。

Avatar_small
mazenvoy said:
Thu, 24 Nov 2011 23:23:18 +0800

学长已经很久没有更新博客了,是工作忙呢还是没热情了,亦或是换了地点

Avatar_small
Lox said:
Wed, 30 Nov 2011 22:39:10 +0800

最近潜心静休,闭关修炼,专注lisp、hadoop、mapreduce。很多道理还没有想明白,下笔有点困难。而且博客访问也时断时续,我再考虑留点钱去linode上搞一个独立的vps出来。

zarzen said:
Wed, 30 Jan 2013 19:27:15 +0800

嗯、确实我觉得我们的计算机课程比较诡异。
尤其我还在一所二三流的大学。
前些天还在犹豫是否开始看sicp。看来是不得不看咯~
不过英文版的还是有点伤啊。

Avatar_small
Lox said:
Wed, 30 Jan 2013 20:55:02 +0800

sicp必看!

我只看了前三章,受益很多。一定要做习题。

ying17zi said:
Tue, 17 Sep 2013 05:28:08 +0800

请问,博客中的footnote怎么实现的?正反向均可跳转,很赞啊!
(你是在markdown文本里写博客吗?)

Avatar_small
Lox said:
Tue, 17 Sep 2013 09:47:18 +0800

hi, 你好:

我是用emacs org-mode写的。然后导出到html,再粘贴一下到这里。

不过还是稍显麻烦。在写自己的静态blog软件: http://github.com/xiaohanyu/org-site。不过卡在js/css上了……

ying17zi said:
Tue, 17 Sep 2013 22:13:04 +0800

原来又是 org-mode!

我一直在用Vim, 之前写python 代码,还有读 sicp的时候, 有尝试过Emacs, 但总是觉得用不起来, 配置它都是个问题,快捷键更觉得有点乱, 后来还是用 vim-conque 了。

不过话说,看到你的oh-my-emacs, 我有点想尝试下。

(静态博客的话,我最近配置了 haskell+Hakyll, 我参考的这个帖子:http://timbaumann.info/posts/2013-08-04-hakyll-github-and-travis.html)

Avatar_small
Lox said:
Wed, 18 Sep 2013 09:50:09 +0800

Thanks!

org-mode绝对是Emacs的杀手级应用,强烈推荐。

savior said:
Wed, 25 Dec 2013 15:22:32 +0800

同意技能只是一部分,一小部分。眼界,修为才会决定自己的高度。sicp这本书,将的是计算。这个是一个非常深刻的东西。现在的编程语言的编程范式,还有计算框架,借鉴了非常多的理论知识。

这么多的道理,在这么薄薄的书中能说出来,印证了“大道至简”的道理。

目前还在读呢

savior said:
Wed, 25 Dec 2013 15:26:35 +0800

不同意作者说的,薪水可以判断一个人的价值。

科技是科技,商业是商业。

知识是知识。

我不用商业眼光去看待知识。要不我永远都不会接触Lisp,不会学Emacs, 不会用Linux.

ying17zi said:
Wed, 25 Dec 2013 21:19:57 +0800

我想作者可能想说的是一个员工对企业的价值 :)


Login *


loading captcha image...
(type the code from the image)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee