用Ruby的酷炫语法装了个逼,我想在第三次阅读这本书之后,或许我有资格写一篇书评了吧?

经典之作

互联网蓬勃发展的今天使得文字的传播方式越来越多样化,但是人们似乎依然无法抛弃原始的阅读习惯--书籍。在这个流行“短小快”的时代,沉下心来好好读一本书到底还有没有意义?如果有意义的话,那么在这个什么人都能够出书的时代,我们应该如何选择书籍?这个问题让我想起了新东方的“三辆马车”之一的王强,他可是出了名的书虫,他挑书有这么一套见解“畅销书我是坚决不读的,我的生命有限,我会选择经典的东西来的读,就是那些经过长时间的大浪淘沙却还能存活下来的作品。”或许这句话能够让你联想到诸如《莎士比亚》,《呼啸山庄》,中国四大名著这一系列的书籍。它们在经过历史的筛选之后却还能够存活下来,并且为不同时代的人们所喜爱着。

王强的择书方式在计算机领域是否适用?在计算机几十年的历史里面,有哪些书可以被认做是经典?无疑《C程序设计语言》,《计算机解析与构造》,《计算机程序设计艺术》这一系列的书都被认为是业界经典中的经典。但很遗憾地说这几本书我都没读过。读不懂的书即便他再经典,我也不会去读他,因为其感觉就像是一个完全不懂英文的人,拿着一本《莎士比亚》原版在读一样无趣。然而这个领域是否有一些能让正常人看的,而且还算是经典的著作?无疑 Paul Graham的《黑客与画家》就是这样一本书。

Paul Graham

刚开始听说这本书,还是在跳槽之前,我问我同事,这本书可好看?同事说这就是鸡汤。读了以后发现,书中的内容在那个年代来说很有前瞻性。而且作者的观点,即便在今天都很有意义。这本《黑客与画家》经过了十几年(对计算机发展来说算长了)的沉淀还广受好评,这无疑可以算得上是一本经典作品。

“黑客”二字

Hacker

出于兴趣而解决某个难题,不管它有没有用,这就是黑客。

我本以为这只是一本写一个程序员应该有理性的一面(黑客)也得有感性的一面(画家)的书。但后来发现我错了,本书中作者从创造性来体现这两个职业的相似性。无论是黑客与画家,他们的本质都是在创造,无论创造出来的东西有没有人会去用,有没有人会去欣赏,他们的回答是“Just For Fun”。这似乎跟我们一惯理解的黑客有点不一样。功利主义盛行的今天,如果我们要做一个业余项目,总会陷入做的东西有没有用,能不能赚到钱这样的思维陷阱里面,导致迟迟不肯动手。殊不知很多时候现实却如作者所描述的,有趣的东西往往不值钱。

设计编程语言往往是不赚钱的,但它是有趣的,相反,大部分赚钱的工作都是无趣的。

在现实生活中为了谋生,不得不做许许多多无聊且重复的工作。毕竟有些雇主很有意思,他宁愿让你做一些毫无意义的工作也不乐意看你闲着,可能要看到码农们忙碌的样子,他们才会觉得这工资给得值当?如果他们看不到的忙碌的样子,或许会用代码行数来衡量你的团队贡献值(这个时候Ruby程序员估计会哭),悲哀的的是这种现象也使得了许许多多程序员最后都真的演变成码农了。

“黑客”二字的含义?更具体地可引用男神--松本行弘的话:“编程本是一种很个性化且有趣的事情,如果你觉得编程只是一种谋生手段的话,那还是趁早辞职吧。”

理论与实战

黑客搞懂计算机理论的必要性,与画家搞懂颜料化学成分的必要性差不多大。

这确实是一个新颖的观点,跟我们所受的教育有点出入。受大学老师的影响,很多时候我们总以为不读完《Ruby基础教程》,《JavaScript权威指南》这些所谓的入门书籍就没资格写代码。我们总觉得不搞懂操作系统,编译器的运行原理我们就算不上是一个称职的程序员。如果这一切应该做的事情能够给予我们学习的动力那还好说,但是这往往只会给我们造成一些不必要的压力。其实编程往现实去讲,并没有那么多幺蛾子。现实生活中我们更多的关注了我们可以怎么做,却没花时间去想我们要做什么。就好像自己当年信誓旦旦地买了一本Python数据分析相关的书籍想着进入数据分析领域,买回来之后才发现里面都是讲Python一些数据分析的库的使用方式,但对于一个毫无数据分析意识的人来说,再多的工具也只是摆设罢了。

Love Ruby

其实想写Ruby,JavaScript掌握了基本语法就可以了。并不需要真的深入到语言内部,对语言有一个通透的理解之后才有资格写相关的代码。一个很有趣的现象是,实际工作中更多的是需求推动的学习,而不是学习推动的需求。刚开始做前端的时候,其实只懂得margin,padding,float,这些最基本属性,做前端的同学无法想象,如果只懂这些个小东西怎么在一家公司活下去?说实话我也是忽悠过来的,边做边学吧。随着后面的业务需求变得复杂,渐渐推动自己去学一些关于position, transition, transform, flex这样一些比较灵活的属性,能够做出更加酷炫的效果。试想一下,如果当初真的是想学完所有的CSS技能之后再去找工作,才去动手写代码的话,估计我已经放弃编程了。要是在没有实际项目的情况下去死记CSS那一大堆烦人的属性?Kil me please.

永远质疑

很少有人鼓励你继续成长,变成一个怀疑和抵制社会错误潮流的人

几乎所有人都害怕质疑,很多时候如果自己的观念被证明是错的,正常人都会有丢脸的感觉。近代中国害怕质疑,采取了闭关锁国的政策,现代中国害怕质疑,采取了半锁国政策,学校的老师害怕质疑,只传授背书的技巧,却很少教会学生如何思考。我们往往都希望身边的人无知一些,这样我们可以少遭受一些质疑。

但在技术领域,如果缺乏质疑,则表示放弃进步。刚参加工作的时候我很害怕把自己的代码提交到版本管理库。把代码提给同事看就像被围观洗澡那般难为情。但现在回过头想谁写的代码没有bug?当你接受他人的意见改良自己代码的时候,我们应该为此而感恩,即便这个过程开始是痛苦的。作为程序员我们应该拥抱质疑,我一直相信开源项目就是这个行业质疑的体现,每个人都能够提出对特定项目的质疑,他们可以通过提交自己的代码的方式来让原有的软件变得更加美好。或许正是因为黑客们对质疑的拥抱,我们才有这么多好用的开源工具,IT行业才能发展得如此迅速吧? 作者也曾说

开源软件就是因为公开承认自己有bug,反而使得代码的bug比较少

写作

你有没有注意过,坐下来写东西的时候,一半的构思是写作时产生的?软件也是这样,实现某一个构思,会带来更多的构思。

估计这就是整本书里面对我影响最深的一句话了,作为一个平时会写点东西的程序员,深深体会到了写东西的苦恼。因为有时候周围的人对文章的反应会很影响作者的写作热情。当周围的人对自己的作品不待见的时候,我总是会想过段时间再写吧,最近没什么心情写了,反正写了没人看。但是过后才发现越是拖延,越是难以提笔,而且原来一些已经萌发的写作灵感在荒废写作的这段时间里也渐渐淡去。到了某个时间点,自己能够提起勇气重新开始的时候,你会发现,荒废写作期间丢失的灵感又再次回来了。甚至有时候我会觉得其实坚持往往不是最难的,难的是重新开始。特别是当你丧失惯性的时候,你会越来越不愿意重新开始。

其实,你不知道的是,当你有勇气重新拾起放弃已久的技能的时候,很多你以为丧失的东西会重新回来你的身边,而且会在你干这件事的时候涌现出越来越多的惊喜。编程与写作的相通之处,我相信不仅仅是键盘上的啪啪啪,他们是一个创作的过程,可能开始的时候只是一个简单的构思(原型),后来渐渐变成一个清晰的轮廓,慢慢的我们会优化我们的框架,让我们的作品越来越与众不同,得到原先想象不到的成果。或许这也是作者说的 黑客,作家,画家这些职业的相似之处吧,他们都是在进行渐进式的创作,而且很多灵感往往都是在创作过程中出现的。

尾声

民间经常会说“事不过三”,但是面对《黑客与画家》这种作品,我很难保证不去看第四遍。《黑客与画家》不是常规的鸡汤,它是一位出色的黑客的所思所想的汇总。这位黑客起初就想当一名画家,为了生存以编程为生,再后来开始指导硅谷的人创业,当上了天使投资人。唯一不变的是,多年后的今天他依然既是黑客,也是画家。