🧩 第九章 建模:填补现实世界和软件之间的沟壑
📄 一句话概括

计算机真正强的只有两件事:同样的活重复做、再多也不忘——实测 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. 再列出三件【需要判断】的活,看看哪些被硬塞给了程序。

常见误区

  1. 以为计算机比人聪明。它只是不走神、不忘事。
  2. 以为判断也能交给程序。规则是人定的,程序只执行。
自测三问(点开对答案) 1. 计算机擅长哪两件事? —— 固定工作(同样输入永远同样输出)和记忆工作(存多少都不忘)。 2. 实测证明了什么? —— 同一函数 10000 次结果完全一致,第 1 次与第 10000 次相同。 3. 它不会的是什么? —— 判断该不该做这件事、处理没写过的情况。

相关笔记