FDE Times 数据在招 FDE 职位 863▼55 近 7 天在招职位数的变化(同口径比较):不计入本周新开始追踪的公司的职位近 7 天新增 71在招公司 181支持远程 24%美国薪资中位数 $200k招聘最多 Palantir 95
ENVI

前线部署工程师(FDE)的专业媒体

书籍与课程

《流畅的Python》第二版只新增四章,恰是 FDE 最需要的

数据类、类型提示和并发正是进驻客户第一周最需要快速读懂的代码,但这本书不适合 Python 新手。

封面: Fluent Python
Fluent Python · Luciano Ramalho · 封面图片:Open Library
分享微博

要点速览

  • 第二版(O'Reilly,2022)新增四章:数据类构建器、两章类型提示,以及 Python 并发模型。
  • FDE 应选读:先读数据模型和数据结构,再读数据类、类型提示,最后才是并发。
  • 异步部分值得读,重在思路;实际使用前,请对照当前的 Python 官方文档核实。
图表:假设有 200 次 API 调用,每次 0.5 秒,顺序执行共需 100 秒;使用 20 个工作线程的线程池后,调用分成 10 轮,耗时降到约 5 秒。5 秒这一数字以橙色突出显示。
I/O 密集型任务:把等待并行化,运行时间从 100 秒降到约 5 秒。来源:文中的假设示例,依据《流畅的 Python》第二版第 19 章(Luciano Ramalho,O'Reilly,2022)。

在《流畅的 Python》第二版的目录中,只有四章带有 🆕 标记:数据类构建器(第 5 章)、函数中的类型提示(第 8 章)、类型提示进阶(第 15 章)和 Python 并发模型(第 19 章)。作者 Luciano Ramalho(O’Reilly,2022)还大幅重写了并发相关章节。

这些改动与前线部署工程师(FDE)的工作高度吻合。设想你到客户那里的第一周:很可能大部分时间都在读别人写的代码,而这些代码多半带有类型提示、用工具生成的数据类,以及并行调用 API 的数据管道。

果真如此,这四个新章节很可能正好对应你最需要快速读懂的几类代码。下文用类型提示和并发两个例子说明原因,并给出阅读顺序和每部分的用法。

谁该读这本书,什么时候读?

这不是入门书:ACCU 的书评人和 hamatti.org 博客都指出,它面向已有 Python 编写经验的人。

如果你刚起步,先写几个月真实代码再读。如果你写了几年 Python,却仍习惯从 Java 或 C# “翻译”过来,不必从头读到尾,按本文开头图示的顺序读即可。

第一个思路:对象的行为取决于特殊方法

全书从 Python 数据模型讲起,接着是列表、字典和集合。这是读懂地道 Python 的基础:__len__、__getitem__ 这类双下划线方法,决定了对象传给 len() 等内置函数时的行为。

举个假设的例子:客户代码中有一行 len(batch),其中 batch 是某个自定义类的实例。搜索名为 len 的方法,什么也找不到;答案在 __len__ 里。养成这个习惯后,读陌生的类时,你会先列出它的特殊方法,再看其余部分。

第 5 章是全新内容。建议读完数据模型就接着读,因为你遇到的许多数据类很可能是用类构建工具生成的,而不是逐行手写的。

第二个思路:类型提示是地图,不是保险

第二版用第 8、15 两个新章节讲类型提示。对 FDE 来说,它的价值在于不运行系统也能先理解系统。

设想客户 SDK 中有一个函数,签名是 def fetch(ids: list[str]) -> dict[str, Order] | None。仅这一行就告诉你输入是什么、输出是什么,以及必须处理 None 的情况。没有类型提示,你只能打断点、靠猜。

不过,Ramalho 在 Thoughtworks 技术播客中强调过一点:注解在运行时不起作用,是 mypy 这类工具利用它们在源代码中找出错误。只有经常有人检查,这张地图才可信。

第三个思路:动手前先选定并发模型

讲并发模型的第 19 章是新章节,位于全书改写最多的部分。它值得细读,因为它给你一套词汇,让你在动代码之前就能分清线程、进程和 async。

设想一个集成任务要调用客户的 200 个端点,每次调用约 0.5 秒,几乎全在等网络。顺序执行需要 200 × 0.5 = 100 秒,而 CPU 几乎闲着。这是 I/O 密集型任务,把等待并行化才是正确思路。

如果客户 SDK 是同步库,用 20 个工作线程的线程池改动最少:200 次调用分成 10 轮,总耗时降到约 5 秒左右。如果整条链路已有异步客户端,用 asyncio 并把并发请求数限制为 20,效果相近。而如果慢在 CPU 密集的数据解析,这两种方法都救不了你。

把书中内容用到实际项目的三个陷阱

第一个陷阱,是把书中的 asyncio 模式原样搬进客户代码。ACCU 书评人认为异步编程章节已经过时,因此要吸取第 19 章的思路,具体 API 在使用前对照当前的 Python 文档核实。

第二个陷阱,是在从未运行过 mypy 的仓库里轻信类型提示。注解在运行时不起作用,类型提示可能早已与实际脱节,却无人察觉。

第一天就问客户团队:CI 是否运行类型检查器?如果没有,就在本地运行 mypy,把错误数量当作这张地图可信程度的衡量指标。

第三个陷阱,是没测量就并行化。写下第一行并发代码之前,先测出单次调用的耗时,并设定请求数上限,以免你的任务压垮客户自己的 API。

把阅读变成简历上的证据

官方示例代码在 GitHub 上的 fluentpython/example-code-2e 仓库中,fluentpython.com 是第二版的配套网站,extra 栏目里还有补充文章。

最有效的读法是边读边重构。挑一个自己的旧 Python 项目,把手写的数据类改为 dataclass,加上类型提示,并让 mypy 在 CI 中运行。在简历上写一行说明你做了什么,附上 commit 链接,远比“精通 Python”几个字更有说服力。

目标不是背语法,而是打开陌生的仓库后,能快速读懂,让客户团队信任你。上面这些章节,正是练这项能力的捷径。

这篇文章对你有帮助吗?

7 个信源
路线图上的下一篇 · 阶段 1: 基础认知《凤凰项目》:客户的运维团队为什么这么慢这部 2013 年的 DevOps 小说从一次发薪事故讲起,讲一位能干却超负荷的工程师怎样拖住整个系统。