寓言
乐谱和自动演奏钢琴
音乐学院的作曲系教授老金花半年写了一部钢琴组曲,谱面精美,和声编排复杂,速度标记精确到每一小节。系里把这套谱子印成教材,发给全国二十所音乐学院的钢琴专业学生,让每人弹一遍录像回传。
三个月后,二十份录像传回来。老金一一看完,发现没有一份弹得跟谱面完全一致。有的人速度转换处慢了半拍,有的人在重复段落里忘了做强弱变化,有的人把踏板踩在了不对的地方。同样的谱子,二十个人弹出二十种效果。
老金跟工学院的教授老温吐槽:谱子写得这么清楚,为什么弹出来的效果差别这么大。老温说:因为你的谱子是一套指令,不是一台机器。指令告诉人该做什么,但没有保证他一定做得到、做得对、做得一样。你需要一个音乐盒。
老温带老金参观了他的实验室:一架自动演奏钢琴。老金把谱子转换成数字格式输进去,钢琴自己弹,每一次都完全相同。速度切换精准,强弱变化一致,踏板时机分毫不差。老金听完自己作品的自动演奏版本,沉默了很久——他第一次听到自己的谱子被毫厘不差地执行出来是什么效果。
老金问老温:这机器和普通钢琴有什么区别。老温说:普通钢琴只提供发声,怎么发声靠人。自动演奏钢琴多了三样东西:第一,指令解析器——把谱面符号转成执行动作。第二,状态管理器——知道现在弹到第几小节、下一拍是什么。第三,异常处理器——如果机械手指卡住了,它知道跳过还是重试。这三样东西合在一起,叫执行引擎。
老金回去以后在教材前言里加了一句话:乐谱定义音乐应该是什么样的,演奏引擎保证音乐实际弹出这个样。学谱子教你怎么设计流程,学引擎教你怎么把流程变成确定的结果。两门课以前被当成同一门课教,从这一届起拆成两门。
有学生问老金:如果我自己会弹钢琴,还需要自动演奏吗。老金说:你一个人弹,每次可以弹得不一样——这叫人工执行。你要让二十个人在同一时间、不同地点、用同一套标准执行——这叫系统执行。图谱可以复印,执行能力复印不了。
老温后来把自动演奏钢琴的技术原理整理成论文,论文的标题是:《从定义的精准到执行的确定》。摘要里写:很多系统失败,根子在于把「设计正确」和「执行正确」当成了同一件事。设计正确靠人才,执行正确靠引擎。