去年读过一本非常火的书《黑客与画家》,其实这本书一直没有看完,总是差了一点,原因就是连续看了几篇大赞Lisp语言的文章后,就觉得有点烦了,但是还是静下心来,将它读完了,把这本书回顾一下,总结一下自己以前的感悟
Paul Graham是一个创业大牛,文中的每一行都可以看出他的性格来,追求完美,深入思考再加上每一个成功创业者多少都有的偏执,这个并非一定是贬义,因为用英语说,应该是insist on 。并无褒贬,只是人的一种行为特质。
开始读这本书的时候,我一直在寻找一个问题的答案,作者为什么会这样命名这本书,译者说是作者想表明黑客和艺术家一样,都是再创造好的作品。其实从作者的很多文字中看,作者有一种作为黑客潜在的孤独,特别是在对于Lisp语言的问题上,他始终强调这是最强大的语言,但是又不得不面对其流行度不高的现实。
看待编程语言的问题
书中连续几篇文章讨论,如何去看待一门编程语言,什么样的语言算是功能更强的语言,他提到了几个因素 :外部因素,简洁性,可编程性,一次性,函数库,效率,时间,再设计。
外部因素,指的就是有没有一本精简的入门教材,有没有方便的在线文档。我觉得这不仅仅适用于编语言,到现在各大阵营开放平台盛行的阶段,也适用于各个平台,这也是linux和android等开源项目成功发展的一个原因,但这个仅仅是针对开发者而言的。额,的确,对编程语言感冒的也只有开发人员吧。但有一个特例就是ios,一个学习资源不多,API文档不方便,但是已经把Objective-C推向编程语言顶端的系统,所以外部因素现在应该包含更多层面了,利润或许驱动了程序员的刻苦。
Paul再讲解简洁性的时候,把java作为了一个反例,一个hello world在java中显得如此复杂。我并不觉得很妥当,因为毕竟我们写的都不是hello world ,我们做的都是一个更大更为复杂的逻辑处理过程。类是抽象具体事物和封装信息所需要的,当真正的处理事物的时候,他并并不会复杂,反而会更简洁。我觉的这个不是简洁与否的问题,而是语言的使用场景的问题,我们要处理一些数学表达式,当然不会首先想到java,java就像一个工程队,你不可能要一个工程队来解决一个数学家的规模不大,需要深思的问题,这时候C,Lisp也许就更加合适了。
再一个就是,可编程性。。我觉得翻译的不好,原文是Hackability ,其实理解为自由度更强比较好,以前在做编译原理的实验的时候,我就觉得C用起来很过瘾,为什么会过瘾,我曾经有想过,或许不是因为指针,而是以为各种各样的宏定义,每次用宏的时候,我就觉得这个代码真真正正的是属于我的。但是想到团队性的合作编程,这就又不方便了,所以什么都不是万能的。。。
一次性就不说了,作者貌似在描述软件工程中迭代开发的一个过程,下一个就是函数库,这个在很多面向对象语言体现的比较多,其实我认为一些算法就可以已经在函数库中实现好。但是算法的学习是必要的,我认为学习算法是为了使程序员变得更加的聪明而不是让人变的更加的思维僵化,就像恶化的高考一样。比如在回顾排序的演变的时候,我们就可以看到人们追求更好的排序的一个思考的过程,能体现算法是让人好好思考以至于能更好的用巧妙的办法解决问题的一本书是《编程珠玑》。书中的第一个查找电话的例子就让人感觉受益匪浅。有一次参加rr面试的时候,面试官问过我一个算法+实际解决问题的题目“rr主页右上角的联系人搜索如果要你来做,你怎么实现”,我觉得这样的问题就是好的问题,我给出了他一个方案,他很高兴的说他们公司就是这么做的,之后他叫我写代码实现一个缩水版,我没有写太好,但没有影响通过面试。这个问题中,没有问什么排序什么搜索之类的成型的问题,因为成型的东西你可以在3秒钟之后从google上找到答案,而一个实际的问题,就没有那么容易了。
接下来是效率和时间,效率指的是程序的效率,而时间指的是编程语言的声明周期。Paul最厉害的地方在于他的预见性,这个一会再详细说,他很早的就意识到,今后的效率的核心问题不是单纯的计算速度,而是同时处理多请求的能力,也就是现在将的并行计算,的确这显然已经成为了很多企业的重点技术研究方向,服务器分布的范围越来越大,每分钟几百万的订单,都在考验并行的能力。
关于程序语言的周期性,我们知道一个产品都有他的周期性,最初的引进,到推广,到成熟再到衰退。我一直在想语言和平台的关系,始终也想不明白,二者究竟是谁在推谁,又或者两者是相互的。但有一点是肯定的,只要诞生语言的环境还在,那么语言就仍旧有生命力,比如C和UNIX。
产品
作者让我最钦佩的还是其强大的预见性,他在2001年的文章,曾这样写道“但是,苹果公司还没有失败,如果他能把ipod升级为手机,并将网络浏览器包括在其中,那么微软公司的麻烦就大了”,2007年苹果发布了首款iphone,那一年真正的开始了乔布斯的时代。其实Paul的本意是认为web应用的重要性,虽然iphone的成功并不在于其浏览器有多么的出众,但是这种思想是一致的,即web store的概念,用户从网上购买自己喜欢的应用。
很多时候,我们找不到需求,因为我们并不追求完美,而这恰恰是黑客的特质。
文章的最后,书中出现了黑客和画家,一个产品就向绘画一样“画作永远没有完工的一天,你只是不再继续画下去罢了”。以此结尾吧,每个人的生活也是如此,只要你继续画。