Month: January 2013

从《图灵的秘密》想到的

托图灵诞生100年的福,去年出版了许多关于图灵的书籍。《图灵的秘密:他的生平、思想及论文解读》是其中的一本,前几周看完了,收获不小。说起来也惭愧,虽然自己学的是计算机专业,也知道图灵这个人,却不清楚他究竟做过什么,印象深一点的只有关于人工智能的“图灵检验”。看过《图灵的秘密》才弄清楚,图灵在计算机发展史上究竟作出了什么贡献,比如可计算性判定,比如通用图灵机,配合书中对他的论文的解读,又了解了他所处的时代和环境,以及他局限和所犯的错误。不过我最高兴的,还是通过阅读填补了自己知识结构中的若干鸿沟:原始的计算机都是专用于“计算”的,后来如何转变为能做任何事情的机器?大千世界的众多信息是怎样一步步进入计算机世界里,被表现和构建出来的?这些问题之前一直困扰着我,也找不到答案,看过这本书算是终于地摸到了答案,这本身就值得高兴;而且,填补断层有利于把所学的知识联接为统一的有机体,以后记忆和运用起来也更自如。

不过合上书本,也有遗憾:如果早能弄清楚这些问题该多好,在计算机科学中这些都应当是相当基本的常识,却需要花费这么多的周折,这么长的时间才弄明白。以前有位读中文的朋友说,老师在课堂上讲,《理想国》这样的书还有是什么好想的,直接买回来啃就对了。每每想起这句话,我都非常感慨:这位老师不一定有特别高水准,但至少在向学生推荐读本这一点上,他还算称职。相比之下,计算机专业在这方面实在差的太远了。一方面许多老师的知识水平不敢恭维,不过如果有好的教材供学生自学,这问题倒不算特别严重,偏偏在国内的计算机教育界既缺乏高水准的原创教材,也缺乏对国外经典教材的认知和推荐的气魄。情况真是再糟也没有了。

Continue reading 从《图灵的秘密》想到的

程序可以止步于接口,思维不能

“面向接口编程”是程序设计的规则之一,它可以将具体实现封装为具有一定逻辑意义的抽象行为。这样做的好处多多,比如有利于在较高层次上思考,而不必操心细节;比如避免外部代码因为具体实现变化而作修改。广大开发人员,不管自己设计程序时有没有注意“面向接口编程”,都会或多或少地从“面向接口编程”中获益——我上大学时曾听某师兄说:“编程还不容易,从网络上找一些类库来调用就好了”。接口隐藏了背后的实现,可是,许多开发人员不但写程序止步于接口,思维同样止步于接口。接口背后是什么,他们写的程序不关心,他们自己也不关心,而且振振有词“我这是面向接口编程”。但是,这真的是好事吗?

我刚工作时,所做的项目里有几个问题是自己搞不定的,甚至整个项目组也没有人能搞定。好在项目经理很有办法,找了他之前的同事兼职帮忙,写出最难的模块,我们只管调用现成接口就可以了。当时大家都松了一口气,至少不会因为自己水平不够,耽误项目进展了,内心也非常感激这位兼职的高人。可是,随着项目的进展,我们搞不定的问题越来越多,于是越来越依赖兼职的帮忙,整个项目也因此越来越被动。我仔细观察,发现这类搞不定的问题虽然反复出现,归结起来只集中在某几个领域,而每次这位兼职高人给过来的程序,尺寸变化并不大。所以我认定,这些问题并没有太多难度,只要解决其中一个,应该就可以举一反三,顺势全部解决。于是我花了一周的业余时间,逐行细抠接口之后的代码,终于尝试独立解决了一个这类问题,给项目经理看过,他非常高兴,从此甚至对我有些另眼相待。当时我想,他这么高兴,是因为我为公司省了钱,再也不必烦劳以前的同事兼职了罢。

Continue reading 程序可以止步于接口,思维不能