2019年初级程序员必备书单:《代码整洁之道》《重构》等

编者按:在程序员的职业生涯中,总是需要学习新知识(也许不光是程序员)。本文作者Khalil Stemmler最喜欢的学习方法之一就是看书,他总结了业内人士高度评价的9本书,希望能给程序员带来启发。原文标题Books that Junior Developers should read in 2019。

无论你是刚入行的新人,还是经验丰富的程序员,你都会意识到工作并非你提高自己编程技能和知识的最佳途径。

你在业余时间所做的事情、你掌握自己所学知识的方法……是这些因素最终决定你在这个行业能否成功。这就是为什么对我们程序员来说,增长的心态如此重要。

作为程序员,我们学习和改进的方法特别多,比如:结对编程、学习在线课程、参加聚会、更多的工作经验、做项目和联系导师。

我个人最喜欢的学习方法之一是:选择一本不错的书看,试着从那些在这个行业浸淫多年的人那里学习一些东西。

这都是我的个人建议,是我认为所有程序员(尤其是初级程序员)都应该在某些阶段来阅读的书目。业内专业人士高度评价这几本书,它们有可能对你的工作质量和你的发展、学习速度产生深远影响。

其中一些书和技术细节没关系,而更多地关注于优秀程序员也应当重视的人际关系和专业性,它们为你提供了一些实用规则。

  1. 代码整洁之道

作者:Robert C. Martin(Uncle Bob)

在你克服了开发的基本挑战,逐渐得心应手地用写代码来解决问题之后,最好看看这本书。事实证明,写出可以成功运行的代码实际上是比较容易的,最难的部分是让你的代码可读性高,这样,其他人就能轻松理解,方便未来的修改。

还记得你上一次必须看这种奇葩代码是什么时候吗?

鬼知道它到底是干嘛的啊。这样的代码可能可以运行,但当我们需要修改它的时候,我们必须祈祷写这几行代码的人还在公司,祈祷他们能够以某种方式破译这些可能已经运行了好几年的代码。

如果不注意代码的可读性和可维护性,我们最终只会得到这样的代码,每个人都不敢碰它,如果它崩溃了,我们就完了。

Uncle Bob的《代码整洁之道》通过比较整洁代码和不佳代码,教会你整洁代码应该是什么样的,并教会你如何将不佳代码转换为整洁代码。对于大多数人来说,这样的任务听起来小菜一碟,但是你会惊讶地发现,把一些简单的软件设计原则变成习惯,可以帮你写出更加专业和可扩展的代码。

我们是软件匠人。建造一座房子与建造一个应用程序在原则上没有太大的不同。我们需要注意细节,否则,如果一开始做得不对,将来要修复这些细节可能会花费不菲。

  1. 代码整洁之道:程序员的职业素养

作者:Robert C. Martin(Uncle Bob)

这本书不是一本技术书籍,它是一本教你成为业内专业人士的书——专业人士指那些在面对挑战、不确定性和压力时,将继续把开发软件视为一种工艺,并决心坚持自己的专业价值的人。

《代码整洁之道:程序员的职业素养》在评估、重构、测试、处理冲突、日程安排、避免疲劳等方面提供了很多实用的建议。这本书全都是值得信赖的建议,毕竟它的作者花了几十年时间做这件事。

它教给我们很多东西,最好的之一是:作为一名程序员,如何保持正直,何时说“不”,以及如何拒绝。

这是一本关于专业性的书。

  1. 重构 改善既有代码的设计

作者:Martin Fowler

Martin Fowler是我最喜欢的作家之一。首先是因为他很搞笑,他写书也特别Fowler,很搞笑。另一个原因是,他非常擅长用简单的话解释复杂的话题,而且可以说是非常简单,不会让读者感到疲劳。

《重构 改善既有代码的设计》是Ruby on Rails的创建者曾经推荐过的书,他说:你应该“在写另一行代码之前阅读”。Fowler能指导你重构一个简单的应用程序,并向你介绍了他在多年的咨询工作中收获的一些技术。

Fowler在书里展示了如何在编码和重构之间切换,告诉你应该多久提交一次代码、什么时候应该测试。我强烈推荐这本书。这本书的最新版本用JavaScript重写了代码范例,这对我来说是简直不能更棒了,因为它是我最喜欢的语言。

  1. 设计模式:可复用面向对象软件的基础

作者:Erich Gamma, Richard Helm, Ralph Johnson, & John Vlissides

这是一本关于设计模式的开创性著作。你可能会问,什么是设计模式?设计模式就是软件开发中常见问题的通用解决方案。如果你熟悉这些模式,你将发现你能够大大减少解决这些问题需要的时间。

良好的设计模式意识还能让你与其他程序员更有效地沟通解决方案。

这的的确确是本老书,但它仍然是当前最好的参考之一。如果你对这个话题感兴趣,想了解一些更新的东西,我还推荐Eric Freeman的《Head First设计模式(中文版)》

  1. 领域驱动设计 软件核心复杂性应对之道

作者:Eric Evans

要使大型代码库能够继续扩展,我们需要将代码合乎逻辑地分割成不同的部分。这样做的目的是对代码进行分区,使独立的团队能够在不影响任何人的情况下处理系统的这些部分。

支持代码向这一发展方向的基本概念是领域驱动设计(Domain-Driven Design,缩写DDD)。它是一种软件开发方法,将“问题域”(现实世界)中存在的问题建模为多个解决方案域。

如果代码库非常庞大,那么DDD就非常重要。大型企业部署DDD,将团队分配到公司代码库的各部分。

Eric Evan创造了术语“通用语言”,这个术语是开发人员、领域专家和领域中的任何其他用户或参与者之间实用的一种通用的、包罗万象的语言。通过使用通用语言,它可以确保最重要的领域概念被很好地理解,并在软件中建模。

这本书比其他几本书更具有技术性和挑战性,但是如果你熟悉这些概念,你就会很好地理解当今的大公司是如何保持代码库的可管理性和可扩展性的。

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

作者:John Sonmez

作为一名程序员,我们应该努力保持平衡。不幸的是,保持良好的平衡并不是大多数程序员拥有的品质。事实上,作为一名程序员,投资于你的学习、健康和整体幸福感是非常重要的。

“软技能”指的是编程能力之外的重要东西,比如生产力、职业目标和理财能力。Sonmez还探讨了投资、他在33岁退休的方法、黑客健身技巧和维持人际关系等内容,其中很多东西在编程界少有人涉及。

这本书的架构让你能在遇到问题时,立即翻到相关章节查阅。

  1. 架构整洁之道

作者:Robert C. Martin(Uncle Bob)

Uncle Bob第三次出现了,他的书确实很棒。

在学校里,很多人关注算法,但很少关注软件设计原则。我认为这有点不幸,因为在现实中,你不经常遇到那么多来自算法的挑战。相反,更常见的情况是:你将面临要求代码以模块化、灵活性强、可读性高的方式来组织的挑战,并且还要允许你在需要更改时快速添加新特性。

《架构整洁之道》关于基本的软件设计原则和模式,你将能够使用它们来应对这些挑战。

“整洁的架构”,谢谢Robert!

本书中最好的几个关键点是依赖关系的成本、稳定代码与非稳定代码的对比以及SOLID原则:一种编写代码的方法,使代码更容易理解、更灵活、更易于维护。

这本书其他非常有用的方面是“尖叫的软件架构”和“按组件封装”的概念,它们交给你如何组织模块,以便“尖叫”着告诉他人这些项目到底是干什么的。

这本书与领域驱动设计(DDD)密切相关,它通过使用“分层架构”或Uncle Bob所称的“整洁架构”(也称为端口和适配器)来实现。这是一本很棒的书,适合任何想要提升架构能力、想在高层次上有效地设计系统、以及要在微观层次上处理依赖关系的人。

  1. The Effective Engineer(高效工程师)

作者:Edmond Lau

时间是我们生命中唯一的、最有价值的资产,我们应该更有效地利用它。在工作中,我们很容易陷入困境,花费大量时间修复bug、浪费精力。高效的工程师能够在更短的时间内完成更多的工作,减少重复性工作。

我们可以通过一个叫做“杠杆”的框架来减少在重复性工作上浪费的时间和精力。

杠杆能够帮助你确定哪些工作的产出成果和投入时间比最差。这个框架适用于任何事情。

  1. 程序员修炼之道:从小工到专家

作者:Andrew Hunt & David Thomas

《程序员修炼之道》一书因易于遵循和理解而备受称赞,是一本应该被所有级别程序员放在桌面上的书。Andrew和David都是程序员,他们不仅从事编程多年,而且还在编程的时候浸淫于此,然后想找到做得更好的方法。

经过他们多年的反思,这本书介绍了一些在你的职业生涯中必须遵循的基本程序员哲学,比如:程序员应该有“一次性完成,或把它自动化”的哲学。

它包含了一些简单但细致的建议,在写新一行代码或开始一个新项目之前,你应该将这些建议牢记在心。

最后的话

作为一名初级程序员,书籍确实是提高知识和技能的最佳工具之一。书籍往往有很高的投资回报——毕竟编程还是很赚钱的:wink:

而这些只是当前最好的几本书,它们都不是真正的新东西,但都是编程多年来一直保持着的一般哲学和最佳实践。作为一名教授,我不得不说:“你完全能够在这个行业赚很多钱,你只需要阅读那该死的手册”。

你读过这些书吗?你觉得他们怎么样?你认为还有什么别的书也不错?请在评论中告诉我!

其他资源

这里列出了几篇非常优秀的文章,它们涵盖了上述书中的一些主题。如果你没时间看完一整本书,那你可以点开下面的链接看看,熟悉这些概念对你的编程生涯也很有帮助!

Refactoring.guru

https://refactoring.guru/

SOLID Design Principles

SOLID Design Principles Explained: The Single Responsibility Principle

DRY (Don’t Repeat Yourself)

https://en.wikipedia.org/wiki/Don%27t_repeat_yourself

NodeJS and Good Practices

https://blog.codeminer42.com/nodejs-and-good-practices-354e7d76362

Implementing the SOLID and the onion architecture in Node.js

https://dev.to/remojansen/implementing-the-onion-architecture-in-nodejs-with-typescript-and-inversifyjs-10ad

Better Software Design with Clean Architecture

https://fullstackmark.com/post/11/better-software-design-with-clean-architecture

The Clean Architecture

http://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html

编译组出品。