📄 一句话概括
计算机真正强的只有两件事:同样的活重复做、再多也不忘——实测 10000 次计算每一次结果都一样;而【该不该做】它不会判断。
📝 本节和前面几节的关系
9.1 留下一个问题:判断该记什么,为什么必须人来做?这一节从计算机的长处说起。
一、两件真本事
固定工作:同样的输入给同样的输出,做一万次也不走神。 记忆工作:存一万条记录,一条不差、随时能查。 这两件事人做不好——人会疲劳、会记错、会厌烦。
二、实测:10000 次一模一样
同一个函数跑 10000 次,每次结果完全相同(实测 True)。 第 1 次和第 10000 次的结果也相同。 耗时 0.001 秒——快是附带的,【不走神】才是关键。
三、它不会的也很明确
它不会判断【该不该做这件事】——这是 9.1 那 5 个字段必须人定的原因。 它不会处理没写过的情况:没预料到的输入,它只能报错或乱来。 所以沟壑两头各有一个强者:人有判断,机器有耐性。软件就是让机器替人干那部分耐性活。
四、这条分工决定了软件该做什么
凡是【重复+需要不忘】的活,都该交给计算机:记账、对账、提醒、统计。 凡是【需要判断】的活,留给人的那一侧:定规则、处理例外、决定取舍。 建模做的事,就是把【判断】提前做完并写下来——写下来之后,机器才能照做。
五、动手 Demo:计算机擅长固定工作和记忆工作
让同一个函数跑 10000 次,检查输出是否完全一致。 再把人和计算机放在三件事上对比。
def work(x):
return (x * 37 + 11) % 1000
N = 10000
seq = [work(i) for i in range(N)]
same = all(work(i) == v for i, v in enumerate(seq))
print(N, same, work(0) == seq[0]) # 10000 True True
实跑输出:
--------------------------------------------------------------------
计算机擅长固定工作和记忆工作
--------------------------------------------------------------------
计算机真正强的是两件事:**同样的活重复做**、**再多也不忘**。实测:
重复计算次数 10000 次
每次结果都一样 True
耗时 0.001 秒
第 1 次与第 10000 次相同 True
能力 人 计算机
-----------------------------------------
同样的活做一万次 会走神 一模一样
记住一万条记录 会记错 一条不差
判断该不该做 能 不能
**所以判断那 5 个字段该不该记的活,必须人来做**——计算机不会判断。
**建模就是把这个判断【提前做完并写下来】。**
**这就是沟壑的由来**:人有判断但会走神,机器不走神但不会判断。
实测:10000 次结果完全一致,第 1 次与第 10000 次也相同。 快不是重点,不走神才是——人做一万次一定会出错。 但【该不该做】它不会判断,所以那 5 个字段还得人来定。
30 秒实验
- 列出你手上三件【重复且不能忘】的活,它们都该交给程序。
- 再列出三件【需要判断】的活,看看哪些被硬塞给了程序。
常见误区
- 以为计算机比人聪明。它只是不走神、不忘事。
- 以为判断也能交给程序。规则是人定的,程序只执行。
自测三问(点开对答案)
1. 计算机擅长哪两件事? —— 固定工作(同样输入永远同样输出)和记忆工作(存多少都不忘)。 2. 实测证明了什么? —— 同一函数 10000 次结果完全一致,第 1 次与第 10000 次相同。 3. 它不会的是什么? —— 判断该不该做这件事、处理没写过的情况。- ☐ 9.3 通过业务分析、需求定义和设计来填补沟壑
相关笔记
- 现实世界和软件之间存在沟壑 — 这道沟的形状
- 通过业务分析、需求定义和设计来填补沟壑 — 三个阶段的筛子
- 在上游工程中化为通用的归纳整理法 — 判断提前做完的地方
- 🧩 面向对象是怎样工作的 · 索引