我这6年来的成长与倒退,暨《黑客与画家》读后感

先搞了一篇《黑客与画家》文摘,然后这里是读后感,说是“读后”感,其实很多内容都是我一直在思考的内容,只不过借这个机会一起谈一下。

书的前部分用了不少的篇幅来为“书呆子”正名,不管是别人说还是我自己都认为我就是个“书呆子”,做事一根筋,讲理不讲情;喜欢脱离人群之外。其实根据我自己的体会,“书呆子”心理通常会有一种优越感,体现在于“你不懂我”的心理暗示。这么说来,通过语言文字为书呆子正名反而是没有必要的。就好比对于geek程序员而言,评价的标准只有3个:运行时间、占用内存、代码长度,这就够了。

当你做一件别人不认可的事情的时候,比较大的可能性是你错了,但也有一定可能性是大家都错了,而你是对的。黑客的价值在于他们敢于承担可能的批判,而去做一些常人眼里看来“叛逆”的事情,这当中蕴涵了改变世界的契机。07年暑假的时候我曾经带头闹事过一回,与现在相比似乎当时更有黑客精神,回头想想觉得当时很幼稚,这也许是变成熟的信号,同时也可能是变平庸的信号。

在关于“财富”的篇章中,很明显作者是在鼓励优秀的书呆子去创业。书呆子通常充满改变世界的能量,但苦于社交上的不足,难以释放能量。以财富为吸引,也许是引爆书呆子能量的一种好方法。不过我个人觉得这一部分写得太有成功学色彩了,而我个人很不喜欢成功学。

但不得不说这些段落还是引发了我很多共鸣,在我放弃保研的时候,最大的动力就在于不安心于过“安稳但无激情”的生活,这也是和父母分歧最大的地方,父母在乎“安稳”,并不在乎“激情”,但我很在乎,最终我利用他们对我的宠溺打胜了这一仗:P 尽管最终没考上清华,但这样的精神是我非常珍惜的,打破现有的格局,扔掉到手或即将到手的东西,去追求更大的价值,这就是创业精神。

书中有一段很有意思,讲述财富是由人创造出来的,其实我一直以来非常赞同这一点。有一年回家的时候,家乡风行十字绣,老妈也不能免俗,她告诉我绣完成以后通常可以卖不少钱。当时就有这种理解,手工业是一种典型的放大过程,通过劳动力和创造力对简单的原材料进行加工,成品的价值会被放大很多倍,这让我很相信财富是可以被创造出来的。

书中说“目前还存在的最大的手工艺人群体就是程序员”,此言不虚,对于程序员而言,生产资料的成本非常之低——电脑一台:在这个信息时代,电脑已经是必需品;开发工具:开源软件给我们充分的选择,购买商业开发工具的价格也不会像购买一座机床那么夸张;一杯咖啡,零食若干:仅仅是为了让思考的时候手不闲着。如此低廉的成本,仅仅通过在键盘上敲代码,就可以创造出活生生的程序,甚至创造出巨大的价值,这样的现象真是匪夷所思。

关于“设计”的篇章,让我找到了很多共鸣。大一的时候,我在学校帮老师做网页设计,当时我做的还不错,但一到了要我做海报的时候,我就不行了。我喜欢简约的设计,可这样的设计放在海报上的话,如果没有非常高的水平,结果只能造成海报看起来像大字报一样,没有视觉冲击力。设计有共识,但不同领域的设计,也有独特的哲学。

前几天看了一个纪录片,讲述大自然中各种神奇的结构,比如人类、爬行动物、鸟类、昆虫等等的结构,以及各种植物中的神奇结构,让我深深体会到完美的系统并不是靠设计所能得来的,而是进化。

“设计”应该是一个动词、一种手段。 具体的说,是一种帮助进化的手段。在纯粹的自然界中,进化更多的依赖于自然选择。放到现实社会里,并不合适,因为自然选择需要太长的时间。这时候设计可以成为一种辅助手段,通过设计人为的进行选择和改造,加速进化的过程。如果设计本身取代了进化,那就是本末倒置了。

进化是迭代的过程,每一次做完一件事情,肯定是会留下遗憾的。对我自己而言,OJ如此、论坛如此、毕业论文如此、iOS软件搜索亦然。 每一次留下的遗憾其实就是下一轮迭代的动力源泉——你想把事情做的更好、想弥补过去的遗憾,于是有了新的思路,可以对它进行改造。

软件开发中讲究“Refactory to Patterns” ,我对这句话的理解是:模式并不是靠设计而得来的,是靠重构而得来的。“重构”在这里就是一种“进化”。在过去的开发经历中,我常常在开发初期就推翻一开始的构思,重新设计;后来越发走向两个极端——或是贪大求全、或是草草了事。不论是来自于排期的压力还是懒惰,这种现象都警告着我geek精神的流失。

回到“设计”,设计应该会取舍,现在业界流行称为“做减法”。我的理解在于弄清楚什么东西主要,什么东西次要。书中说:“当你攀登高山时,必须扔掉一切不必要的装备,在困难地点或预算不足的条件下,建筑师就只能做出很简练的设计。当解决难题成为压倒一切的任务时,那些流行样式与华丽服饰就被抛到一边去了。 ”

音乐圈子里有这么一句话:“鸟枪换炮日,罗郎才尽时。”这句话本意是说罗大佑在拿着一把吉他的时候写出了很多好歌,而工作室换了很好的设备以后,条件好了,反而没有出彩的作品了。

在和licstar开发OJ的时候,从0开始,没有太多参考的东西(那时候国内的OJ很少),也没有退路。在这样的条件下反而把事情做出来了,而后来想对OJ进行重构的时候则动力不足,因为有选择、有退路了。

突然觉得如果事关人命的话,那会不会真的写出没Bug的程序?当然世界上没有不犯错的人,但我们应该总以最高的标准来要求,并且要抛弃掉一切可有可无的东西,从最本源的地方入手。

文章大概就到这里了,猛然发现已经2000字。回首这6年,从不会编程到geek程序员;从兴趣驱动到职业码农;从电脑玩家到开发者,转变不可谓不大。

这些转变中,有变好了,也有变差了。失去的东西中有很多是很珍贵的,我一定要寻找回来。