原文地址: felixgerschau.com/pragmatic-p…

译者注:《The Pragmatic Programmer》即为《程序员修炼之道:从小工到专家》,直译为《务实的程序员》。

《程序员修炼之道》第一版于 1999 年出版,已成为软件开发人员最重要的读物之一。

上一年,在本书初次发布 20 年后,作者发布了本书的新版别,不仅包括代码示例的更新,还整合了他们此刻搜集的反应。

尽管本书包括代码示例,但它并不是教你怎么编码:作者解说了怎么以有用的方法改善软件开发过程。 它包括许多提示,可在您的整个编程生涯中为您供给协助。

务实程序员的一些特征是他们处理问题的态度和哲学,将问题置于更大的背景中,并对他们所做的一切负责。

我会向一切认真进步技术的软件开发人员引荐它。 然而,尽管它包括了许多有用的建议,但我觉得假如你刚刚开始编程,你或许不会欣赏这本书供给的一切智慧。

我最喜欢的主题

Pragmatic Programmer 共有 53 个主题。 与任何非小说类书籍相同,有些主意会引起读者的共识,而另一些则不会。

我想在这里分享我最喜欢的每个主题的简短摘要,以及我怎么将它们整合到我的作业中。 这些是我第一次读这本书后最喜欢的主题,但我敢肯定,假如我再过几年再读这本书,我的收获会有所不同。

  • 这是的人生
  • 常识组合
  • 正交性
  • 曳光弹
  • 根底东西
  • 死掉的程序不会说谎
  • 巧合式编程
  • 测验你的代码
  • 务实的入门套件

这是你的人生

这个话题呈现在本书的最初,并具有鼓舞人心的气氛。 与 Dave 和 Andi 交谈过的许多开发人员都对他们的作业或正在运用的技术感到沮丧。

作者强调了这样一个事实,即软件开发是当今最好的作业之一,由于开发人员一般收入很高,能够在世界任何地方作业,而且在作业中拥有很大的自由度。

假如你对现在的作业不满意,能够测验通过与老板交谈来处理它,或者轻松地为自己找到另一份作业。

考虑到软件开发人员的特权,没有理由不过上自己想要的日子。 假如你积极主动并坚持领先地位,那么将会取得该行业的许多时机。

这是你的人生,你是能够做主的。

常识组合

每个开发人员的常识组合就像一个常规的出资组合:假如你定时出资,那么将在以后取得收益。

我发现这个类比是本书中最有力的类比,由于我是在我没有进一步进步我的编程技术而且感觉自己正在触及玻璃天花板的时候阅览它的。 我没有出资于我的常识组合,而且我想到了它(没出资)的成果。

通过阅览非小说类书籍定时出资于自己将协助你坚持对自身作业的好奇心和动力(它们不用悉数与编程相关)。

它还有助于发现更多你不知道的东西,了解不知道的不知道,已知的不知道。 这个主意不是来自书本,但我以为它是相关的。

对某个主题了解得越多,就越能看到其中的复杂性,而对它的了解就越少。

作者建议你能够通过以下方法出资您的出资组合:

  • 每年至少学习一门新语言
  • 每个月读一本技术书籍
  • 也要阅览非技术书籍
  • 上课
  • 参加本地组活动和集会
  • 坚持最新(通过在线阅览新闻和帖子)

你不用悉数都做,但依据这些建议不断开展自己肯定会协助扩展你的出资组合。

正交性

这是从几何学中借来的术语。 咱们或许以模块化分层体系等名称了解这个概念。 终究,它们都是指组件松懈耦合的体系,这意味着组件没有许多依靠关系。

在正交体系中,很简单更改一个组件,而不用担心会破坏另一端的某些东西。 这些体系也更简单测验。

在体系的开发或设计阶段考虑正交性有助于使体系在未来更易于运用并防止过错。

即松耦合性。

曳光弹

在动作片的拍摄场景中,都能够常常看到子弹的轨道。 符号它们所走路径的子弹称为曳光弹。

曳光弹也用于现实世界的战斗,由于它们通过在实在情况下供给即时反应来协助在困难环境下瞄准。 他们不会射中方针,但快速反应能够让炮手调整以指向方针。

软件开发中的等价物则是让体系的一小部分尽快作业并征求用户和利益相关者的反应。

曳光弹办法的优势在于:

  • 为用户和赞助商供给早期和可见的成果。
  • 开发人员有一个能够构建的架构根底。
  • 该项目成为一个集成渠道:新的改变会被集成到一个现已作业的体系中。

“曳光弹办法”的替代计划是别离编写体系的每个模块,终究将它们连接在一起,并在项意图终究阶段测验整个体系。

曳光弹并不意味着是原型。 它们旨在取得终究体系功用或方面的安稳版别,这将成为未来开展的支柱。

就像子弹相同,你不会总是在第一枪就击中方针。 用户或利益相关者或许不喜欢这个成果,但整个主意是在项目开始时而不是在结束时取得反应。

根底东西

本书的这一章概述了每个程序员都应该运用的东西。 作者将编程东西与木匠的东西进行了比较,这也启发了本书的封面。

木匠运用各种东西,每种东西都有其特定用处。 他们运用尺子、钻头、夹子等东西。 木匠知道何时运用哪些东西,而且现已掌握了怎么运用它。

在编程中,咱们也有自己的东西来完结作业。 这些东西通过进步生产力来扩大咱们的才能。

在书中,他们建议不要运用单一的效率东西、 IDE,并鼓舞运用 IDE 背面运用的东西。

本书包括的东西分为以下几类:

  • 纯文本的力量
  • Shell 游戏(Unix 指令)
  • 版别空值
  • 强力编辑(你的文本编辑器)
  • 调试
  • 工程手册

不要依靠 GUI 环境

Unix 指令之所以如此强大,是由于它们每个都有一个单一的意图,而且它们能够通过管道组合在一起,这为你能够用它们做什么供给了无限的或许性。指令终端对程序员就像作业台对木匠来说相同。

运用 shell 能够让你以 GUI 无法跟上的灵活方法自动化操作并组合指令。

死掉的程序不会说谎

一个死程序一般比一个瘫痪的程序形成的损害要小得多。

该主题的作者的关键是尽早崩溃。

为什么? 由于假如不这样做,程序或许看起来作业正常,但由于体系处于过错状况而回来包括小过错的成果。

你能够通过尽早和常常崩溃来避免这种情况。 这将协助你更快地找到过错的根源,而且在程序呈现问题时会更加明显。

将代码包装在 try catch 语句中或许会坚持程序运转,但由此发生的纤细过错更难捕获。

巧合式编程

不要假定它,证明它。

巧合的编程意味着你在猜想你正在运用的函数和接口。 它或许会作业一段时间,但是由于你不知道自己在运用什么,因此或许会呈现过错,以后很难追寻。

成果是,无论你的代码是否正常作业,你都不知道为什么。

作为巧合编程的补救措施,不应该猜想给定接口的意图是什么,而是阅览文档。 假如你不能依靠文档,或者没有文档能够开始,请记载(并测验)那些假定。

我发现这个主题的建议在处理带有杂乱代码库的项目时很有协助,由于函数会发生意想不到的副作用。

测验你的代码

测验不是为了发现BUG。

这个主题都是关于测验以及为什么咱们首要测验咱们的代码。 尤其是单元测验能够协助咱们以更加面向方针宽和耦的方法思考咱们的代码。

其中一位作者(Dave)暂时中止编写测验,看看它会对他的代码发生什么影响。 令他惊奇的是,他的代码质量一点点没有受到影响。

这并不意味着你也应该中止编写测验。 他现已编程超过 45 年了,他会自动以一种解耦、可测验的方法编写代码。

务实的入门套件

这个主题更多的是对本书所包括主题的回忆。它包括了任何软件项目所需的最重要的东西,它们是:

  • 版别控制

  • 回归测验

    • 单元测验
    • 集成测验
    • 功能测验
    • 根据特点测验
  • 全自动化

总结

书籍总是常读常新,咱们在不同阶段去读同一本书,领会天然也是不同的。所关注的主题有时候也会有所侧重。

相关阅览

  • Unit testing React – What you need to know: felixgerschau.com/unit-testin…
  • SQL 背面的故事(每个版别 10 万个测验 case,会跑 10 亿个测验): liyafu.com/2022-07-31-…