第 3 章

可编程计算器里的棒球

第3章 可编程计算器里的棒球

那台发条机器人走完第七步时,岩田聪没有像前几次那样立刻把它翻过来重新上弦。他坐在书桌前,盯着那个还在微微颤动的金属躯体,右手无意识地转动着一把螺丝刀。齿轮咬合顺畅,连杆传动准确,每一处关节都按照他理解的方式运作。可正是这种完全理解让他感到一种说不清的焦躁。他拆开过它,重新组装过它,甚至修正了出厂时就存在的装配偏差。现在它完美了。完美意味着没有更多东西可以拆解,没有更多问题需要解决。对一个十二岁的孩子来说,这种状态几乎等同于无聊。室兰的冬天来得早。十月的风从津轻海峡灌进来,把整座城市吹得灰蒙蒙的。岩田弘志那段时间注意到儿子在书桌前坐的时间变长了,但不是在看书,也不是在做学校的功课。他只是在摆弄那些已经拆过无数遍的东西,动作越来越慢,眼神越来越散。作为一个从基层公务员一步步做到室兰市议员的父亲,岩田弘志对儿子的观察向来务实:这孩子遇到了一个坎。不是学业上的坎,也不是纪律上的坎,而是某种更深层的、与智力饥饿有关的东西。

他没有直接问儿子需要什么。他只是在一个周末下午开车带岩田聪去了札幌。札幌的电子街在七十年代中期已经初具规模。那些沿街排列的店铺橱窗里,晶体管收音机、电子计算器、示波器和各种叫不出名字的测量仪器堆叠在一起,散发着塑料外壳与新焊锡混合的气味。岩田聪后来回忆起那一天时,提到最多的是一种视觉冲击:整排整排的设备上密布着按键、开关和指示灯,每一种都代表着某种可以被操控的功能。他在室兰的家里已经组装过电子实验套件里的简易电路,用晶体管驱动过小灯泡和蜂鸣器,但那都是孤立的功能模块。眼前这些设备则不同——它们有复杂的输入界面,有能显示数字的荧光管或发光二极管窗口,有些甚至带着小小的打印机或磁卡插槽。它们不是用来展示单一原理的教学工具。它们是真正在工作的机器。在一家专门经营进口测量仪器的店铺里,岩田聪第一次看到了惠普HP-65可编程计算器。它被锁在玻璃柜台里,旁边放着一张手写的价格标签。那个数字大到让任何普通工薪家庭都需要停下来想一想。

它不是计算器——至少不是当时日本人概念里的那种计算器。当时日本本土的卡西欧和夏普已经推出了大量廉价便携式计算器,能完成加减乘除和简单的函数运算,价格正在迅速下跌,逐渐成为学生和家庭都能负担起的日常工具。但HP-65完全不同。它是一台可编程设备,内置了一个磁卡读写器,能够将用户编写的程序保存在涂覆磁性材料的塑料卡片上。它的顶部有一排按键,其中一些标注着当时大多数日本人完全不理解的符号:RCL、STO、GTO、LBL。这些不是数学函数键。它们是程序控制指令。岩田弘志注意到儿子趴在玻璃柜台上看了很久。他没有催促,也没有问任何问题。他只是站在旁边,等儿子自己抬起头来。岩田聪抬起头时说的第一句话不是能不能买,而是这台设备能够存储程序——他用的是日语,但“程序”这个词他说的是英语program的近似发音。他已经在图书馆的电子工程杂志上读过关于可编程计算器的介绍文章,知道这种设备的存在,知道它能够执行用户编写的一系列指令,而不仅仅是单次运算。

但他从未亲眼见过实物。接下来的事情岩田聪很少在公开场合详细描述。他在后来的采访中只是简单地提到父亲为他购买了那台计算器。这个表述过于平淡,以至于容易让人忽略其中的分量。那台HP-65的售价在当时相当于一个中等收入家庭几个月的可支配收入。岩田弘志不是企业家,不是高级官员,只是一个地方议员。这笔支出意味着家庭预算在其他方面的显著压缩。岩田聪的母亲后来在家族谈话中提到过那段时间家里过得比较紧,但她从不用这件事来要求儿子表现出特别的感激。这个家庭有一种默契:如果一件事对孩子的成长真正重要,那就值得做;做完之后不需要反复强调代价。HP-65到达岩田聪手中时,附带的东西少得令人不安。一本英文说明书,几张空白磁卡,一根电源线。没有日语翻译,没有任何教学辅助材料,没有任何人能够教他怎么用。当时日本中学里没有计算机课程,没有编程社团,甚至没有老师听说过可编程计算器这个概念。

岩田聪的英语水平还处于初中生的正常阶段,而那份说明书是用惠普工程师写给专业用户的技术英语写成的,充斥着register、stack、conditional branching这类术语。他做的第一件事是查字典。不是偶尔查一两个生词,而是逐行逐句地翻译那份说明书。他在笔记本上密密麻麻地抄下英文原文,在旁边标注日文释义,再用箭头和编号把每一条指令的功能串联起来。那个笔记本后来被HAL研究所的同事偶然看到过,上面记录的内容远远超出了一份简单的翻译:岩田聪在尝试理解每一类指令背后的逻辑结构。他不是在学按哪个键能做什么,而是在学这台机器按照什么规则理解他的命令。HP-65的程序存储容量极小。它的用户程序内存只有一百个步数——不是一百行代码,不是一百条指令,而是一百个按键操作步数。每一次按下数字键、函数键或程序控制键都会消耗一步。这意味着任何有意义的程序都必须经过极其仔细的设计,在功能完整性和步数限制之间找到精确的平衡。

此外,它的寄存器数量也很有限:九个存储寄存器,一个运算栈。程序员必须手动管理数据的存储和调用,没有操作系统帮忙做内存分配,没有编译器帮忙优化代码结构。这种极度受限的环境在今天看来几乎是不可理喻的。但恰恰是这种限制,迫使岩田聪在第一次接触编程时就养成了一种后来贯穿他整个职业生涯的习惯:在写任何一行代码之前,先想清楚整个系统的结构和数据流向。他不能靠试错来慢慢调试——磁卡的读写速度很慢,反复修改程序意味着大量时间浪费在等待上。他必须在纸上先画出程序的流程图,标出每一步消耗的步数,确认每一个寄存器的使用时机不会冲突,然后才敢把代码录入到计算器里。他选择的第一个完整项目是棒球游戏。这不是一个随机的选择。棒球在七十年代的日本已经是国民性运动,读卖巨人队的比赛能让整条街道安静下来。岩田聪本人并不是特别狂热的棒球爱好者——他后来在访谈中承认自己对体育的兴趣始终保持在中等水平——但他对棒球作为一种规则系统有着敏锐的观察。

棒球是一项高度结构化的运动:投球、击球、跑垒、得分,每一个环节都有明确的规则边界和概率分布。它天然适合被转化为程序逻辑。更重要的是,棒球是一种可以分享的东西。一个数学计算程序只有使用者自己关心结果;一个电子工程模拟程序只有懂电路的人才能理解它的意义。但棒球游戏不同。任何一个同学都能立刻理解屏幕上的数字意味着什么:好球、坏球、安打、出局、得分。这是岩田聪在编程实践中第一次做出一个关键选择:他选择写的不是展示技术能力的程序,而是能够被他人理解和享受的程序。编写过程持续了数周。HP-65的红色LED数码管只能显示一行数字和简单的符号,没有图形界面,没有动画效果。岩田聪必须把棒球比赛的所有信息——投球结果、击球结果、跑垒位置、出局数、得分——全部编码进数字显示和按键交互中。他在笔记本上画了无数张状态转换图:投手投出球后,根据一个随机数决定是好球还是坏球还是被打中;如果是好球,好球计数加一;如果是坏球,坏球计数加一;

如果被打中,再根据另一个随机数决定是内野安打、外野安打、本垒打还是出局;跑垒员根据击球结果推进相应数量的垒位;三人出局后攻守交换;九局结束后比较总分。每一个步骤都要消耗步数。随机数的生成尤其棘手——HP-65没有内置的随机函数,岩田聪必须利用计算器内部的某些数学运算特性来模拟随机性。一个常用的技巧是取系统时钟的尾数进行某种运算,但HP-65的时钟访问方式并不直接。他在说明书的技术附录里找到了一个可以利用的计算特性:某些超越函数的计算会产生微小的舍入误差,这些误差的分布足够不规则,可以作为伪随机数的基础。这不是一个优雅的解决方案,但它在步数限制内有效。程序的主体逻辑写完后,岩田聪遇到了一个更棘手的问题:交互设计。计算器不是游戏机。它没有摇杆,没有动作按钮,没有为实时交互设计的输入设备。玩家如何击球?如何表达投球这个动作?岩田聪的解决方案是使用计算器上已有的按键来映射游戏操作:用某个数字键代表挥棒,用另一个键代表投球。

程序在特定时刻暂停运算,等待用户按下正确的按键,然后根据按键的时机或选择来决定结果。这种设计在技术层面上非常简单——本质上就是条件判断和跳转指令的组合——但在概念层面上却是一个重要的飞跃:岩田聪第一次意识到,硬件限制不是需要克服的障碍,而是需要理解的规则。游戏体验不是由硬件的先进程度决定的,而是由设计者在给定约束下创造出的规则乐趣决定的。程序最终跑通的那个晚上,岩田聪一个人在房间里测试了十几局。他让计算器模拟两支球队的比赛,自己同时扮演投手和击球手,按键的力度随着局势紧张而越来越大。HP-65的键盘是机械式的,按下去有明显的触感和清脆的声音。当代表本垒打的数字组合出现在红色LED窗口里时,他的手指会不由自主地在桌面上敲一下。当他投出一个三振时,他会低声说一句“好球”——不是对机器说的,而是对自己说的。确认程序运行正常之后,他做了一件在当时的编程文化中并不常见的事:他把计算器带到了学校。

北海道的公立初中在七十年代中期的氛围是务实的。学生之间的社交地位通常由体育能力、学习成绩或者某种公认的特长决定。岩田聪的学习成绩一直很好——他的数学和理科成绩尤其突出——但他不是那种会被同学簇拥的类型。他话不多,不太参与课间喧闹的追逐游戏,午休时间通常待在教室里看书或者画一些同学看不懂的电路图。他在班级里的位置是友善但边缘的:没有人讨厌他,但也没有人特别需要他。HP-65改变了这个局面。当他把那台厚重的黑色设备放在课桌上时,最先围过来的是后排几个平时对课堂内容不太感兴趣的男生。他们被那个红色数码管吸引住了——它在显示数字时会发出一种温暖而锐利的光,和普通计算器灰绿色的荧光显示完全不同。有人问这是什么。岩田聪说这是一个可以编程的计算器。有人问能做什么。他说能玩棒球。“棒球”这个词比“可编程计算器”有效得多。他按下磁卡读入键,把那张存有棒球程序的磁卡插入插槽。计算器的马达发出轻微的嗡嗡声,磁卡被缓缓吸入又被推出。

几秒钟后,程序加载完成。红色LED窗口显示出一个简单的提示:一个闪烁的数字代表着当前的局面状态。岩田聪把计算器递给最近的同学,告诉他按哪个键投球、按哪个键挥棒。那个同学的第一次按键是犹豫的——他不确定按下这个键之后会发生什么,也不确定自己是否真的在玩什么东西。但当红色窗口跳出一串代表安打的数字时,他的表情变了。他的身体微微前倾,手指重新放回按键上,这一次不再犹豫。旁边的人开始出声:有人喊着要他注意好球数,有人在猜测下一次投球会是直球还是变化球——尽管这台机器根本模拟不出这两种球的区别。他们的大脑自动补全了那些缺失的信息。岩田聪站在一旁看着这一切发生。他后来在不同的场合多次描述过这个时刻的感受。说法各有不同,但核心意象是一致的:看到别人因为自己写的程序而露出笑容时,他感受到一种此前从未体验过的满足感。这不是解出一道难题后的自我满足,不是完成一项复杂工程后的成就感,也不是获得师长表扬后的喜悦。

这是一种通过技术工具在他人脸上创造出快乐的能力确认。他写下的那些指令——那些RCL、STO、GTO、条件跳转和伪随机数生成——最终转化成了一种可以被另一个人感受到的情绪。这个反馈循环一旦建立起来,就再也不会断开。在接下来的几周里,那台HP-65在课间和午休时间几乎从未回到岩田聪自己手中。同学们轮流使用它,有人玩出了经验值——知道在某种局面下应该更倾向于选择保守的击球策略——有人开始记录比分,有人和邻座的同学展开非正式的锦标赛。岩田聪的角色从程序员变成了观察者和维护者。他观察同学们按键的方式:哪些操作让他们困惑,哪些操作让他们兴奋,哪些操作他们完全忽略。他观察他们的表情变化:什么时候专注、什么时候放松、什么时候紧张、什么时候大笑。他把这些观察记录下来——不是写在笔记本上,而是记在脑子里——然后回到家里修改程序。他调整了随机数的分布范围,让安打的概率略微提高了一点,因为原来的版本三振率太高,玩家很快就会感到沮丧。

他增加了一个简单的难度选择功能——通过改变随机数的阈值来实现——让初学者和新手玩家都能找到适合自己的挑战水平。他优化了显示信息的格式,让局面状态更容易被一眼看懂。这些修改都不是技术驱动的。没有一个修改是为了展示更复杂的算法或更精巧的编程技巧。它们全部是为了一个目的:让玩的人更开心。这个行为模式在当时看起来只是一个小孩子对玩具的自然调整。但如果把它放在岩田聪后来整个职业生涯的坐标系里观察,它的轮廓就变得异常清晰:这就是他三十年后在Iwata Asks访谈中反复强调的从玩家角度思考的原始形态。他不是在学完一套用户中心设计理论之后才开始这样做的;他在第一次拥有编程能力的时候就自动这样做了。对他来说,程序员和玩家之间不应该有隔离——程序员的工作就是理解玩家为什么笑、为什么不笑、为什么玩了一次就不再玩第二次。这台HP-65也在不断提醒他一个残酷的事实:它的能力即将耗尽。一百步的程序空间意味着棒球游戏的逻辑已经逼近极限。

他想要加入更多的投球类型、更复杂的跑垒判断、更丰富的局面描述——但每加入一个新功能就需要删掉一些旧代码来腾出步数空间。九个存储寄存器意味着他无法同时追踪太多变量。磁卡的读写速度意味着程序加载需要等待十几秒——对于成年人来说不算什么,但对于课间只有十分钟的学生来说,每一次加载都占用了宝贵的游戏时间。更重要的是,这台机器无法创造真正的交互体验。玩家能做的只是按下一个键然后等待结果出现。没有实时的投球动作选择,没有击球时机的判断空间,没有任何形式的视觉反馈除了那一行红色的数字。岩田聪想要的是一种更丰富的交互模式:玩家能够在正确的时机做出正确的动作来影响结果,而不是仅仅触发一个预先计算好的随机事件。但HP-65的硬件架构从根本上不支持这种实时性。他在某个时间点意识到了这一点:这台曾经让他跨越物理机械极限的设备,现在正在成为新的瓶颈。这是一个相当苦涩的认识。

HP-65是他拥有的最昂贵的个人物品,是他父亲用相当于几个月收入的代价换来的工具,是他在同学中获得认可和连接的媒介。从任何一个角度看,他都应该对它感到满足。但他不满足。这种不满足不是出于贪婪或不懂感恩,而是出于一种工程师式的清晰判断:当工具的边界已经触达时,继续在边界内优化只会产生递减的回报。你需要新的工具。真正的计算机——那些拥有更大内存、更快处理器、能够连接显示器甚至图形终端的机器——正在日本的大学和少数大型企业中缓慢普及。它们距离一个北海道初中生的日常生活还很遥远。但岩田聪已经知道它们的存在。他在图书馆的科技杂志上读到过关于微型计算机发展的文章,看到过那些带有键盘和显示器的设备的照片。他知道自己下一步需要什么。那台HP-65最终没有被遗忘在抽屉里。它被继续使用了很长时间——用来验证新的数学想法、用来测试简短的程序逻辑、用来向新认识的朋友展示自己写过的那个棒球游戏。但它不再是他探索的核心方向了。

它完成了一个阶段性的使命:把岩田聪从物理拆解的世界带进了逻辑构建的世界,让他理解了代码如何转化为规则、规则如何转化为体验、体验如何转化为笑容。那个棒球游戏的最后版本占用了一百步中的九十六步。四个空余步数无法加入任何有意义的新功能。岩田聪在笔记本上记录下了最终的代码清单——每一行指令旁边都标注着它所消耗的步数和它所实现的功能——然后在最后一页的空白处写下了一行简短的字:需要更多步数。这不是一句抱怨。这是一个需求陈述。它指向一个明确的方向:高中。那里有更强大的计算机设备,有同样对编程感兴趣的同学,有能够教他更多东西的老师。札幌南高等学校——北海道最顶尖的公立高中之一——的入学考试竞争激烈,但岩田聪的成绩足够让他有充分的选择余地。他决定报考那里。这个决定在当时看起来只是一个正常的升学选择。但在岩田聪的人生弧线里,它的意义要深远得多:这是他第一次为了获取更强的技术资源而做出主动的环境选择策略。他不是被动地等待下一个阶段到来;

他是看到了下一个阶段能提供什么工具、什么知识、什么合作者,然后朝着那个方向走过去。HP-65安静地躺在他的书桌上。红色LED窗口熄灭着。那张存有棒球程序的磁卡插在旁边的塑料保护套里,上面用记号笔写着两个英文字母和一个数字:BB 1.0——Baseball version 1.0。磁卡的存储容量是每面约五十步的程序代码,两面合计一百步。他用了两张卡来保存这个棒球游戏的不同版本和测试数据。两张卡加在一起可以存储两百步的程序信息——但HP-65一次只能读取一张卡的一面到内存中运行。所以实际可用步数仍然是一百步。限制从来不只是存储容量的问题。它是架构的问题。岩田聪已经把这台机器在一个固定架构内能做的事情推到了极限。再往前一步,需要的不是更多的磁卡或更精简的代码,而是一台从根本上设计原则就不同的机器——一台真正的通用计算机。他把那两张磁卡收进书桌抽屉里,和那些已经拆解过无数次的发条玩具放在一起。那些玩具曾经是他理解世界的媒介;

现在它们只是安静的纪念品。抽屉关上时发出的声音和往常一样轻——木制滑轨经过多年的使用已经磨合得非常顺滑——但那个动作本身带着一种明确的终结感。不是告别。是归档。窗外,室兰的冬天还在继续。津轻海峡的风裹着细碎的雪粒敲打着窗玻璃,发出沙沙的声音。室内暖气充足,书桌上的台灯照出一圈暖黄色的光斑。那台HP-65躺在光斑边缘,黑色塑料外壳上反射出模糊的光泽。它的键盘上某些常用按键的表面已经出现了细微的磨损痕迹——那是几周以来数十个课间被不同手指反复按压留下的物理证据。那些痕迹很浅,浅到只有凑近了仔细看才能发现。但它们确实在那里。一百步的程序空间,九十六步被棒球游戏占据,四个空余步数无法实现任何新功能——这些冷冰冰的数字定义了这台机器能给予的全部可能性。但那些磨损的按键痕迹讲述的是另一组数字:几十个课间、十几个同学、数不清的按键动作、无数次因为安打而发出的欢呼声和因为三振而发出的叹息声。两组数字之间没有任何换算关系。

岩田聪关掉台灯时,房间陷入短暂的黑暗,然后窗外的雪光慢慢渗进来,给书桌涂上一层淡蓝色的薄光。他躺在被子里,脑子里转着的不是明天要交的作业,也不是下周的考试范围。他在想一个更具体的问题:如果有一台真正的计算机——一台拥有几千字节内存而不是一百步程序空间的机器——他能做出什么样的棒球游戏。不是更复杂的棒球游戏。是更好玩的棒球游戏。