书籍 可能会影响程序员职业生涯的七本书

lanzhiheng · 2020年03月25日 · 最后由 qinsicheng 回复于 2024年03月04日 · 6669 次阅读

推荐 7 本有助于程序员成长的书籍,附上简短书评。同步发布于个人博客:https://www.lanzhiheng.com/blogs/7-books-for-programmers


本文的标题说的是“可能”会影响职业生涯,之所以用可能二字是因为我并不知道它们对你来说是否也会有同样的影响,但从自身来看,这些书对我影响很大。当然这些书并不能教会你如何年薪几十万(我自己也尚未达到这个水平)。“那你有什么资格在这里给大众推荐书籍?”要回答这个问题,似乎绞尽脑汁也想不到有说服力的答案,硬要回答,那就是相信自己作为一名开发者,身上所具有的某种类似于“直觉”的东西。

黑客与画家

若真的要在所有书里面找出对自己影响最大的一本,估计要首推《黑客与画家》。作者是Paul Graham,如今出版的中文译本是由阮一峰先生翻译的。见到这位良心译者就能知道此书的中文版品质不会太差。作者被称为硅谷创业之父,估计是因为他所创建的孵化器培育了不少的创业公司。作者自己也是一名很酷的黑客,只是他原本的志向是当一名画家,故而以此为线索开展全书。

Hacker

最早接触到这本书是在第一份工作刚结束的时候,那时候毕业已经一年多 (似乎有点晚)。听到老同事推荐便厚着脸皮让我的朋友赠送,并且每年都会看上一两遍。书中内容妙不可言,我也写过相关的书评。这本书不会有太多艰深的代码,主要以阐述想法为主。

第一章的“为什么书呆子不受欢迎”可能就会跟很多的软件开发者产生共鸣,第三章的“不能说的话”表明无论在哪个时代都存在着那个时代的禁语,我们的时代看似开放,其实也有很多不能够说的话,如何甄别并保留自己的观点,是一门艺术。另外,作者花了不少篇幅来谈论黑客与画家这两个看似截然不同的工作,实际上有很多共同之处。他觉得“黑客”应该是褒义词,并非那种会攻击别人系统的犯罪分子,而是一群能够用创新手段做事情的人。比起埋头往自己脑袋里塞各种知识点,作者会更鼓励我们去积极创新。

黑客搞懂“计算理论”的必要性,与画家搞懂颜料化学成分的必要性差不多大。

本书也会涉及一些偏技术的东西,一般都是对现有的技术进行简单比较,并阐明自己的见解,不会有太深奥的理论。另外,作者不仅会跟我们聊技术,还会聊人生,理想,工作态度,创业等等。因此,这本书其实并不仅仅适合程序员阅读,任何职业都能在书中找到对自己有益的观点和建议。

总之,这本书是今天所推荐丛书中我最喜爱的一本,虽说已经出版多年,但我相信里面的一些观点并不会随着时间的流逝而变得黯然失色。相反,每次重读都可能会有新的体会,所谓经典,该当如此。希望你也能从中找到有益于己的内容。

我编程,我快乐——程序员职业规划之道

看题目就知道作者Chad Fowler跟这篇文章的许多读者一样,也是一名程序员。他是一名出色的 Ruby 程序员,音乐人,当然也是作家。他根据自身的经历体会通过本书向同行们传达一些职业方面的思考和建议。可惜的是作者相对于其他技术作家来说名气稍显不足,中文版至今也没有重印,估计想买到新书都难了。许多人看到一些书存货不足的时候购买欲望也就降低了,因此,我建议打算阅读这本书的人可以去购买本书的 Kindle 版本。

这本书最开始还是混 Ruby China 的时候无意中看到了管理员Rei推荐,回头便在 Kindle 商店购买了电子书。无意之中却刷了好几遍,也写过书评。这本书提到了不少作者的亲身经历,以及对这些经历的反思。也会出现一些其他同行的“成功”故事,其中就包括了 Github 的发起经历 (一群 Ruby 程序员聚在一起,发现大家有类似的想法,于是构建出了 Github)。有益的建议很多,篇幅有限不一一叙述,其中对我影响最大的一个建议就是作者让我们“爱上维护”,不断强调维护工作的重要性。

每个人都想要建立一个新系统,没人想维护一个旧的系统。

事实确实如此,如果你有了一定的从业经验,你的职业生涯中一定会有不少这样的同事。他们醉心于构建属于自己的一套DSL,他们是项目的发起者,也是新技术的尝鲜者,这点其实没什么问题,但他们中间却很少有维护者。一个项目做完了可能就换另一套技术来开启另一个项目,原来的项目不是废弃掉了,就是交给其他的同事。若软件行业的历史也那么简单的话,我们估计难以拥有优质的语言,框架。

  • Ruby 在 20 多年前以优雅的姿态面世,但如果没有这 20 多年来社区工作者辛勤地维护,Ruby 绝不会如今天这般趁手。如果 Matz 只是把 Ruby 的雏形开发出来,然后便不予理会了,Ruby 可能早就销声匿迹了。即便是 20 多年后的今天,作者依旧在改进这门语言,也写过不少的文章,作过不少的主题分享。
  • Erlang 之父也曾强调过维护工作对于 Erlang 的影响,“Erlang 一开始的时候很慢,但是跑了 20 年之后,现在就很快了”。
  • Lua 语言用了 20 多年的时间来让语言运行得更快,目前应该是最快的脚本语言了。

对一个软件来说,开发阶段的结束并不是真正的结束,它意味着另一个开端,维护的旅途就此开启。要让一个软件变得卓越,需要开发者们付出不少的心血来对它进行长期的维护。而随着维护工作的加深,在不断改进软件的过程中可能会萌生出让自己意想不到的奇思妙想。

虽然这只是本书众多建议中的一条,却也大大改变了我对维护工作的看法,让我在原本看似枯燥无味的维护工作中坚持了下来。有益的建议还有很多,相信你也能从中找到切合自身的建议。

只是为了好玩-Linux 之父林纳斯自传

几年前在广州北京路的科技书店看到了这本书,二话不说就入手了,那是 2014 年的冬天,眼看着快要大学毕业了。这个世界上居然还有这种人?只是为了找找乐子,就开发出了服务端霸主操作系统的内核?现在看来也不无道理,谁不想降低服务器的成本呢?苹果,微软的服务端系统都有各自的收费模式,而 Linux 却是免费且开源的形式(绝大部分),它不火谁火?难怪人们常说

免费的东西往往是最贵的。

Linux 内核系统与林纳斯这个人在很多程序员眼中它们都快要画上等号了。当然他还没那么简单。据说有段时间他需要一个版本管理系统来托管自己的代码,然而现有的版本管理系统好用点的都需要收费,他就自己开发了一个了。这个版本管理系统大家都熟悉,也就是我们常用的 Git。他简直就是程序员中的战斗机。

时隔多年,这本书有些内容也记不太清了。只记得他在书中谈到自己是一个书呆子,从小就喜欢编程。上了大学后对操作系统的相关内容很感兴趣,便一门心思钻研,而当时的操作系统不是收费就是有诸多限制,他就结合一些现有的源码,并在自己科技水平的支持下开发出了 Linux 的内核。似乎许多伟大技术的面世,都起源于有那么一些黑客对现实的“不满”。

  • Matz 觉得编程应该给人带来快乐,Ruby 诞生了。
  • DHH 觉得约定优于配置,网站开发可以更加简单高效,Ruby On Rails 来了。
  • Guido van Rossum 觉得,人生苦短,Python 降临。
  • ...

之前曾经到网上搜过他的履历,发现他几乎没有在什么有名的大公司工作过,便觉得这个人可能也就这样吧(当时作为大学生的我还是很肤浅的)。后来读了书才知道,原来乔布斯曾经有向他发过邀请,让他来负责苹果内核系统的开发,不过他从心底就不认同苹果的策略,便一门心思放在 Linux 上了,多年来也一直引领着 Linux 内核的维护工作。如今看来他的选择是对的,如果当时选择入驻苹果,或许世上再无 Linux。

虽然作者曾打趣说

我想在这本书里阐述生活的意义,我对生活的意义有一些看法,我可以在第一章跟读者说一下,当他们上钩并且花钱买书以后,剩下的章节随便说点什么糊弄过去就可以了。

这句话才是人生哲理。即便他这样说也不代表这本书是那种后继乏力的书籍,后面的章节同样十分有趣。他没有在福布斯排行榜名列前茅,也曾不止一次地提到自己就是混蛋。但是不可否认,他是个实实在在的黑客,Linux 的开源运动造福了许多人,也支撑了许多公司。不管怎样,我觉得即便他是个“混蛋”,这本书也很值得一看。

乔布斯传

这本书可能是迄今为止描述乔布斯最全面的书籍了。乔布斯的事迹,苹果公司的起伏,这本书都一一囊括。更为可贵的是,乔布斯在找作者写这本传记的时候,除了提供回忆以及相关人物信息之外基本上不干预本书的撰写过程。具体事件需要作者亲自去考证,这在一定程度上保证了本书的客观性。而乔布斯本人从来不过问这本书的写作,他所要求的只不过是实事求是。事实也证明乔布斯这种做法是正确的,即便此刻他已离世,却还能为世人留下如此佳品。一本只知道吹捧主角的传记书籍,没有阅读的价值。

谈到乔布斯,很自然地就跟苹果联系在一起了。不看本书简直难以想象苹果公司居然会成立于微软公司之前?比尔盖茨甚至还给苹果“打过工”?这本书里面其实也谈到了苹果跟微软之间的一些恩怨,毕竟在商场上,没有永远的朋友,也没有永远的敌人。操作系统被“抄走”的时候,两者之间确实闹得很僵。乔布斯被迫辞职,不久之后回归,与微软渐渐又有了合作关系。至于微软与苹果,乔布斯与盖茨之间到底谁胜谁负?读者可以自行判断,更或许胜负本身并没那么重要。大学时候用的都是微软的产品自然也就觉得微软是这场战斗中最大的赢家,然而等到工作了,有了点收入之后,便开始使用苹果产品,才发觉在这场战斗中苹果绝对没有输。

有了一定的工作经验,并用过苹果产品之后再读《乔布斯传》感觉就完全不一样了,第二次读居然是津津有味,很多大学时候不懂的术语,现在基本都了解,读起来更加畅快。自己也遇到过一些不知所谓的产品经理,才感受到乔布斯虽说脾气不好,但对产品的态度着实让人钦佩。在产品乃至于开发的工作上,也有很多人在“模仿”乔布斯,大多数人都只是徒具其形。其中绝大部分都只是颐指气使,这里学一点,那里抠一点,乔布斯的品味是没学到,坏脾气倒是都学了去。

扯点题外话:可惜的是如今的苹果已不是往日的苹果,似乎都只是在努力研发酷炫的科技,把产品硬件做得更快,厚度做得更薄,当然价格也更高了。有时候真想问他们一句“兄弟,老顾着开发 Feature,Bug 还修不修了?”如果有机会应该给他们推荐一下文中所提到的第二本书,维护工作对于产品也是很重要的。

软技能 - 代码之外的生存指南

本书的作者John Z. Sonmez运营着一个名为网站simpleprogrammer,主要用于帮助程序员成长。只不过在他的博客中并不仅仅会传授一些软件工业的技能,也会谈到许多软件工业之外的东西。

作者是一个高产的程序员,在本书中他会谈到一些业内的情况,提出自己的一套学习方法,也会针对职场提出一些个人的看法和建议。不过本书的侧重点还是会放在一些“软技能”上面,比如,营销,理财,健身等等。对于程序员来说这些东西看似无用。确实每天花时间去健身并不能让你直接学到更多编码方面的专业知识,甚至还得占用掉一部分的学习时间。然而良好的作息以及运动安排能够让我们每天的头脑更加清醒,做事情更为专注,这其实是一个良性循环。许多程序员为了让自己显得更牛 X,喜欢给自己贴上宅男,黑客这些标签,认为除技术之外的任何一切都只是浪费时间(我自己也曾经这样),并且还要抓紧一切时间去提升自己。

不过本书的观点是,恰当掌握一些代码之外的技能,对于一个程序员来说大有裨益。平时花点时间去健身,更关心自己的健康,编码的时候便能够更加专注。掌握一套好的学习方法,能够事半功倍。学习一些理财知识,合理进行投资不仅能避免成为月光族,坚持一段时间之后还能够拥有一定的积蓄,能够给予自己更大的自由度去选择属于自己的生活方式。

我们除了是一名程序员之外,更是一个活生生的人不是?

以上所述只是对这本书的内容做了一个很简单的概括,更具体的东西可以等作者娓娓道来。不过本书的功利性比较强,也并非所有建议都适用于每一个人,建议读者还需自行逐一甄别才是。就如孔子说的:“择其善者而从之”。

程序员修炼之道 - 从小工到专家

本书作者分别是Andrew Hunt以及David Thomas,从题目看起来倒是有点像一本“武功秘籍”。想想张无忌在机缘巧合之下得到《九阳真经》,习得里面的一些运功法门,让自己到达另一个武学层次(好吧,我有点夸张了)。如果说上面那本《软技能 - 代码之外的生存指南》讲的是“软技能”,那么这本就是与它相互补充,专门讲述领域内“硬功夫”的书籍了。

当然所谓的“硬功夫”,并不是会教你如何去搭建一台服务器,或者怎么使用一门编程语言。这里的“硬功夫”概念更为宽泛,它包含程序员应该具备的硬核技能。这些东西看似没啥用(我参加工作之前也不觉得里面的建议我能用得上),然而随着项目经验的增多,渐渐会发现书中的一些建议能够让你少走弯路,通常自我反省的时候都会萌生出:“哎,要是早点运用上 xx 建议就好了”的想法。

随着年岁的增长,也能够理解为什么国外许多程序员都把这本书作为枕边读物了。本书的内容会涵盖如何更注重时效地编程,如何打造更好的团队,如何写测试,遇到烂代码该如何面对等多方面的知识及建议。其中的一些建议或许是速效救心丸,能够及时服用即时见效,而另外一些建议却是需要在漫长的软件岁月中渐渐打磨自身才能拥有的品质。

“这些道理其实谁都懂。”许多人对这类书籍都会提出这种说辞,这也无可厚非。但我发现,喜欢说这种话的人恰恰就是没真懂,如果真的懂了,怎么会做不到呢?尤其是那些素养层面的建议,是需要时间慢慢去打磨的,并不是说看过了,就完了,就能够掌握了。需要反复地提醒自己,并与实际情况结合起来才能真正融汇贯通,形成一套属于自己的东西。这本书以工具书的形式呈现于读者面前,阅读此书的时候人们可以根据自己的喜好随意查阅,每一章最后都会有“友情链接”,列出与本章相关的其他章节及页码,读者可以根据兴趣自行翻阅,加深对当前章节的理解。

代码整洁之道 - 程序员的职业素养

本书的作者Robert C. Martin也有人称他为“Bob 大叔”,敏捷开发的倡导者之一。这本书已经出了很多年了,我也是近期才把它看完。不过我觉得时机很对,书中有许多内容,若不是有一定的职场经历恐怕也没办法感同身受。

1. 如何写出好代码

许多程序员都觉得自己的代码是模范,别人的代码都稀烂。后来才发现这是一个“文人相轻”的局面。工作一段时间之后才觉得,每个人对好坏似乎都有一个评判标准,也很难让别人去接受自己的标准。就如同前后端分离到底是不是一件好事情?不同技术的人,不同的业务场景,不同的团队背景下所得出的结论都可能不一样。就此来看,有自己一套编码规范的公司还是很有价值的,在一定程度上能够减少一些撕逼的局面。至于自己的代码是否够资格提交,我给自己定下过两条评判标准

  • 这堆代码如果一个月后让你自己来维护,你愿不愿意维护?
  • 确定这堆代码不会给别人带来麻烦,删除一些单纯为了炫技的代码,含糊不清的地方加上注释。

如果两条都做到了,那对我自己来说这堆代码就是能够提交出去的,否则会改到让自己满意为止。然而这只是前提,要让代码“更好”,还有其他需要努力的地方,作者在本书也花了不少篇幅提及,比如:“不要在疲惫的时候写代码”,“焦虑的时候先远离工作环境,让自己静下来”,“编写测试”等等。当然也需要结合实际情况,如今很多项目时间节点被压的很死,能完成就不错了,哪里顾得上写好代码?更别提测试了。针对这种情况,作者让我们要学会说“不”,有时候一个“不”字就能够解决很多问题,节省不少的时间。在本书中针对“好代码”作者通过亲身经历提出了不少的见解,读者可以自行采纳对己有用的建议。

2. 测试驱动

作者是测试驱动开发的倡导者之一,其实我做梦都想当一个测试驱动开发者,无奈现实当中能够真正用测试去驱动自己的场景并不多。或许也是氛围所致,当个个都在声称没时间写测试的时候,你也会觉得写测试是一件吃力不讨好的事情。然而国外的人却对于测试敬若神明,难道国外的程序员都那么“得空”?答案是否定的,或者换句话说他们是写了测试之后才“得空”的。本书花了不少的篇幅来谈论测试,可见测试在作者心目中的地位

  • 减少手工维护的成本。
  • 能够在写代码之前理清思路。
  • 让你能够更加放心地改动代码
  • 编写可测试的代码,让测试去驱动代码。
  • ...

或许你的工作很忙,没办法真正贯彻作者所崇尚的测试先行开发方式,不过就把它当作一种信仰吧,在时间允许的情况下,想办法给自己的代码加上测试,无论对自己还是对他人都大有好处。

结语

以上 7 本书,是我到目前为止的职业生涯中,自认为对我影响较大的几本。可能比起《人件》,《人月神话》这些公认的经典著作其中有些书的分量稍显不足,不过只要能产生共鸣便足矣。一本书是否好书,每个人心中自有尺度,毕竟我们都不愿做“买履的郑人”,而你心目中最重要的又是哪几本?

加本《UNIX 编程艺术》

tinyfeng 回复

Mark 下来,我稍后找时间看看。多谢分享。

3 楼 已删除

http://lucida.me/blog/developer-reading-list/

以前看到的书单,到现在为止都没看完😅

都是好书。

不过居然漏了《颈椎病康复指南》😀

xiaoronglv 回复

哈哈,有道理。这本我倒是没有看。

heroyct 回复

我去,要是你能把里面的都看完估计都成神了。其中有基本确是以前就打算看的,迟迟没看😢 。有些书也出新版了,像《风格的要素》,《程序设计实践》最近京东打 5 折,去下单先。😃

图裂了兄弟。https => http 才能访问。重来这本书我也觉得不错,之前只是看过了一次,排版各方面都很不错,有空再看看。我个人觉得书名翻译成《重新定义工作》会不会好一点。😅 刚发现我看的是《重来 2》

其实,只要学会三点,就可以超过身边很多程序员了:

  1. 单一原则(类和方法都适用)
  2. DRY(尽量不要写重复的代码)
  3. 起有意义的名字

如果能做到以上三点,不管水平高低,别人看你的代码,肯定少了很 WTF。

说个题外话,我觉得人和人最大区别,可能就是是否有黑客精神(我认为的黑客精神,就是专研精神,不达目的不罢休的精神)。

10 楼 已删除
rocLv 回复

说得好啊。

12 楼 已删除

感谢分享《我编程,我快乐》中文版在省图书馆里发现了,很棒的角度

需要 登录 后方可回复, 如果你还没有账号请 注册新账号