PY4E 是入门课,FDE 却不该跳过后半部分
第 12 至 17 课讲正则、Web 服务和数据库,正对应客户交来的杂乱导出文件和无文档接口,而且全部免费。
要点速览
- PY4E 在 py4e.com 上免费开放(CC BY 4.0)。Coursera 版是密歇根大学推出的五门入门课系列,不要求任何基础。
- py4e.com 共 17 课,第 12 到 17 课讲正则表达式、网络编程、Web 服务、面向对象编程、数据库和可视化,这是对 FDE 最有用的部分。
- 已经会其他语言的工程师,基础部分快速浏览即可,把精力放在正则及之后的课程上。
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 个信源
- PY4E - Python for Everybody
- PY4E - Python for Everybody
- Python for Everybody: Exploring Data in Python 3
- Python for Everybody Specialization – Coursera
- Programming for Everybody (Getting Started with Python) – Coursera
- Charles Severance (computer scientist) – Wikipedia
- csev/py4e – GitHub
- Python for Everybody – Goodreads