影响程序员一生的九本经典书籍

不论你擅长什么语言,也不论你正在从事什么工作,这些程序员的经典书籍,已是家喻户晓,阅读它们,不仅能提高自己的编程水平,而且能领悟到计算机巨人们,灵魂深处的那一丝精华。

人月神话

“图灵奖得主、“IBM360系统之父”作者Brooks颠覆了项目管理领域,长久不衰传奇经典!

软件开发人员、软件项目经理、系统分析师等IT从业者推荐收藏之软工圣经!

影响人力编程思想的经典著作......

>>

详细介绍

精彩内容试读

在众多软件项目中,缺乏合理的时间进度是造成项目滞后的最主要原因,它比其他所有因素加起来的影响还大。导致这种普遍性灾难的原因是什么呢?

首先,我们对估算技术缺乏有效的研究,更加严肃地说,它反映了一种悄无声息,但并不真实的假设——一切都将运作良好。

第二,我们采用的估算技术隐含地假设人和月可以互换,错误地将进度与工作量相互混淆。

第三,由于对自己的估算缺乏信心,软件经理通常不会有耐心持续地进行估算这项工作。

第四,对进度缺少跟踪和监督。其他工程领域中,经过验证的跟踪技术和常规监督程序,在软件工程中常常被认为是无谓的举动。

第五,当意识到进度的偏移时,下意识(以及传统)的反应是增加人力。这就像使用汽油灭火一样,只会使事情更糟。越来越大的火势需要更多的汽油,从而进入了一场注定会导致灾难的循环。

程序员修炼之道

全球票选程序员读物,常读常新的不老神话;

从开发到架构,主从实效永不过时;

一本被所有编程翘楚力荐过的书;

>>详细介绍

精彩内容试读

一扇破窗户,只要有那么一段时间不修理,就会渐渐给建筑的居民带来一种废弃感——一种职权部门不关心这座建筑的感觉。于是又一扇窗户破了。人们开始乱扔垃圾。出现了乱涂乱画。严重的结构损坏开始了。在相对较短的一段时间里,建筑就被损毁得超出了业主愿意修理的程度,而废弃感变成了现实。

“破窗户理论”齐齐发了纽约和其他大城市的警察部门,他们对一些轻微的案件严加处理,以防止大案的发生。这起了作用:管束破窗户、乱涂乱画和其他轻微违法事件减少了严重罪案的发生。”

不要留着“破窗户”(低劣的设计、错误决策、或者糟糕的代码)不修。发现一个就修一个。如果没有足够的时间进行适当的秀丽,就用木板把它钉起来。或许你可以把出问题的代码放入注释(comment out)、或是显示“未实现”消息,或是用虚设的数据(dummy data)加以替代。采取某种行动防止进一步的损坏,并说明情势处在你的控制之下。

我们看到过整洁、运行良好的系统,一旦窗户开始破裂,就相当迅速地恶化。还有其他一些因素能够促生软件腐烂,我们将在别处讨论它们,但与其它任何因素相比,置之不理都会更快地加速腐烂的进程。

你也许在想,没有人有时间到处清理项目的所有碎玻璃。如果你继续这么想,你就最好计划找一个大型垃圾罐,或是搬到别处去,不要熵赢得胜利。

代码大全(第2版)

两届Software Jolt Award震撼大奖得主!

软件开发世界的地图!

经典中的经典!

>>详细介绍

精彩内容试读

为变量命名时最重要的考虑事项是,该名字要完全、准确地描述出该变量所代表的事物。获得好名字的一种实用技巧就是用文字表达变量所代表的是什么。通常,对变量的描述就是最佳的变量名。这种名字很容易阅读,因为其中并不包含晦涩的缩写,同时也没有歧义。因为它是对该事物的完整描述,因此不会和其他事物混淆。另外,由于这一名字所表达的概念像是,因此也很容易记忆。

对于一个表示美国奥林匹克代表团成员数量的变量,你可能会把它命名为numberOfPeopleOnTheUSOlympicTeam。表示运动场中坐椅数量的变量可能会命名为numberOfSeatsInTheStadium。表示某国代表团在现在奥运会上获得的最高分数的变量可能会命名为maximumNumberOfPointsInModernOlympics。表示当前利率的变量最好命名为rate或interestRate,而不是r或x。你明白了吧。

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

软件开发的不朽经典!

生动阐述重构原理和具体做法。

普通程序员进阶到编程高手必须修炼的秘笈!

(本书需要编程基础)

>>详细介绍

精彩观点论述

三次法则:第一次做某件事时只管去做;第二次做类似的事会产生反感,但无论如何还是可以去做;第三次在做类似的是,你就应该重构。事不过三,三则重构。

在重构中引入间接层的某些价值:

允许逻辑共享

分开解释意图和实现

隔离变化

封装条件逻辑

封装条件逻辑。对象有一种奇妙的机制:多态消息,可以灵活而清晰地表达条件逻辑。将条件逻辑转化为消息形式,往往能降低代码的重复、增加清晰度并提高弹性。

代码整洁之道

抛弃糟糕,拥抱整洁!

提高代码阅读水平,提升代码质量!

当今代买大全,体会代码之美!

大量独创性和创新性的技术!

(本书需要编程基础)

>>详细介绍

精彩内容试读

只要你干过两三年编程,就有可能曾被某人的糟糕的代码绊倒过。如果你编程不止两三年,也有可能被这种代码拖过后腿。进度延缓的程度会很严重。有些团队在项目初期进展迅速,但又那么一两年的时间却慢如蜗行。对代码的每次修改都影响到其他两三处代码。修改无小事。每次添加或修改代码,都得对那堆纹柴。这团乱麻越来越大,再也无法理清,最后束手无策。

随着混乱的增加,团队生产力也持续下降,趋向于零。当生产力下降时,管理层就只有一件事可做了:增加更多人手到项目中,期望提升生产力。可是新人并不熟悉系统的设计。

他们搞不清楚什么样的修改符设计意图,什么样的修改违背设计意图。而且,他们以及团队中的其他人都背负着提升生产力的可怕压力。于是,他们制造更多的混乱,驱动生产力向零那端不断下降。

计算机程序的构造和解释

成型于美国麻省理工的一本教材!

被全世界100多所知名院校吸纳为教材!

清晰、简洁、富于才智!

(本书需要编程基础)

>>详细介绍

精彩内容试读

一个强有力的程序设计语言,不仅是一种指挥计算机执行任务的方式,它还应该成为一种框架,使我们能够在其中组织自己有关计算过程的思想。这样,当我们描述一个语言时,就需要将注意力特别放在这一语言所提供的,能够将简单的认识组合起来形成更复杂认识的方法方面。每一种强有力的语言都为此提供了三种机制:

基本表达形式,用于表示语言所关心的最简单的个体。

组合的方法,通过他们可以从较简单的东西触发构造出符合的元素。

抽象的方法,用过它们可以为复合对象明明,并将它们当做单元去操作。

在程序设计中,我们需要处理两类要素:过程和数据(以后读者将会发现,它们实际上并不是这样严格分离的)。非形式地说,数据是一种我们希望去操作的“东西”,而过程就是有关操作这些数据的规则的描述。这样,任何强有力的程序设计语言都必须能表述基本的数据和基本的过程,还需要提供对过程和数据进行组合和抽象的方法。

算法导论

攻克算法难题,由易到难,步步精解!

一书多用,涵盖广!

伪代码描述算法,分析全面。

算法界经典书籍!

>>详细介绍

精彩内容试读

简单的说,所谓算法(algorithm)就是定义良好的计算过程,它取一个或一组值作为输入,并产生一个或一组值作为输出。亦即,算法就是一系列的计算步骤,用来将输入数据转换成输出结果。

我们还可以将算法看做是一种工具,用来解决一个具有良好规格说明的计算问题。有关该问题的表述可以用通用的语言,来规定所需的输入/输出关系。与之对应的算法则描述了一个特定的计算过程,用于实现这一输入/输出关系。

编程珠玑

历史上最伟大的计算机科学著作之一。

融深邃思想、实战技术与趣味轶事于一炉的奇书;

带你真正领略计算机科学之美!

(你可能需要一点C/C++基础)

>>详细介绍

精彩内容试读

一位程序员在电话中向我诉说了他所碰到的问题。花大约一刻钟的时间,我们触及到实际问题,并找到位图解决方案。这样,该程序员才用了区区几十行代码,花了他两个小时来实现。这比在打电话以前我们恐惧设想的编写数百行代码来实现,花费数周编程时间要好得多。该程序的运行速度变得飞快:当磁盘合并排序也许会花许多分钟时,该程序只比读取输入与写入输出所花的时间多一点,大约是10秒。答案3包含了于数个程序有关的计时详细信息,这些程序都是为完成该任务而设计的。

在此案例分析中我们可以发现,这些事实所包含的第一个教训是:仔细分析小问题有时可以带来巨大的实际爆出。在本例中,花几分钟的时间来仔细分析,导致了代码长度、编程时间和运行时间减少了一个数量级。Chunk Yeager将军(第一个飞行速度超过音速的人)使用“简单、较少的零部件、易于维护、非常强壮”这样的词汇来赞扬飞机的引擎系统。该程序就包含了这些属性。然而,如果需求规格的某些方面发生变化的话,程序的特定结构将难以修改。本例除了极力宣扬巧妙编程外,还示范了很多普遍原则。

设计模式

面向对象设计人员的圣经和词典!

实例解析设计一个文档编辑器应用。

类行为模式表达式解析。

(本书需要编程基础)

>>详细介绍

精彩内容试读

设计模式之Prototype(原型)

定义:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.

Prototype 模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

如何使用?

因为Java 中的提供clone()方法来实现对象的克隆(具体了解clone()按这里),所以

Prototype 模式实现一下子变得很简单.

End

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181106B1KKYA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券