程序员修炼秘籍:每一个程序员都应读的书

引子


编辑:来知晓
原文:伯乐在线
声明:更多相关内容见公众号,来知晓

编者按:本文主要向大家介绍国外资深程序员推荐——每个程序员都应读的书,主要包括基础应用、实用技巧、原理机制等方面。以个人角度来看,确实含金量颇高,几乎都为豆瓣评分9分以上的经典之作,几十年前提出的编程思想及其实践,至今仍焕发巨大活力。我相信,开卷有益。

在这里插入图片描述

​ StackOverflow 网友 Bert F 发帖提问:哪本最具影响力的书,是每一个程序员都应该读的?

  “若能时光倒流,回到过去,作为一个开发人员,如果让你选择,在职业生涯初期的程序员一定应该读的一本书,你会选择哪本书呢?”

  不少程序员纷纷响应,在推荐时也留下评语理由,让我们知其然也知其所以然。伯乐在线整理编译这个问答贴后,下面就按照各书的推荐数排列,遴选部分后,形成一个程序员书单。

在这里插入图片描述

经典书单


  1. 《代码大全》 史蒂夫·迈克

  推荐数:1684

code complete 代码大全

  “优秀的编程实践的百科全书,《代码大全》注重我的技术,其中全部东西加起来,就是咱们本能所说的“编写整洁的代码”。这本书有 50 页在谈论代码布局。” —— Joel Spolsky安全

  对于新手来讲,这本书中的观念有点高阶了。到你准备阅读此书时,你应该已经知道并实践过书中 99% 的观念。– esac网络

  2. 《程序员修炼之道

  推荐数:1504

Pragmatic Programmer 程序员修炼之道

  对于那些已经学习过编程机制的程序员来讲,这是一本卓越的书。或许你仍是在校生,但对程序员要本身做什么,还感受不是很完全,就像草图和架构之间的差异。虽然你在学校课堂上学到的是画图,你也能够画的很漂亮,但若是某人要你独自画一个 P2P 的音乐交换网络图,那这本书就适合你了。—— Joel编程语言

  3. 《计算机程序的构造和解释

  推荐数:916

Structure and Interpretation of Computer Programs 计算机程序的构造和解释

  就我而言,目前为止这本书对我影响最大的一本编程书。

  《代码大全》、《重构》和《设计模式》这些经典书会教给你高效的工作习惯和细节。其余像《人件集》、《人月神话》这些书会深刻软件开发的心理层面。其余书籍则处理算法。这些书都有本身所属的位置。

  然而《计算机程序的构造和解释》与这些不一样。这是一本会启发你的书,它会燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它会让你有种敬畏,让你难以抑制地渴望学习更多的东西。其余书或许会让你成为一位更出色的程序员,但此书将必定会让你成为一名程序员。

  一些人认为此书不适合新手。我认为,虽然我并不彻底认同要有一些编程经验才能读此书,但我仍是必定推荐给初学者。毕竟这本书是写给著名的6.001,是麻省理工学院的入门编程课程。此书或许需要多作努力(尤其是你在练习的时候),但这个价是对得起这本书的。

  你还不确信么?那就读读初版的前言或序言。网上有免费的电子版。 - Antti Sykäri

  4. 《C程序设计语言

  推荐数:774

The C Programming Language C 程序设计语言

  这本书简洁易读,会教给你三件事:C 编程语言;如何像程序员同样思考;底层计算模型。(这对理解“底层”很是重要)—— Nathan

  5. 《算法导论

  推荐数:671

Introduction to algorithms 算法导论

  《代码大全》教你如何正确编程;《人月神话》教你如何正确管理;《设计模式》教你如何正确设计……

  在我看来,代码只是一个工具,并不是精髓。开发软件的主要部分是建立新算法或从新实现现有算法。其余部分则像从新组装乐高砖块或建立“管理”层。我依然梦想这样的工作,个人大部分时间(>50%)是在写算法,其余“管理”细节则留给其余人…… —— Ran Biron

  6. 《重构:改善既有代码的设计

  推荐数:617

Refactor 重构:改善既有代码的设计

  我想,我不得不推荐《重构》:改进现有代码的设计。—— Martin

  我必须认可,我最喜欢的编程语录是出自这本书:任何一个傻瓜都能写出计算机能理解的程序,而优秀的程序员却能写出别人能读得懂的程序。—— Martin Fowler

  7. 《设计模式

  推荐数:617

Design Patterns 设计模式

我认为四人帮编著的《设计模式》是一本极为有用的书。虽然此书并不像其余建议同样有关“元”编程,但它强调封装诸如模式一类的优秀编程技术,于是鼓励其余人提出新模式和反模式(antipatterns),并运用于编程对话中。—— Chris Jester-Young

  8. 《人月神话

  推荐数:588

The Mythical Man-Month 人月神话

  9. 《计算机程序设计艺术

  推荐数:542

The Art of Computer Programming 计算机程序设计艺术

  这是高德纳倾注心血写的一本书。—— Peter Coulton

  10. 《编译原理》(龙书)

  推荐数:462

Compilers: Principles, Techniques, and Tools 编译原理:原理、技术与工具

  我很奇怪,竟然没人提到龙书。此书让我知道了编译器是多么地神奇绝妙。- DB

  11. 《深入浅出设计模式

  推荐数:445

  我知道四人帮的《设计模式》是一本标准书,但倒不如先看看这部大部头,此书更为简易。一旦你了解了基本原则,就能够去看四人帮的那本圣经了。- Calanus

  12. 《哥德尔、艾舍尔、巴赫书:集异璧之大成》

  推荐数:437

  若是想真正深刻阅读,我推荐道格拉斯·侯世达(Douglas Hofstadter)的《哥德尔、艾舍尔、巴赫书》。他极为深刻研究了程序员每日都要面对的问题:递归、验证、证实和布尔代数。这是一本很出色的读物,难度不大,偶尔有挑战,一旦你要鏖战到底,将是很值得的。 – Jonik

  13. 《代码整洁之道

  推荐数:329

  虽然《代码整洁之道》和《代码大全》有不少共同之处,但它有更为简洁更为实际的清晰例子。 – Craig P. Motlin

  14. 《Effective C++》和《More Effective C++

  推荐数:297

  在我职业生涯早期,Scott Meyer 的《Effective C++》和后续的《More Effective C++》都对个人编程能力有着直接影响。正如当时的一位朋友所说,这些书缩短你培养编程技能的过程,而其余人可能要花费数年。

  去年对我影响最大的一本书是《大教堂与市集》,该书教会我颇有关开源开发过程如何运作,和如何处理我代码中的 Bug。 – John Channing

  15. 《编程珠玑

  推荐数:282

  尽管我不得不羞愧地认可,书中一半的东西我都没有理解,但我真的推荐《编程珠玑》,书中有些使人惊奇的东西。 – Matt Warren

  16. 《禅与摩托车维修艺术 / Zen and the Art of Motorcycle Maintenance》

  对我影响最大的那本书是 Robert Pirsig 的《禅与摩托车维修艺术》。无论你作什么事,老是要力求完美,完全了解你手中的工具和任务,更为重要的是,要有乐趣(由于若是你作事有乐趣,一切将自发引向更好的结果)。 – akr

  (编注:关于这本书,也可以看看阮一峰的读后感。)

  17. 《Coders at Work / 编程人生

  一本很是有影响力的书,能够从中学到一些业界顶级人士的经验,了解他们如何思考并工作。 – Jahanzeb Farooq

  18. 《Surely You’re Joking, Mr. Feynman! / 别闹了,费曼先生!

  虽然这本书可能有点偏题,但无论你信不信,这本书曾在计算机科学专业课程的阅读列表之上。一个优秀的角色模型,一本有关好奇心的优秀书籍。 – mike511

  19. 《Effective Java 中文版》

  此书第二版教你如何编写漂亮并高效的代码,虽然这是一本 Java 书,但其中有不少跨语言的理念。 – Marcio Aguiar

  1. 交互设计之路

    英文名:《The Inmates Are Running The Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity》

    作者:Alan Cooper,人称 Visual Basic 之父,交互设计之父。

  本书是基于众多商务案例,讲述如何建立更好的、高客户忠诚度的软件产品和基于软件的高科技产品的书。

​ 本书列举了不少真实可信的实际例子,说明目前在软件产品和基于软件的高科技产品中,广泛存在着“难用”的问题。作者认为,“难用”问题是由这些产品中存在着的高度“认知摩擦”引发的,而问题根源在于现今软件开发欠缺为用户利益着想的前期“交互设计”阶段。

  本书虽然是一本面向商务人员而编写的书,但也适合于全部参与软件产品和基于软件的高科技产品开发的专业人士,以及关心软件行业和高科技行业现状与发展的人士阅读。

  21. 《Unix 编程艺术

  It is useful regardless operating system you use. – J.F. Sebastian

  无论你使用什么操作系统,这本书都颇有用。 – J.F. Sebastian

  22. 《Practices of an Agile Developer / 高效程序员的 45 个习惯:敏捷开发修炼之道

  45个习惯,分为 7 个方面:工作态度、学习、软件交付、反馈、编码、调试和协作。

  每个具体的习惯里,一开始提出一个谬论,而后展开分析,以后有正队性地提出正确的作法,并设身处地地讲出了正确作法给你我的“切身感觉”,最后列出几条注意事项,帮助你修正本身的作法(“平衡的艺术”)。

  23. 《Test-Driven Development by Example. / 测试驱动开发

  前面已经提到的不少书都启发了我,并影响了我,但这本书每位程序员都应该读。它向我展现了单元测试和 TDD 的重要性,并让我很快上手。 – Curro

  我不关心你的代码有多好或优雅。若是你没有测试,你或许就如同没有编写代码。这本书获得的推荐数应该更高些。人们讨论编写用户喜欢的软件,或既设计出色并健壮的高效代码,但若是你的软件有一堆 bug,谈论那些东西毫无新意。– Adam Gent

编者结语


作为一名毕业转行撸代码的小编,近两年的工作体会告诉我,少走弯路,即是捷径。而多读经典书目,吸取前辈高人总结的宝贵经验,就是少走弯路的一种途径。

以上书单中,已看过:C程序设计语言、程序员修炼之道、禅与摩托车维修艺术,部部令我受益匪浅。

难以想象,《C程序设计语言》能用200页左右的简明文字,用简单的示例阐释了C语言的核心知识。也许,这就是元典的好处,毕竟C语言创始人写的C语言教程,总比嚼了几次口香糖后别人写的书,信息表达要准确精炼很多,从而可以让我们少走弯路。

转载整理这篇老文章,一方面为对写代码感兴趣的同道读者,一方面也为自己,想留个备份,方便查阅,同时督促自己每年至少读一两本大部头技术著作,提升内核。

如小伙伴们对非科班转行程序员入职大厂的一些经验感兴趣,请在下方评论留言:1,如需求较大,后面肝一篇长文将个人经历和感悟分享出来。

最后,愿诸君开卷有益。

本文转载自:https://www.shangmayuan.com/a/b0b23212d1334031a47238a9.html
英文原贴:http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read?tab=votes#tab-top
声明:本文仅作转载分享,部分内容有删改