英文原文:http://www.codinghorror.com/blog/2008/04/programmers-dont-read-books----but-you-should.html
作者:Jeff Atwood
Coding Horror精华文章现已收入新书《高效能程序员的修炼》,各大书店有售!
StackOverflow.com的主旋律之一,就是软件开发者不再照着书本学习编程了。Joel Spolsky曾经提到过:“程序员似乎已经不再读书了。相比于程序员的从业人数,编程类图书市场小得简直不值一提。”
2004年,Joel发表了“The Shlemiel Way of Software”(软件开发中的愚蠢方法),他表达了类似的观点:“大部分人都不阅读。也不写作。大部分开发者不喜欢阅读软件开发方面的图书,也不到网上去浏览相关的文章,他们甚至都不关心Slashdot.org上的新闻。”
这是一则笑话。Shlemiel是一位油漆工,他找了一份在马路中间划虚线的工作。第一天,他拎着一罐油漆出去,一天下来总共划了300码。老板对他赞许有加:“你真棒!干活真麻利!”老板给了他一个铜板作为薪水。第二天,Shlemiel只划了150码。老板虽然有些失望,但一天划150码还算不错,所以仍然给了他一个铜板。第三天,Shlemiel只划了30码。老板勃然大怒:“怎么只有30码?!真是难以置信!你今天干的活只有第一天的十分之一。这到底是怎么回事?”Shlemiel一脸委屈:“我也没办法啊!每天我都离油漆罐越来越远……”——译者注
如果当今的程序员已经不读书了,那么他们怎么来学习编程呢?莫非还是那种最原始的方式:撩起袖子来就写代码,与此同时,打开另外一个窗口窥探着网络资源。互联网已经把编程类图书边缘化了。在线获取编程相关信息的速度更快、更有效率、也更便捷。Doug McCune写了一篇文章叫“Why I Don’t Read Books”(为什么我不读书),我相信他的感受相当有代表性。
公正地说,技术图书出版业应该为此承担主要的责任:
- 大部分编程类图书都很差劲。据我所知,现如今出书已经不存在什么门槛了。在鱼龙混杂的图书市场找出一本好书,并不见得比在旷野的互联网上找到有用的信息会更容易。在每年出版的数百本编程类图书中,也许只有2~3本真正值得一读。
- 编程类图书不是一书一价,而是论斤来卖的。编程类图书的厚度跟图书的质量似乎存在着一种反比关系。书越厚,它包含的有用信息就越少。这些“巨无霸”参考书究竟有什么用?书重得都快拿不起来了,你怎么还能用它来查阅?
- 面向新手的编程类图书太急于求成。我并不是不欢迎新人进入编程领域。但我始终认为,像“24小时学会xx语言”这样的图书太急功近利了。所谓“欲速则不达”。这种只顾眼前以及求快、走捷径的做事方式,会让初学者误入歧途——我称之为“PHP”——我是开玩笑的!一笑了之!
- 编程类图书有些像“色情文学”。有人认为,收藏厚厚的一堆看起来很重要的编程方面的图书,即便它们大部分摆在书柜里未曾翻阅,你或多或少也会变成一位更为优秀的程序员。David Poole在写给我的一封邮件里提到,人们对这类“色情”书的态度是,“现实生活中我绝对不会那么做的。”这就不难理解我为什么会在Donald E. Knuth的《计算机程序设计艺术》面前犹豫再三,并最终没有把它收入囊中。尽量去买一些实用的书吧,确保你会去读它们,并且更为重要的是,你会把从书里学到的东西付诸实践。
作为一名作者,我很内疚!我曾经和别人合写了一本编程方面的书,但我建议你不要买这本书(至今我仍然这么认为)。我这么说并不是为了哗众取宠,只是就事论事而已。当然,那绝对不是一本烂书。至于跟我一起合写那本书的其他作者,我对他们也保持着崇高的敬意。问题在于那本书涉及的内容,如果你从互联网上获取,会容易得多。相比之下,埋头苦读一本纸浆炮制出来的图书绝对是一种生命的浪费!
Jeff Atwood曾经与Scott Allen、Wyatt Barnett、Jon Galloway、Phil Haack等人合写了《The ASP.Net 2.0 Anthology: 101 Essential Tips, Tricks & Hacks》,于2007年9月出版。——译者注
互联网无疑正在加速编程类图书的死亡。但有证据表明,即使在互联网诞生之前,程序员也没有读太多编程方面的书。翻阅《代码大全》,当我看到下面这段文字时,着实大吃一惊:
你应该觉得庆幸,因为你在读这本书。你已经比软件行业里的大部分人懂得更多了,因为DeMarco和Lister早在1999年就指出,大部分程序员一年读不上一本书。读一点书对于职业生涯的发展大有裨益。即使你每两个月只读一本优秀的编程类图书(大概每周读35页),你也能很快把握住行业的脉动,并且让你鹤立鸡群。
我相信,上面这段文字在第一版的《代码大全》(1993年发行)里也出现了,只是我没有那个版本,也无从验证。Steve McConnell提到的DeMarco和Lister的言论,我在他们的《人件》一书里找到了:
有一个关于读书的统计非常让人沮丧:比如说,每个软件开发者拥有的在他们专业方面的图书平均不到一本,他们读过的专业书也没有超过人均一本。对于任何关注软件行业健康发展的人来说,这个事实是非常令人震惊的!而对于像我们这些写书的人来说,这也绝对是一场悲剧!
当我看到有人在reddit.com上曲解StackOverflow的使命,说我们让程序员抛弃图书,我感觉真的很受伤!面对当今的编程类图书市场,我其实很矛盾,但我还是要说,我热爱编程方面的图书!我曾专门写过一篇博客文章,为开发者推荐了一个读物清单。我现在的这篇文章也是基于那篇博文之上的。其实,在我写过的很多文章里,很多时候我都在尽自己的微薄之力,去解释一些经典的编程类图书里早已阐明的关键思想。
参见作者的另一本书《高效能程序员的修炼》的附录,人民邮电出版社(2013年)。——译者注
这爱与恨的纠结啊!我该如何去调和它们之间的矛盾呢?那些编程方面的图书,你爱或者不爱,它们都在那里……
优秀的编程类图书不受时间的影响。它们超越了对编程语言、开发环境或平台的选择,是永不磨灭的。它们并不停留在告诉人们怎么去做,更解释了背后的原因。如果你不得不每5年清理一次书柜,相信我吧,你一定买了很多不该买的书。
我买过的书我都很珍爱。我书柜里的那些宝贝,你拿什么来换我都不愿意。我一直在翻阅它们。事实上,我在写这篇文章的时候就查阅过两次。
在这里,我不想展开讨论我给大家推荐的那个读物清单。很多年以来,我都没有修改过那个清单,为此我感到无比自豪!
然而,我真的很想振臂高呼:有5本非常棒的编程方面的图书,每一位从业的程序员都应该拥有,并且认真阅读。年复一年,不管我在做怎样的编程工作,这些精华图书都实实在在地给了我极大的帮助。它们值得反复阅读。我每隔几年就会回过头去重读,在两次阅读期间新积累的经验的作用之下,我每次都能在软件工程方面获得更为深入、更具穿透力的见识。如果你还没读过这些书,那你还在等什么呢?
这5本书是:
- 《代码大全(第二版)》
- 《点石成金:访客至上的网页设计秘笈》(即《Don't Make Me Think》)
- 《人件》
- 《程序员修炼之道:从小工到专家》
- 《软件工程的事实与谬误》
我非常想让Stack Overflow成为那些永不磨灭的经典图书的有力补充,但不管怎么说,也不管从哪个角度去看,那些书的价值是不可替代的!
但是,如果你碰巧是《Perl for Dummies》一书的作者,那你要小心了,因为我们肯定会向你“开火”的!
*****************************************
《高效能程序员的修炼》购买链接:
互动出版网:http://product.china-pub.com/3768291
亚马逊:http://www.amazon.cn/dp/B00DXZFZPO
当当网:http://product.dangdang.com/product.aspx?product_id=23295642