我在生活中所取得的绝大部分成就,可以直接归功于我读过的书。我从未有过真正的导师。当我想学习如何投资房地产时,没有人向我展示其中发诀窍,我得自己弄明白,是书帮了我大忙。在我第一次想学习编程时,我也没有真正的导师。我不认识任何程序员,我那时只是个孩子。于是,我求教于书。当我在自己的软件开发职业生涯中衔枚疾进的时候,我依然没有机会求教于人,于是我求教于更多的书。
创办一家企业——书对我鼎力相助。学会股票交易——靠的是书。改善我的生活,让我更加自律,培养自尊,培养意志力,乃至于塑身健体,无一不是书的功劳。一切一切都是书的功劳。也许你像我一样,没有机会接触到一位真正的导师可以指导自己走上编程与生活的道路。衷心希望本章能够有助于你达成这一目标,因为人生旅程没有终点,从来没有终点。
这就是我决定在这里列出我最喜欢的书的清单的原因,这样你就可以创建属于自己的虚拟导师。对我来说,列出几百本书的想法很诱人,但是为了节省篇幅我对书单一再做了减法,只保留了我认为最好的书。
身为软件开发者,你应该对怎样编写优质代码特别感兴趣,因为这是软件开发者最基本的技能之一。下面是关于这个主题我认为最好的一些书,这些书对我的职业生涯产生了重大影响,直接提高了我编写的代码的质量。
1、《代码大全(第2版)》(Code Complete: A Practical Handbook of Software Construction, Second Edition)这是一本关于如何编写优质、整洁、易于理解、不需要过多解释就可以清晰表达代码含义的基础性经典书籍;它从根本上改变了我编写代码和创建软件的思维方式。它讲述了如何调试代码,如何创建高质量的软件,以及软件开发者都应该理解的其他许多主题;虽然这本书在方法论上有点儿过时,但对每一位严谨的软件开发者来说,它仍然是一本必读书籍。
2、《代码整洁之道》(Clean Code: A Handbook of Agile Software Craftsmanship)这本书教你如何编写整洁、高度可被理解的代码,书中还包含重构既有代码的实例。书中描述的原理和最佳实践从本质上讲是永恒的,大大有助于理解用任何编程语言编写的代码;《代码整洁之道》弥补了《代码大全》在方法论上有点儿过时的不足,这本书中描述了如何以敏捷方法开发与维护软件。
3、《敏捷软件开发:原则、模式与实践》(Agile Software Development, Principles, Patterns, and Practices)这本书的主题非常广泛,涵盖了敏捷方法及其应用,面向对象的设计原则、设计模式等内容,所有内容都附有精彩的示例。
1、《设计模式》(Design Patterns: Elements of Reusable Object-Oriented Software)
这是一部经典著作,放在今天仍然不过时,因为你通常从正在维护的代码中看到它的设计模式,或者从正在编写的代码中领会到一些模式;每一个软件开发者至少应该理解本书中提出的基础的经典设计模式。
2、《计算机软件测试》(Testing Computer Software)对全面了解什么是软件测试而言,这是另一本必不可少的经典著作。这本书涵盖了每一个软件开发者都应该了解的有关测试与测试方法的基本知识。
3、《算法导论》(Introduction to Algorithms)这本书读起来不轻松,需要一些数学功底,但它是当今软件开发领域关于常用的现代算法的最好的书之一。每一位软件开发者都应该熟悉这些算法。
4、《企业应用架构模式》(Patterns of Enterprise Application Architecture)这本书囊括了如何编写健壮的大规模应用程序所需要的一切知识。尽管这本书重点是企业级应用系统,但是书中的许多原则与模式适用于任何类型的大规模软件应用。
1、《重构:改善既有代码的设计》(Refactoring: Improving the Design of Existing Code)维护遗留代码的一项基本技能就是重构。重构就是改变代码的结构但不改变代码的功能。这本书涵盖了你需要知道的每一种主要的重构模式。现在,这些重构工作中大部分已经不再需要手工完成,因为它们被集成到IDE之中,但是这本书教你这些重构模式的内涵,以及如何在需要的时候实现这些重构模式。
2、《修改代码的艺术》(Working Effectively With Legacy Code)它被认为是学习如何处理和维护遗留代码的最好的一本书。它涵盖了在处理遗留系统时你需要考虑的每一个主题,包括安全地重构、标识要修改代码的地方、处理非面向对象系统等。我强烈建议每个软件开发者都阅读这本书,不止一次。
3、《重构与模式》(Refactoring to Patterns)通过重构来清理遗留代码的最佳方法之一是简化代码,尤其是当遗留代码是一个烂摊子的时候。本书以循序渐进的方式向你展示如何复用既有代码,如何使用软件开发中常见的设计模式重构代码。这并不意味着你应该把代码中的每一个位都重构其设计模式,或者在一个简单的解决方案就能奏效的情况下还要强行使用过度复杂的模式,这本书的内容肯定在很多时候会派上用场。
1、《软技能:代码之外的生存指南》 (Soft Skills: The Software Developer’s Life Manual)这本书的内容涵盖了职业生涯规划、自我营销、学习、生产力、理财、健康和健身等多项内容,甚至包括如何掌控心理和心态。我认为每位软件开发者都应该读这本书
2、《程序员修炼之道:从小工到专家》(The Pragmatic Programmer: From Journeyman to Master)这是一本非常流行的编程书,它基于一些经验丰富的软件开发者的智慧,讲述了所有有关软件开发者如何推进职业生涯的事情。这本书非常有趣,可读性强,书中描述的都是在软件开发中真实困境中的真实故事。
3、《我编程,我快乐:程序员职业规划之道》(The Passionate Programmer: Creating a Remarkable Career in Software Development)这本书里充满了实用的建议,对你作为软件开发者的职业生涯规划,以及应对你不可避免要面对的斗争,都大有裨益。这本书的内容包括学习如何提升你的技能,如何改变你的态度,如何保持积极性,如何充满激情地生活,当然,还有关于如何推进你的事业发展的内容。
1、《如何赢得朋友及影响他人》(How To Win Friends & Influence People)从这本书开始吧。这是有史以来写得最好的关于如何与他人互动的书之一。不要让书名或者书的年代欺骗你。这是一本经典书,经常出现在许多成功人士的图书排行榜上。我每年至少读一次这本书,有时候读两次。关于这本书,我怎么夸奖都不为过——它改变了我的人生。
2、As a Man Thinketh这是一本短小精悍的书,也是一本老书,但却极其有效。这本书中呈现的心态就是在生活中取得成功必需的心态。这本书集中描述了你的思想,以及你如何选择去感知这个世界,而你对世界的感知又最终决定了你的生活和世界会是什么样子以及它又会变成什么样子。
3、Maximum Achievement: Strategies and Skills That Will Unlock Your Hidden Powers to Succeed如果我不得不只能选出一本关于个人发展的书,那就是它了。为什么呢?这本书里有许多概念,而这些概念来源于有关这一主题的其他经典书籍,然后以一种简洁和清晰的方式加以解释。这本书涵盖了有关个人发展的广泛主题,为你提供了许多货真价实的建议。
4、《我的人生样样稀松照样赢:“呆伯特”的逆袭人生》(How to Fail at Almost Everything and Still Win Big)选出最后一本推荐的书是很困难的。还有那么多优秀的有关个人发展的书籍,但我只能选择这一本了,因为它的作者不是别人,正是斯科特·亚当斯,就是“呆伯特”的创作者。但他的成就远不只这些。这本书阐述了一种生活哲学,让你不由自主地成为人生大赢家。我从来没有料到这么一位留着一头尖尖头发的老板卡通人物会有如此智慧,但这本书却做到了(如果你真的想看看斯科特·亚当斯的书会多么深奥,你真的想烧一烧脑,我建议你看看他的另一本名著,《上帝的残屑:对复杂世界的另类思索》(God’s Debris: A Thought Experiment)[18]。不过,别说我没有警告你。)
前言:有时候,作为软件开发者,深入挖掘是一件既有趣又富有启发性的事。我说的深入挖掘是什么意思?我的意思是通过抽象概念和剖析事物来理解事物是如何运作的。当然,为了完成我们的日常工作,我们并不需要知道CPU是如何工作的,也不需要了解操作系统的底层细节,但是,有时挖掘这些细节是很有趣的。因此,如果你想深入挖掘下去,这里有几本书可以推荐给你,它会带你达到你渴望的深入程度,满足我们那种孩子般的好奇心。
1、《编码的奥秘》(Code: The Hidden Language of Computer Hardware and Software)这本书填补了我在计算机硬件、底层计算机科学与计算机体系结构概念上的许多知识空白。这本书最好的一点在于,它的描述方式十分有趣,充满娱乐、易于消化。我强烈建议每位软件开发者都来阅读这本书,并不是因为你需要了解本书的内容,而是因为你学习这本书中的内容会带来很多乐趣。另外,你会以一种无法想象的方式理解计算机与代码。
2、《计算机程序的构造和解释》(Structure and Interpretation of Computer Programs)这是一本深奥的关于编程的书籍,尤其当你读完这本书并开始做书中的所有练习的时候。我认为你会发现这些经验是大有裨益的,它可能会改变你的思维方式和编程方式,特别是如果你从未被听说过函数式编程的概念的话。
3、《程序员面试金典》(Cracking the Coding Interview: 150 Programming Questions and Solutions)如果你想在微软或者谷歌这样的大公司里找到一份工作,这本书是必须要读的。如果你想通过白板面试,也就是说你必须编写一个解决方法以解决一些算法问题,必须读这本书。这本书几乎涵盖了所有需要解决的计算机科学中难度很大的算法类型的程序,而这些内容在编码面试中恰恰是经常要被问到的。这本书涵盖了基础类型的算法与数据结构,还提供了实践性问题,可以助你一臂之力。如果你想深入学习如何解决算法类型的编码问题,这本书就是你需要的。
4、《计算机程序设计艺术》(The Art of Computer Programming)这一套四卷版的鸿篇巨制是我列为“有一天要读”的书,但我迄今为止还没敢触碰它。为什么?因为读这套书是一项巨大的事业。这套书深入细致地讲述了计算机科学的算法,都不是些简单的东西。如果你真心想要深入学习算法,而且你已经准备好了去面对烦琐的数学问题,那就去读这套书吧。
5、《编译原理(第2版)》(Compilers: Principles, Techniques, and Tools, Second Edition)这本书描述的都是神秘深奥的内容,深入到编译器和操作系统的领域。这本书中的有些信息可能有点儿过时了,但是如果你真的对编译器是如何工作的感兴趣,并且可能想自己编写一个编译器的话,请仔细阅读这本书。
前言:尽管我同意,你可能会认为深入算法或编译程序的领域既有趣又好玩,但我不得不承认:并非所有的软件开发者都是如此。因此,我要向你展示的是我认为大多数软件开发者都会觉得非常有趣和好玩的书。每个人的兴趣点不尽相同。
1、《哥德尔、艾舍尔、巴赫——集异璧之大成》(Gödel, Escher, Bach: An Eternal Golden Braid)我第一次听到这本书是因为有人说他们希望能在第一次读罢这本书之后再读一遍。这就足以让我购买和阅读这本书了,果然没有令我失望。它不是计算机科学或者编程的书,但是有许多与编程相关的概念,深入研究了充满矛盾和似是而非的逻辑领域。
2、Magic 2.0系列我没有读过几本小说,但这个系列书吸引了我,因为它们把D&D元素与计算机黑客、时间旅行等内容完美结合起来。它们很有趣。
3、《火星救援》(The Martian)我读这本书是因为它是程序员写的,我喜欢空间探索,而且很多人一直都在谈论这部小说。这部小说没有让我失望。这本书非常有趣、惊险刺激,而且很烧脑。这本书里的每一个情节我都非常喜欢。
4、《雪崩》(Snow Crash)就小说类书籍而言,这可能是最受欢迎的书。因此,我觉得如果我没向你推荐这本书的话,我会对不起你。
前言:生活中,没有什么可以真正替代被人踢屁股的感觉。我们正是在逆境中学会了无惧困难和坚毅顽强。生活会给你带来巨大的压力。生活有时会很残酷、很沉重。你会失去前进的动力。你会选择放弃或者逃避。如果你遇到这些状况,下面这几本书会对你有所帮助。
1、《反障碍:如何从障碍中获益》(The Obstacle is the Way)这本书的主要观点:所有发生在你身上的坏事情都不能打败你,反而可以促使你变得更加强大,帮助你找到正确的道路。这些观点大多来自斯多葛学派哲学,它们是使用历史故事来证明的。
2、The 10X Rule这本书告诉你,如何设定比你的目标还要高10倍或者更高的目标,以及如何投入比你想象的还要多10倍的努力来实现这些目标。它教会你如何能够并且应该采取大规模行动以获取成功的生活。这本书一定会触动你,我保证。这本书的作者是格兰特·卡登(Grant Cardone),在我读了他的这本书以及下一本我要推荐的书之后,我很快把他当作为我人生中最伟大的榜样之一。
3、Be Obsessed or be Average你周围有没有人说你很痴迷,你的做事方式不够健康,因为你工作太过辛苦了?这本书将教会你如何礼貌地回击他们,然后继续燃烧你的激情。这本书谈到:你可以利用驾驭自己的力量来达到任何你想要去的地方。它还谈到:有些人会试图击垮你,你该如何跟他们打交道。
4、The War of Art这本书至少我读过十几次了,这本书实在是太棒了。这本书的主要论点:坐下来开始着手做某项工作的时候,你会意识到它总是很难的,你往往会觉得没有动力,但作为一个专业人士,你无论如何都要坚持下去。这本书教会我们:每当我们试图以各种方式成就更好的自己时,如何以不屈不挠的精神克服生活当中我们所面临的重重阻力。另外,它写得很富有诗意,所以读起来令人兴趣盎然。
1、上述所有书应该能够让你忙上一段时间了。如果你把这份清单上的所有书都读完,我保证你的人生会得到极大的改善。但热爱读书的旅程不应该就此结束。如果你还没有养成阅读的习惯,我会向你发出挑战。世间好书如此众多,很难把我喜欢的东西浓缩到这一张书单上。
2、这里我还有最后一些建议来助你一臂之力:一定要确保你把时间花在读好书上。要去寻找那些别人强烈推荐的书。手边永远有一份阅读清单,也就是你想读的下一本书是哪一本,只有这样你才不会为“寻找一本好书”而感到困惑。
3、如果可以的话,你可以利用有声读物。这样,当你跑步、走路、举重、开车或做其他活动的时候,你都可以很容易地聆听一本有声读物。花点儿钱定购这样的内容,别害怕买的书太多了。
4、最后,把你所学到的东西付诸行动。知识不付诸实践,就毫无价值。不要只看书,要照着书中的内容去实践。想一想如何将你所学的东西运用到你自己的生活当中。