接触计算机也算四年有余,对自己的所学所知却毫无信心。回头看了看以前写过的很多文章,诸如配置 IDE 环境啦、配置 Linux 操作系统啦、零零散散的小程序啦,等等诸如此类,不成体系,都是在小打小闹。因此我决定,在可以预见的几年内,一方面做好百度份内的工作,赚一点养家糊口的钱;另一方面也要从基础做起,一点一点地夯实自己的技术实力。技术是基础,无论是以后创业,还是继续在程序员的行业里面模爬滚打,扎实的技术都是一个必备的条件。Google 的创始人曾经说过,要成为一个企业家,需要“Be an expert in all aspects”,而一个公司赖以生存的基础,除了良好的营销、管理,最最基本的还是需要有能拿的出手的产品,而产品的基础就是技术。所以我从来不赞成“码农没有前途”等等诸如此类的说法,这样说的人,多半自己不是一个合格的码农,又或是对 IT 互联网本身就没有深刻的理解,信口雌黄罢了。
人类生存于世的一大乐趣就是自己制造工具 ,能否制造工具也是人类之所以成为万物之灵的根本。而学计算机的一大好处就是可以方便地、随心所欲地制造自己想要的工具,没有想不到,只有做不到,工具的级别取决于程序员的技术能力。譬如 Fabrice Bellard 就用 JavaScript 写了一个 PC 模拟器,可以在浏览器里面跑 Linux,而此君的其他作品,诸如 FFmpeg、QEMU、TCC,在开源社区几乎是无人不知无人不晓。
学计算机的一大好处就是经典教材诸如 SICP、CSAPP、TAOCP、龙书、虎书等等数不胜数,思忖再三,决定还是以 MIT 经典的那本 SICP 开始。关于 SICP 的具体内容我不再多言, Wikipedia 一查便知。让我沉思的两点是,这本书是 MIT 大一新生学习计算机的第一门课,也就是计算机的导论课程,而这样一门大一新生的导论课程,在两百多页的教材中,确涉及到了图灵机理论、递归算法、Lambda 算子等等诸多关于编程本质的知识,不得不感叹 MIT 课程的高质量,同样作为国内高校翘楚的浙江大学,大一新生恐怕还都在背诵 C 语言各种符号的优先级,还在古老的 Turbo C 2.0 上写着古老的 graphics.h
程序呢;第二,这本书长盛不衰几十年,被数百所大学选为计算机系的教材,并且对计算机教育产生了深远的影响,国内有那本教材能够达到这样的境界?谭浩强的?严尉敏的?都不是。除了教材本身,作者的态度,还有配套的相关资料,以及由此推动的深入挖掘和研究才是最重要的。SICP 的作者 Gerald J. Sussman 同时也是 Scheme 语言的发明人之一。
利用晚上和周末空余的时间,断断续续地看完了 SICP 第一章的大半部分,还有前面的几段讲义和视频。讲义中的有一个求方根的程序:
(define square
(lambda (x)
(* x x)))
(define average
(lambda (x y)
(* (+ x y) 0.5)))
(define close-enough?
(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-enough? 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 了。