修行的分界线不在【学了多少】,而在【自己动手做完了几件】——编程是手艺,手艺只能练出来。
全书第一节。它不讲技术,讲路径:先说清这门手艺该怎么练,后面十章的知识才有地方挂。
一、修行和上课是两件事
上课衡量的是【听懂了没有】,修行衡量的是【能不能独立做出来】。 这两种评价标准差得很远:一堂课可以听完就忘,一件活做完了却永远是你的。 所以编程尤其如此——看十遍不如写一遍。 一个可用的判断:关掉教程,对着一个空文件,你能不能把那个东西做出来。
二、四个台阶
照着写:跟着教程一行行敲,能跑通就满意。 改着写:拿到别人的代码,改成自己需要的。 自己想:从空文件开始,自己把步骤拆出来。 会权衡:知道为什么不那样做——选型、代价、以后怎么维护。 多数人卡在第二阶,而且卡很久:因为一直在【抄】,没有主动【改】的自觉。 往第三阶迈的那一步特别具体——把教程关掉,自己重写一遍。
三、内功和招式
招式会变:框架、API、工具链,三五年换一批,学了不用就会锈。 内功不变:数据怎么组织、算法怎么想、系统怎么跑起来、问题怎么拆开。 本书讲的是音视频的原理——H.264 这个标准会老,但【帧间预测为什么能省掉一大半数据】这个思路不会。 先练内功的道理很朴素:招式换得快,内功可以一直用。
四、怎么判断自己在哪一阶
三道自查题,能答上来就说明位置清楚了: ① 最近三个月,有哪件东西是你从空文件开始做出来的? ② 遇到报错,你是先自己读一遍,还是立刻搜答案? ③ 你能说出手上这个工具【为什么这么设计】吗? 第一题答不出来,说明还在前两阶——那就先去做一件。
五、动手 Demo:同一件事,三个阶段各要多久
修行修的是什么?把【做完一件事】拆成三段计时, 看同一个任务在新手、熟手、高手手里各花多少分钟。
stages = [
("新手", 60, 30, 90),
("熟手", 15, 20, 30),
("高手", 0, 12, 8),
]
base = None
for name, look, code, debug in stages:
total = look + code + debug
if base is None:
base = total
print("%s:查资料 %2d + 写 %2d + 调 %2d = %3d 分钟(%.1f 倍快于新手)"
% (name, look, code, debug, total, base / total))
实跑输出:
--------------------------------------------------------------------
同一件事,三个阶段各要多久
--------------------------------------------------------------------
修行修的是什么?把【做完一件事】拆成三段计时,
看同一个任务在新手、熟手、高手手里各花多少分钟。
任务:给一份 30 页的 PDF 写一个批量改名脚本
阶段 查资料 写代码 调试 合计
---------------------------------------------
新手 60 30 90 180
熟手 15 20 30 65
高手 0 12 8 20
三段里降得最狠的不是【写得快】:
调试 90 → 8 降到 1/11
查资料 60 → 0 已经不用查了
写代码 30 → 12 只降到 1/2.5
180 分钟 → 65 分钟 → 20 分钟,新手是师傅的 9 倍。
一年做 200 个这样的任务,差距是:
新手 600 小时 熟手 217 小时 高手 67 小时
差 533 小时 —— 差不多是 13 个全职工作周
三段里降得最狠的不是【写得快】:调试从 90 分钟降到 8 分钟,查资料从 60 降到 0。 修行先修的是【少犯错】和【不用查】——它们才是耗时的大头。
30 秒实验
- 挑一件你最近做过的事,把总耗时拆成【查资料/写/调试】三段写在纸上。
- 看哪一段最长——那一段就是你下一步该练的地方。
常见误区
- 用【看完了几本书】衡量进度。进度只该用【做完了几个东西】衡量。
- 觉得【看懂了就是会了】。看懂是输入,写出来才是你的。
自测三问(点开对答案)
1. 修行和上课的分界线是什么? —— 上课衡量【听懂了没有】,修行衡量【能不能独立做出来】。 2. 四个台阶里多数人卡在哪一阶? —— 第二阶【改着写】——一直在抄,没有主动改。 3. 为什么本书先讲原理而不是先讲命令行? —— 原理是内功、命令行是招式;招式会换,内功不换。- ☐ 下一节(1.2 选好发展方向)
相关笔记
- 选好发展方向 — 练之前,先选跑道
- 从小白到大牛的炼钢之路 — 具体用什么节奏练
- ⌨️ 编程原理 · 索引 — 另一门讲编程全貌的课
- 🎬 FFmpeg入门详解 · 索引