英文原文:Programmers Don't Read Books -- But You Should
问答网站 stackoverflow.com 的一个主要功能体现就是:软件开发人员无需再从书本上学习编程,就像 Joel 所说的:
程序员看起来都不再读书。市场上编程方面书籍的数量和编程从业人数相比来少的可怜。
2004 年在《The Shlemiel Way of Software》一书中 Joel 也表达了相同的观点:
大部分的人都不读点什么或写点什么。大部分的程序员都不读软件开发方面的书籍,他们不去软件开发方面的网站,他们不去 Slashdot 参与讨论。
既然现在的程序员都不读书,他们如何学习编程?他们用最原始的方式:捋起袖子就写代码——同时开启第二个窗口来从互联网收集经验和知识。互联网是一部百科全书。获取知识信息更快,更高效,从网上获取编程知识明显是一种更聪明的方法。Doug McCune 在 Why I Don’t Read Books 这篇文章里贴切的写出了他的感受,我相信他描述的这种心情是相当普遍的。
我认为技术图书出版业应该为此承担主要责任:
作为一名书作者,我很惭愧。我和别人也合写了一本编程书,而且我并不认为你应该买它。我不是在说反话。我想说的就是字面上的意思。但不管怎样,那并不是一本很糟糕的书。我对我的书合作者怀有最大的敬意。但你能从网上找到比这本书更丰富的信息。抱着一本死书不放是最不可取、最浪费生命的事。
互联网无疑正加速编程书籍的死亡,但有一些证据显示,甚至早在互联网诞生之前,很少有程序员遍读大量编程书籍。我很吃惊的在《代码大全》一书中看到了这样的段落:
你可以炫耀一下了,因为你在读这本书。你已经学到了比软件产业里大部分人都要多的知识,因为大部分的程序员一年都不会读一本书(DeMarco and Lister 1999)。每天读一点,坚持不懈,你就能成为专业高手。如果你能每两个月读一本好的编程书,大概一周 35 页,你很快就能对业内的知识有坚实的掌握,能很快让你从周围所有的人中脱颖而成。
我相信早在《Code Complete》1993 年第一版时里面就有这样的原话,但我们无法证实,因为没有那一版的书。经过这网上的搜索,发现了 Steve McConnell 在《人件》中引用的段落:
关于读书情况的统计数字让人非常的泄气:比如,大部分的软件开发人员手头上都没有一本关于他们的工作方面的书籍,更不用说读过一本。这事实让人对这个领域里的工程质量感到担忧。而对于我们这些写书的人,那更是悲剧。
我很痛心的读到 reddit 上的这些评论,看到人们把 stackoverflow.com 网站的宗旨使命理解为对编程书籍的否定。怀着一种对当前编程书籍市场复杂的心情,我要说,我喜欢编程书!我这个编程博客就起始于一篇推荐程序员必读书籍的文章开始的。很多我的文章都是在讲述我对于一些经典编程书籍里的核心思想浅显的理解。
如何让这看似矛盾的语句能够调和,如何能统一这动态的爱与恨?你看到了没有,处处都有编程书籍,处处都有编程书籍。
优秀的编程书是没有时间限制的。它们会超越语言的限制,IDE 的限制和平台的限制。它们不是解释how,而是why。如果你五年都不想清扫一下你的书架,那请相信我,你买错了编程书。
我的编程书柜是任何东西都换不去的。我无时不刻都在使用它他们。事实上,我写这篇文章时就翻阅了它们数次。
我不想再复述我的这些推荐的读物,因为这些年我一直在拿它们炫耀。
可我必须要号召的是:我最喜爱的五本最重要的编程书,你们每个正在从事编程工作的程序员都应该有拥有——并且要读。这些种子读物,极富实用价值,年复一年,不论我做什么样的编程工作,它们从未贬值。它们值得一读再读,每次我有了更多年的经验,回来重新阅读它们,都会让我对软件工程获得更深更明锐的认识,如果你还没有拥有这些书,那你在等待什么?
《代码大全》《不要让我思考》《人件》《程序员修炼之道》《软件工程中的真相与谬论》我的主张,让 stackoverflow.com 这样的网站成为这里永恒经典编程书籍的有益补充。没有任何途径,东西,形式能替代这些书籍。
另一方面,如果你不幸是《Perl 语言傻瓜书》的作者,那你要留意你的背后,因为我们很明确就是在针对你。