这几本值得你一看再看的程序员素养必备好书

Posted 人邮异步社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这几本值得你一看再看的程序员素养必备好书相关的知识,希望对你有一定的参考价值。

有些经典书,你每次翻起来看看都会有不一样的感悟。推荐以下几本书:

重构:改善既有代码的设计(第2版)

豆瓣评分:9.1 星级:4星半

所谓程序设计,很大程度上就是与计算机对话:我编写代码告诉计算机做什么事,而它的响应是按照我的指示精确行动。

肮脏的代码必须重构,但漂亮的代码也需要很多重构。

构的唯一目的就是让我们开发更快,用更少的工作量创造更大的价值。

修改是一个改造(重构)这样的过程:在不改变代码外部在行为的前提下,对代码产生,以改进程序的内部结构。本质上说,可以说是在代码中写出好的解释它的设计。

“在代码写好之后的改进设计”这种说法有点儿道理。在软件开发的历史时期,很多人想应该先设计而后编码:首先要有一个好的设计,然后才能开始编码。但是,随着时间的流逝,人们不断修改,因此根据原先设计所得的系统,整体逐渐衰弱。代码逐渐沉沦,设计工作从场景代码的工程堕落胡为砍乱劈的随性行为。

“每个手上都有一个巧手与此相似的。例如,成功的代码,我们也可以借来将它加工成设计好的代码。”

这本书是一本为专业的写文章的指南。我的目的是告诉你如何以一种能够控制且高效的方式进行程序。你将学会如何有条不漏地改进结构,并且不会出现错误,这就是正确的方式。

本书的读者是专业的程序员,也就是那些以写软件为生的人。本书的范例和讨论,涉及大量需要阅读和理解的代码。这些都是用javascript写成的例子,不过这些都是详细应该适用于大部分知识。为了了解一些书籍的内容,读者需要有一些编程经验,但需要的知识并不多。

代码整洁之道

豆瓣评分:8.7 星级:4星半

阅读本书有两种原因:第一,你是个程序员;第二,你想成为更好的程序员。很好。我们需要更好的程序员。

这是本有关编写好程序的书。它充斥着代码。我们要从各个方向来考察这些代码。从顶向下,从底往上,从里而外。读完后,就能知道许多关于代码的事了。而且,我们还能说出好代码和糟糕的代码之间的差异。我们将了解到如何写出好代码。我们也会知道,如何将糟糕的代码改成好代码。

你的代码在哪道门后面?你的团队或公司在哪道门后面?为什么会在那里?只是一次普通的代码复查,还是产品面世后才发现一连串严重问题?我们是否在战战兢兢地调试自己之前错以为没问题的代码?客户是否在流失?经理们是否把我们盯得如芒刺在背?当事态变得严重起来,如何保证我们在那道正确的门后做补救工作?答案是:技艺(craftsmanship)。

习艺之要有二:知和行。你应当习得有关原则、模式和实践的知识,穷尽应知之事,并且要对其了如指掌,通过刻苦实践掌握它。

假设你相信混乱的代码是祸首,假设你接受做得快的唯一方法是保持代码整洁的说法,你一定会自问:“我怎么才能写出整洁的代码?”不过,如果你不明白整洁对代码有何意义,尝试去写整洁代码就毫无所益!

缺乏“代码感”的程序员,看混乱是混乱,无处着手。有“代码感”的程序员能从混乱中看出其他的可能与变化。“代码感”帮助程序员选出最好的方案,并指导程序员制订修改行动计划,按图索骥。

如果程序员只是为满足编译器或解释器的需要而写代码,就会制造麻烦。

编码亦同此理。我们可以写下整洁代码的所有“感觉良好”的原则,放手让你去干(换言之,让你从自行车上摔下来)。那样的话,我们算是哪门子老师?而你又会成为怎样的学生呢?

不!本书可不会这么做。

学写整洁代码很难。它可不止于要求你掌握原则和模式。你得在这上面花工夫。你须自行实践,且体验自己的失败。你须观察他人的实践与失败。你须看看别人是怎样蹒跚学步,再转头研究他们的路数。你须看看别人是如何绞尽脑汁做出决策,又是如何为错误决策付出代价。

阅读本书要多用心思。这可不是那种降落前就能读完的“感觉不错”的飞机书。本书要让你用功,而且是非常用功。如何用功?阅读代码——大量代码。而且你要去琢磨某段代码好在什么地方、坏在什么地方。在我们分解,而后组合模块时,你得亦步亦趋地跟上。这得花些工夫,不过值得一试。

浪潮之巅(第四版)(上下册)

豆瓣评分:9.1 星级:4星半

本书梳理了IT产业发展的历史脉络,叙述了美国硅谷明星公司的兴衰沉浮。通过对各大公司从技术轨迹到经营理念的剖析,作者展现的不仅是科技产业更迭和大公司成长规律的历史景观,更能让读者更真实地了解科技产业,理解科技创新和商业公平的意义。

第四版增加了大约1/4的章节,包括:

·“八叛徒与硅谷”(关于罗伊斯、摩尔等“八叛徒”创办仙童公司,开创全世界半导体产业的事迹);

·“社交网络和Facebook”(以Facebook为核心,介绍社交网络的起源、发展和商业规律);

·“生产关系的革命”(介绍硅谷企业独到的管理特点,特别是企业中新型的人与人的关系,以及较为合理的分配制度);

·“汽车革命”(以特斯拉和字母表(Alphabet)旗下的Waymo为核心,介绍电动汽车和无人驾驶汽车产业);

·“工业革命和颠覆式创新的范式”(介绍从第一次工业革命开始,历次工业革命的规律性);

·“信息时代的科学基础”(介绍信息时代企业做事方法背后的科学基础和方法论,控制论、系统论和信息论在管理中的应用)。

计算之魂

豆瓣评分:9.1 星级:4星半

对计算机科学的掌握程度,决定了一个计算机行业从业者能走多远。在本书中,作者将 人文历史与计算机科学相结合,通过一些具体的例题,分 10 个主题系统地讲解了计算机科 学的精髓。这些例题是作者面试求职者时用到的考题,或是头部计算机公司和金融企业的面 试题。

作者在书中结合自己对计算机工程师的分级,详细讲解了每类题目不同层次的解决方法、 不同水平的人大约能思考到什么样的深度,深度阐述了题目背后的计算机科学精髓。通过对比 不同的解题思路,读者不仅可以衡量自己的水平,在职业的发展道路上走得更快,更可以深刻 理解并掌握计算机科学和计算思维,逐渐把握计算机科学这门艺术,不断获得成功。

码农”和计算机工程师其实并没有明确的界限,他们每天都在和计算机代码打 交道。只不过前者多少带点儿贬义,毕竟今天能写几行代码的人随处可见。计算机工 程师在某种程度上是自己往自己脸上贴金,在外人眼里他们再普通不过了。

但是,同样是计算机工程师,不同人的水平、贡献和影响力可谓有天壤之别。有些读者读过我之前写的一些书,知道我喜欢用朗道的方法,将计算机工程师分为五级。一级工程师的贡献是二级的10倍,二级是三级的10倍,以此类推。

若有志成为最好的计算机工程师要解决四个问题。

1.判断什么事情能做,什么不能做。从事计算机科学行业的人,最重要的一点 就是要明白做事情的边界,然后在边界内做改进。比如了解今天的人工智能能做什 么、不能做什么就很重要,否则很多努力都花在了制造不可能实现的永动机上。在 这本书中,我还会不断介绍计算机科学中的各种边界,从数学的边界,到图灵机的边 界,再到计算机系统和各种算法的边界。

2.任何重大发明都有预先要求(pre-requisites),比如要烧制瓷器,就要能将炉 温长时间保持在 1300℃,后者就是预先要求。在计算机领域也是如此,在尝试前人 未做过的事情时,要知道预先要求是否已经满足。这一点在应用型的研究以及工程当 中至关重要。

3.对计算机科学的深刻理解。这种深刻理解包括空间上的和时间上的。所谓空间上的,就是知识的广度和深度。所谓时间上的,就是从计算机科学的过去、现在和未来看清楚它的发展变化规律。

4.掌握计算机科学的艺术。计算机科学发展到后来成为一门艺术,因此高德纳(DonaldKnuth,高德纳是他的中文名)将自己的作品起名为《计算机程序设计艺术》是很有道理的。

在书中,作者会讲解大约 40 道例题,它们大多是比较难的问题, 此外作者还会以 思考题的形式提供大约 50 道面试题供大家参考。可以非常肯定地讲,如果一个 计算机工程师能够解决书中的大部分面试题,并且理解其中的道理,就完全可以被 Google、亚马逊、Facebook 或者微软这样的公司录用。当然,作者不希望这本书变成求职者面试前刷题的参考书,而是希望读者朋友通过具体的例子,从“术”的层面获得 “道”的层面的提升。因此,作者会详细分析解决这些例题所用到的计算机科学的精髓, 并且告之不同水平的人大约能思考到什么样的深度,这样大家如果有兴趣的话,可以衡量一下自己的水平,并且了解自己和前面各级之间的差距。

UNIX传奇:历史与回忆

豆瓣评分:8.8 星级:4星半

自1969年在贝尔实验室的阁楼上诞生以来,Unix操作系统的发展远远超出其创造者们的想象。它带动了许多创新软件的开发,影响了无数程序员,改变了整个计算机技术的发展轨迹。

本书不但书写Unix的历史,而且记录了作者的回忆,一探Unix的起源。本书试图解释什么是Unix,Unix是如何产生的,以及Unix为何如此重要。不过,本书绝非学术著作,它偏重回忆甚于历史。

以上是关于这几本值得你一看再看的程序员素养必备好书的主要内容,如果未能解决你的问题,请参考以下文章

JAVA程序员们值得一看的好书推荐

给Java程序猿们推荐一些值得一看的好书

[转] java书籍(给Java程序猿们推荐一些值得一看的好书 + 7本免费的Java电子书和教程 )

请教,推荐几本java类书籍

1月书讯 | 这几本开年新书倍受期待,每本书都教你一项技能

设计师:值得一看的设计类书籍