感谢周老师的抬爱,前天收到了博文给我寄的《程序员的自我修养》这本书,利用业余时间大概翻了翻,但没有深入阅读,只因刚开始还以为是讲编程习惯之类的概念性书籍,然而一读之下才发现原来是讲C++底层编程相关技术的书,而我对C++一无所知,尽管有C的经验,却也压根就无法写出有技术含量的书评,然而无奈于当初不知深浅地答应周老师写一篇读后感,所以只能从其文字上下功夫写一点点粗浅的观感,内心颇感惴惴,有失偏颇之处,还请谅解。————写在前面。
我平时看书有一个特点就是:拿到一本书,首先会从书尾往前读几页,然后再正儿八经地从前言开始往后读几页。这样在短时间之内,我基本上就可以判断出这本书质量的好差。我的这种习惯之养成得益于我长期看文学书籍的经验,因此往往我对一本书最深的观感就是其开始和结局,极少细读其高潮。当然,这仅仅是我读文学书籍的习惯,对于技术类书籍,我还是如同大多数人一样正儿八经由前往后读,然而,《程序员的自我修养》却可以说是我用读文学书籍的方法读过的第一本技术书。究其原因,无非是里面的内容我压根就看不懂。要知道对于一本看不懂的书,硬要往下读那是一个痛苦的过程,正如《诗经》之于一个理科生以及《金瓶梅》之于一个同性恋。
因此我想以下的文字也许仅止于我对此书前后一些文字的观感,实际上是一无是处的。
首先说访谈录很有意思,尽管如此放在书首有点冠冕堂皇。但我觉得这种讲故事形式的对话相较书中枯燥的内容更为有趣,看到一些段落居然还有遇知音的感觉,比如这其中的一段:“在自学的过程当中,一定有许多令你得意或者开心的事,可不可以分享一二?”,俞甲子老师的回答是:“在这个过程当中,最烦恼的事莫过于一个困扰了你很久的问题,通过各种办法,包括阅读源代码等还是无法理解或无法解释某个程序现象。忽然有一天某个灵感突现,回头再仔细阅读代码,紧接着马上试验一下,果真如此!大有拨云见日、豁然开朗的感觉,这应该是最开心的事吧。”这一段读来很有意思,其实这何止是学习的过程当中最开心的事情,即便是实际开发当中,亦经常能碰到这种情形,它让我想起了前一段时间接手公司PV统计系统时的故事。我们的PV系统是一个每天要处理十亿级数据的系统,负责着分析公司整个网站矩阵的访问日志。在我接手的时候已经运行了近一年的时间,在这段时间里一直是基于一个原理就是根据不同的域名来统计访问量,然而由于特殊的原因需要对其做一个根本性的改动,即要把根据域名来进行主动分析的机制修改成由管理员分配ID进行被动统计的机制,这可恼坏了我,因为它不仅仅是意味着要修改许多的代码,同时也意味着存在很大的风险,稍有不慎,就有可能导致所有的PV统计数据都不准确。为此我读了三天代码,尝试修改,最终越改越麻烦,甚至开始导致部分数据分析出问题,我一时处于进退两难的境地,眼看着规定的时限就要到了,一时心急如焚,就是在这样一个时刻,突然灵感斗现,回到根本的分析机制里去找解决方案,最后仅仅是将域名替换成特别的ID即解决了全部的问题,并且由此带来的仅仅不过是三行代码的修改量。
大多数时候,我以为程序员是最接近于神职的一种职业,他们中的大多数人都惯于在一堆繁杂的字母中寻找自己的信仰以及快感,并以此做为自己毕生的骄傲。然而也正是基于这样一种特质,我以为这也是大部分程序员惯于和一种思考方式的根源,长期的机器化思维令其经常处于难以变通及僵化思维的尴尬境地,因此经验就成了他们的救命稻草。
但是显然事实上程序这个东西完全可以应用得更艺术。我想这就是《程序员的自我修养》所想要传达的理念,换句话说就是,作者真正希望的是读者能够从中学到某一种思考问题的方式而不仅仅是知道某个运算规则的结果,正如malloc()函数申请的内存数量也许不总是2G或者2.9G一样,它也许会受操作系统、程序本身大小、用到的动态/共享库数量大小、程序栈数量等等因素的影响(书中原文第168页)。学会变通以及多角度思考问题也是程序员应该具备的基本素质之一,因这才是解决问题之根本。
博文是一个常出精品图书的公司,因此《程序员的自我修养》无论从装帧还是排版都极为优秀,而从书的内容看来,作者也非常认真,别的不说,光是那一堆优雅的图表,就足以看出作者是下了一番工夫的,另外给我一个非常好的印象就是:书中很多术语都做了粗体标注,同时用括号配了英文名词,这对于很多惯于读文档的程序员来说,是非常有意义的。
当然不能全是溢美之辞,尽管显然以我的水平似乎无从指责书本内容质量的好坏,同时尽管博文是一个惯于自醒以及善于接受批评的团队。然而如同大多数我们以为其美而实际上美得有限的风景一样,真要是接近了,也就瑕疵斗现了。一如这世界诸多事情都经不起琢磨,一如佛主坚持世间的一切皆为幻相,只因其越接近真相越是令人痛苦和绝望,乃是一种逃避真相的理想。可能这么说有点夸张,我的意思如果说从内容上讲《程序员的自我修养》可以称其为一本好书的话,那么这个标题是失败的,且不管作者在序言三中是如何用大量的笔墨来解释这个书名的由来甚至拿斯坦尼斯拉夫斯基的《演员的自我修养》说事,但在我看来还是有点哗众取宠,因为本质上不过仅仅讲了在运用C++链接、装载与库方面知识经验的书籍,当它挂上“程序员自我修养”的名头,便怎么看怎么让我觉得是在挂羊头卖狗肉,就跟郭敬明讲心情之忧伤不用忧伤的字眼而非要用“漂洋过海泪流满面”,似乎只有这样才足以让小姑娘神游太虚感同身受一样,显得做作而且文不对题,同时亦是对读者的严重误导--之前,我未见其书而只闻其名之时,我以为它会是一本讲程序员职业道德、编程习惯、代码规范方面的与程序员修养相关的书籍,而压根就没有想过它会是一本纯讲技术的、更没想到它只是讲与C++底层编程相关技术的书。我想以这么狭獈的一个命题,叫《深入系统编程--链接、装载与库》也许会好一点,退而求次命名为《C++程序员的自我修养--链接、装载与库》也可接受。
其次是栏目标题上的哗众取宠,在第一章,作者连续用了几个貌似很拽的成语来充门面,如“万变不离其宗”、“众人拾柴火焰高”等,然而翻内容进去,却发现这些比喻看似那么回事,实际上却有点不伦不类,因为纵观全书这种风格根本就不能自一而终。显然,作者一开始是想标新立异风格独特,但我恶意揣摩可能由于文学修养不够等到第二章便江郎才尽,再也想不出合适的词了,于是嘎然而止。正是这一细节让我一开始即对此书有了一点看法,我以为这是虎头蛇尾的最直接体现。尽管内容上未必如此。
当然,我这么说有点鸡蛋里挑骨头的意思,是说不知所云而又要假装言之有物的表现,是该被鄙视的。然而事实上我想说的是:技术书不是科幻小说、不是历史哲学、更不是可依托想象力而极工词藻的诗歌戏曲,它不需要华丽的语言、不需要首尾不接的思维跳跃、更不需要平仄扬抑的对照排比。它只需要朴素的语言、平实的叙述、以及先后有序深浅有致条理清晰的娓娓道来。因此在这一点上我和大多数人的观点不同,即是:我不认为一个人要成为优秀的技术作者,其首先必须成为一个优秀的文学作者,因这二者之间并没有必然的因果关系。我以为要成为一个优秀的技术作者,其首先有清晰的逻辑思维,其次具备有条不紊的叙述能力即可,当然有一定文学修养更佳,但也仅仅是更佳。因此我想如果一个技术作者在文学修养上不是很高的话,千万不要假装自己一直就是一个诗人或者剧作家,千万不要假装曾经跋山涉水望断千年红尘有着比屈愿《离骚》还骚的伤悲,即便就是有,也不要在你的技术作品上大洒笔墨挥毫一就尽骚首弄姿之能事向你的读者展示你45度角的仰望--因为那并不优美,因为那只会给人以鸟人在天上飞、神棍在地下吹的感觉。因为那是画蛇添足的。