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

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

书籍与课程

PY4E 是入门课,FDE 却不该跳过后半部分

第 12 至 17 课讲正则、Web 服务和数据库,正对应客户交来的杂乱导出文件和无文档接口,而且全部免费。

分享微博

要点速览

  • PY4E 在 py4e.com 上免费开放(CC BY 4.0)。Coursera 版是密歇根大学推出的五门入门课系列,不要求任何基础。
  • py4e.com 共 17 课,第 12 到 17 课讲正则表达式、网络编程、Web 服务、面向对象编程、数据库和可视化,这是对 FDE 最有用的部分。
  • 已经会其他语言的工程师,基础部分快速浏览即可,把精力放在正则及之后的课程上。
Python for Everybody 课程大纲的两层示意图。米色下层是前半部分基础内容:变量、函数、循环、文件、dict,改编自 Think Python。橙色高亮的上层是后半部分数据内容:正则、Web 服务、数据库、可视化,这些是 FDE 第一天就用得上的技能。
PY4E 前半部分讲熟悉的基础,后半部分从正则到可视化,对应客户现场的第一批数据工作。来源:py4e.com 课程页面,Charles Severance。

Charles Severance 的课程是 Coursera 上选课人数最多的课程之一。其中的 Python for Everybody 在课程页面上写得很直白:它面向从未编过程的人。

有几年经验的工程师,很容易因此跳过它。但仔细看一遍目录就会发现,Python for Everybody 的后半部分,和前线部署工程师(FDE)在客户现场接手的第一批数据工作非常相似。

Severance 是密歇根大学信息学院的临床副教授(Clinical Associate Professor)。所有讲座、教材和练习都以知识共享署名 4.0(Creative Commons Attribution 4.0)许可证免费发布在 py4e.com 上,网站和 Python 3 版教材的源代码也公开在 GitHub:github.com/csev/py4e。

需要证书的人可以在 Coursera 上学习“Python for Everybody Specialization”,这是一个由五门入门课组成的系列。第一门课明确写着不需要任何基础。

对 FDE 来说,这门课的价值在于:客户的数据很少是干净的。更常见的是一份导出文件、一个没有文档的接口,或者一个遗留数据库。

Coursera 系列的课程名称也体现了这个方向:数据结构之后是网络数据,然后是数据库,最后一门是综合项目课,内容是用 Python 获取、处理和可视化数据。

从零基础一路讲到真实数据的课程大纲

py4e.com 的课程页面列出了 17 课。前几课面向还不会编程的人;第 12 到 17 课依次是正则表达式、网络编程、使用 Web 服务、面向对象编程、数据库和数据可视化。

配套教材名为《Python for Everybody: Exploring Data in Python 3》。教材的章节编号与网站上的 17 课相互独立。据 Severance 介绍,第 2 到 10 章相当忠实地改编自开源书籍 Think Python。

所以前半部分是熟悉的编程基础。后半部分以探索数据为主线,在职工程师应该把大部分时间花在这里。

谁该学,按什么顺序学?

如果你正从技术支持、运维或业务分析转向 FDE 岗位,就按顺序学完整的 Coursera 版。第一门课专为零基础的人设计,不需要额外准备。

如果你写过几年 Java、JavaScript 或 Go,更高效的做法是快速浏览教材第 2 到 10 章,只为熟悉语法。从 py4e.com 的第 12 课(正则)开始放慢速度,每道练习都做,因为这部分马上就用得上。

如果你已经在后端写 Python,可以把第 12 到 17 课当作一两个周末的复习练习,不必学完整门课。

哪三个思路值得带到客户现场?

最值得记住的思路,是把 dict 当计数器用。假设客户发来一份几千行的支持日志,每条错误行里都有类似 ERR-1042 的内容,客户问哪个错误出现得最多。

只需把第 12 课的正则、文件读取和 dict 的基本用法结合起来。下面的代码是示意,文件名和错误码格式均为假设:

import re

counts = dict()
with open('support.log') as fh:
    for line in fh:
        m = re.search(r'ERR-(\d+)', line)
        if m:
            code = m.group(1)
            counts[code] = counts.get(code, 0) + 1

top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)
for code, n in top[:5]:
    print(code, n)

不到 15 行,就能在会上当场给出出现最多的五个错误码,而不是承诺下周再答复。这个模式几乎适用于所有“哪个最多”的问题:哪个客户来电最多,哪个接口最慢,哪个时段负载最高。

第二个思路是不要把网络当成黑盒。PY4E 用两课讲网络编程和 Web 服务。学的时候,问问自己请求发到了哪里、响应长什么样。等到凌晨两点客户的 API 返回一个奇怪的错误时,懂底层的人通常更快找到原因。

最后一个思路,是知道什么时候该从文件转向数据库。一次性脚本只能回答一个问题。数据进了表,就可以反复查询,别人也能直接用,不必重新跑脚本。

把计数器用在真实日志上的两个陷阱

第一个陷阱是多行日志。上面的代码逐行处理,如果一个错误附带很长的堆栈信息,错误码和真正的原因可能落在不同的行上。计数之前,先打开文件看几条完整记录,确定一条“记录”从哪里开始,不要默认一行就是一个事件。

第二个陷阱是正则太宽或太严。模式 ERR-(\d+) 也会匹配到引号里的句子或 URL 中的 ERR-1042;如果客户的系统用小写,它又会漏掉 err-1042。把没有匹配上的行也统计出来,再读几条:这个数字说明了你的答案有多可信。

把练习变成简历上的证据

参照 Coursera 综合项目课的思路,把正则、Web 服务、数据库和数据可视化这四课合成一个小项目:从公开 API 拉取数据,用正则清洗,存进数据库,再画一张图回答一个具体问题。

README 要写得像给客户的报告:客户问了什么,数据脏在哪里,结果是什么。

在简历上,按你实际做过的工作顺序(获取、清洗、存储、汇报)描述这个项目,而不是只写课程名。

打开课程之前先做一道练习

把上面的错误计数代码改成按一天中的小时计数,而不是按错误码计数。只需修改正则,从每行的时间戳里提取小时。

再往前走一步:不用 print,把结果写进一张两列的表(小时、错误数)。如果这一步卡住了,说明你应该从 PY4E 的数据库那一课开始学。

Severance 是为初学者写的这门课,但它讲得最用心的内容,也就是把真实数据从输入一路处理到答案,恰恰是很多有经验的工程师仍然薄弱的地方。

这篇文章对你有帮助吗?

8 个信源
路线图上的下一篇 · 阶段 1: 基础认知《流畅的Python》第二版只新增四章,恰是 FDE 最需要的数据类、类型提示和并发正是进驻客户第一周最需要快速读懂的代码,但这本书不适合 Python 新手。