热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

程序员都不读书,但你应该读

本文由“外刊IT评论”网(www.aqee.net)荣誉出品鼠标垫问答网站stackoverflow.com的一个主要
Jeff-Atwood

本文由“外刊IT评论”网(www.aqee.net)荣誉出品

鼠标垫

问答网站stackoverflow.com的一个主要功能体现就是:软件开发人员无需再从书本上学习编程,就像Joel所说的:

程序员看起来都不再读书。市场上编程方面书籍的数量和编程从业人数相比来少的可怜。

2004年在《The Shlemiel Way of Software》一书中Joel也表达了相同的观点:

大部分的人都不读点什么或写点什么。大部分的程序员都不读软件开发方面的书籍,他们不去软件开发方面的网站,他们不去Slashdot参与讨论。

既然现在的程序员都不读书,他们如何学习编程?他们用最原始的方式:捋起袖子就写代码——同时开启第二个窗口来从互联网收集经验和知识。互联网是一部百科全书。获取知识信息更快,更高效,从网上获取编程知识明显是一种更聪明的方法。Doug McCune在Why I Don’t Read Books这篇文章里贴切的写出了他的感受,我相信他描述的这种心情是相当普遍的。

我认为技术图书出版业应该为此承担主要责任:

  1. 大部分编程书籍都写得很烂。写书出版的门槛,就我个人发现,已经基本上不存在了。图书出版业虽然很热闹,但这并不能说明它能提供比你在广袤的互联网上找到的更好的内容。虽然每年都有成百上千的编程图书上市,但也许可能只有2、3本是值得你花时间去读的。
  2. 编程书论斤买,而不是论知识量。我们会有这样一种感觉,编程书籍的厚度跟它的内容质量似乎成反比。书的部头越大,里面所承载的有用信息越少。那些动辄上千页的参考书究竟有什么用?你真的会用它来查找吗?拿着都费力。
  3. 都是面向新手的速成编程书籍。我丝毫没有反对新人进入编程领域的意思。但我从来都是认为“24小时[某种编程语言]速成教程”这类书对我们的这种职业是有害的。这种书都灌输着一种短视的思想,求快,求最简单的省事的做事方法,这导致初学者误入歧途——或就像我喜欢提到的,“PHP”。玩笑!玩笑!
  4. 编程书籍色情化。有些人认为把一大摞厚厚的,看起来很重要的编程书放在案头——基本上没看过——会映衬出是一个水平很高的程序员。正如David Poole曾经有一次在邮件中跟我说的,“这种事情我是绝对不会做的”,说的正是这些编程书籍色情化的现象。这也是我经过思考决定拒绝购买Knuth写的《计算机程序设计艺术》当当网 看 | 去 亚马逊 看一书的原因。我们应该去买有实践价值的书,你真正会去读的书,更重要的,你能拿来实用的书。

作为一名书作者,我很惭愧。我和别人也合写了一本编程书,而且我并不认为你应该买它。我不是在说反话。我想说的就是字面上的意思。但不管怎样,那并不是一本很糟糕的书。我对我的书合作者怀有最大的敬意。但你能从网上找到比这本书更丰富的信息。抱着一本死书不放是最不可取、最浪费生命的事。

互联网无疑正加速编程书籍的死亡,但有一些证据显示,甚至早在互联网诞生之前,很少有程序员遍读大量编程书籍。我很吃惊的在《代码大全》当当网 看 | 去 亚马逊 看一书中看到了这样的段落:

你可以炫耀一下了,因为你在读这本书。你已经学到了比软件产业里大部分人都要多的知识,因为大部分的程序员一年都不会读一本书(DeMarco and Lister 1999)。每天读一点,坚持不懈,你就能成为专业高手。如果你能每两个月读一本好的编程书,大概一周35页,你很快就能对业内的知识有坚实的掌握,能很快让你从周围所有的人中脱颖而成。

我相信早在《代码大全》当当网 看 | 去 亚马逊 看1993年第一版时里面就有这样的原话,但我们无法证实,因为没有那一版的书。经过这网上的搜索,发现了Steve McConnell在《人件》当当网 看 | 去 亚马逊 看中引用的段落:

关于读书情况的统计数字让人非常的泄气:比如,大部分的软件开发人员手头上都没有一本关于他们的工作方面的书籍,更不用说读过一本。这事实让人对这个领域里的工程质量感到担忧。而对于我们这些写书的人,那更是悲剧。

我很痛心的读到reddit上的这些评论,看到人们把stackoverflow.com网站的宗旨使命理解为对编程书籍的否定。怀着一种对当前编程书籍市场复杂的心情,我要说,我喜欢编程书!我这个编程博客就起始于一篇推荐程序员必读书籍的文章开始的。很多我的文章都是在讲述我对于一些经典编程书籍里的核心思想浅显的理解。

如何让这看似矛盾的语句能够调和,如何能统一这动态的爱与恨?你看到了没有,处处都有编程书籍,处处都有编程书籍。

优秀的编程书是没有时间限制的。它们会超越语言的限制,IDE的限制和平台的限制。它们不是解释how,而是why。如果你五年都不想清扫一下你的书架,那请相信我,你买错了编程书。

我的编程书柜是任何东西都换不去的。我无时不刻都在使用它他们。事实上,我写这篇文章时就翻阅了它们数次。

我的书架

我不想再复述我的这些推荐的读物,因为这些年我一直在拿它们炫耀。

可我必须要号召的是:我最喜爱的五本最重要的编程书,你们每个正在从事编程工作的程序员都应该有拥有——并且要读。这些种子读物,极富实用价值,年复一年,不论我做什么样的编程工作,它们从未贬值。它们值得一读再读,每次我有了更多年的经验,回来重新阅读它们,都会让我对软件工程获得更深更明锐的认识,如果你还没有拥有这些书,那你在等待什么?

《代码大全》当当网 看 | 去 亚马逊 看 《不要让我思考》当当网 看 | 去 亚马逊 看 《人件》当当网 看 | 去 亚马逊 看 《程序员修炼之道》当当网 看 | 去 亚马逊 看 《软件工程中的真相与谬论》
代码大全当当网 看 | 去 亚马逊 看 不要让我思考当当网 看 | 去 亚马逊 看 peopleware当当网 看 | 去 亚马逊 看 程序员修炼之道当当网 看 | 去 亚马逊 看 软件工程中的真相与谬论

我的主张,让 stackoverflow.com这样的网站成为这里永恒经典编程书籍的有益补充。没有任何途径,东西,形式能替代这些书籍。

另一方面,如果你不幸是《Perl语言傻瓜书》的作者,那你要留意你的背后,因为我们很明确就是在针对你。

[英文原文: Programmers Don't Read Books -- But You Should ]

推荐阅读
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 有关phpfgetss()函数的文章推荐10篇
    有关phpfgetss()函数的文章推荐10篇:了解如何使用PHP的各种文件函数。查看诸如fopen、fclose和feof之类的基本文件函数;了解诸如fgets、fgetss和f ... [详细]
  • 导读:在编程的世界里,语言纷繁多样,而大部分真正广泛流行的语言并不是那些学术界的产物,而是在通过自由发挥设计出来的。和那些 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Introduction(简介)Forbeingapowerfulobject-orientedprogramminglanguage,Cisuseda ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
author-avatar
染伊沐2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有