第 5 章
迟到的入职者
1985年春天,宫崎英高坐在一间开放式办公室的角落工位上,面前摊着一份厚度超过三厘米的客户规格书。日光灯管在他头顶发出持续的低频嗡鸣,与数十台计算机散热风扇的运转声混成一片。办公室里所有人都穿着深色西装,即便空调系统已经因为节能指令在晚上七点之后自动调低了功率,领带的结也不能松开。这是日本IT企业标准的工作环境——不是后来硅谷式的开放与休闲,而是制造业车间管理逻辑向信息产业的直接延伸:整齐划一的工位排列、可视化的考勤板、每半小时需要在进度表上填写的工时记录。那份规格书来自一家大型银行的地方分行。客户想要一套新的账务处理模块,但需求描述本身便是一个层层矛盾叠加的产物。最初的需求由分行营业课提出,经过总行系统部的技术审查后被打回修改,再由第三方咨询公司转译为技术规格,最终以一份盖着四个部门印章的稟議书形式送达开发课。
每一个环节都添加了自己的理解、妥协和安全冗余,最终形成的文档里,第三页要求系统必须在夜间批处理中完成全部数据校验,第十七页又规定同一批数据必须在联机交易时实时更新——两个要求在同一套老旧的主机数据库架构下彼此冲突,但没有任何一个环节的审批者需要对此负责。他们只负责盖章。宫崎英高的工作是让这段代码跑起来。不是用最优雅的方式,不是用最高效的逻辑,而是在截止日期之前、在现有系统的兼容性约束之内、在预算不允许购买新的数据库许可的前提下,让它跑起来。他开始写一段嵌套了七层条件判断的COBOL程序,每一层都是为了处理某种特殊的例外情况:某个账户类型在新旧系统迁移时被错误标记、某个交易代码在特定分行有不同含义、某个利息计算方式在闰年时需要手动修正。这段代码最终会在测试环境里通过全部用例,不是因为逻辑完美,而是因为测试用例本身就是根据同样的规格书编写的——一个封闭的、自我指涉的验证循环。这是宫崎英高从庆应义塾大学社会科学专业毕业后的第一份工作。
他二十四岁,进入了一家后来被证实为甲骨文的公司,从事企业软件开发。大学期间,他仍然保持着在计算机上构建迷宫的习惯,仍然在课余时间阅读那些封面晦暗的平装书,仍然会在深夜独自一人玩《巫术》——在那些地下城里,每一次死亡都有明确的因果,每一条规则都可以通过反复试错被穿透。但他没有进入游戏行业。八十年代中期日本游戏产业的招聘渠道并不透明,大型发行商倾向于从特定专门学校招收毕业生,而中小型开发商则深嵌在各自的人脉网络之中。一个社会科学专业出身、自学编程、没有行业引荐人的年轻人,连投递简历的入口都很难找到。于是他坐在这间办公室里,面对一份满是矛盾的规格书,开始写一段注定冗长的代码。这不是一个独特的处境。1985年的日本IT产业正处于一个奇特的膨胀期。五年前,通产省提出了“第五代计算机”计划,目标是开发能够进行逻辑推理的人工智能系统,整个行业沉浸在技术赶超的狂热之中。
大型企业纷纷设立“情报系统部”或“电子计算部”,从大型机到办公自动化设备,从金融终端到库存管理系统,需求像潮水一样涌来。NEC的PC-9801系列开始占领企业桌面,富士通和日立在与IBM的兼容机战争中各据阵地,而甲骨文这样的外资数据库公司则刚刚在日本设立法人,试图撬开一个由本土厂商严密把守的市场。泡沫经济的前夜,企业愿意为“信息化”支付高昂的预算,哪怕他们并不完全清楚信息化究竟意味着什么。这间办公室里的程序员们来自五花八门的背景。宫崎英高邻座的同事毕业于电气工程专业,此前在一家制造企业担任设备维护工程师,因为公司导入ERP系统时表现出对计算机的兴趣,被调到了IT部门。他对面工位的中年男人原本是银行职员,在三十五岁时被派遣到这家公司参与联合开发项目,从此再也没能回到原来的岗位。斜后方那个比宫崎晚一年入职的年轻人,大学读的是文学,因为在校期间用BASIC写过一个小型数据库应用,被招聘广告上“不要求专业背景”的字样吸引而来。
这群人的共同点是:没有人一开始就想做企业IT,但八十年代日本的雇佣结构像一座巨大的分拣机,将不同材质的人按照资历、出身和偶然性分配到不同的格子里,而企业IT这个格子恰好处于扩张期,入口比其他格子更宽。开放式办公室的布局强化了这种被分拣的感觉。课长的座位在最后一排,稍微垫高的地台让他可以俯视整个团队。系长的座位在每一排的最外侧,方便随时起身巡视。普通程序员的工位之间没有隔板,每个人的屏幕都暴露在路过的任何一双眼睛之下。这种空间设计源自工厂车间管理的视觉控制逻辑——管理者需要一眼看到谁在工作、谁在发呆、谁的屏幕上出现了不该出现的内容。它假设工作是可以被视觉监测的连续过程,而创造性思维中那些必要的走神、画草图、盯着空白墙壁发呆的时刻,在这种空间里都会被识别为怠工。宫崎英高学会了在这种环境下保持一种特定的工作节奏。他写得不算快,但很少出错。
他接手的模块通常不需要大规模返工,不是因为他的代码特别优雅,而是因为他从一开始就仔细阅读了规格书中所有的矛盾之处,并在动手之前就已经决定了哪些矛盾要正面解决、哪些矛盾要用额外的条件判断绕过去、哪些矛盾根本不可能在现有架构下解决——对于最后这一类,他会写一份简洁的备忘录提交给系长,说明技术上的不可能性,然后等待批复。批复通常需要两周,经由系长、课长、营业课、客户方系统部层层流转,最后返回的意见往往是“请与客户协商寻找替代方案”。而客户通常会说“按照原来的要求做”。这不是个人的失败。这是一个系统对个体独创性的结构性消解。稟議书制度——日本企业特有的内部审批流程——将每一个技术决策都转化为需要多部门共识的行政决策。一份关于是否允许某个模块使用新版本数据库驱动的请示,需要经过技术课、品质保证课、营业课、财务课四个部门的盖章。技术课关心兼容性,品质保证课关心测试成本,营业课关心交付日期,财务课关心许可费用。
四个部门的利益诉求彼此冲突,但没有任何一个部门有动力去理解程序员的逻辑:如果使用新驱动,这段代码可以缩短三分之二,维护成本也会大幅下降。因为“维护成本”不在任何人的KPI里,而“交付日期”和“许可费用”分别在营业课和财务课的KPI里。最终,盖章的结果是维持现状。宫崎英高看着那份盖满印章的稟議书回到自己桌上,在“批准”一栏的圆圈里打着四个规整的红色印记,旁边附着财务课的备注:“新驱动许可费用超出本期预算,请于下期预算编成时再议。”下期预算编成是明年三月,而项目截止日期是今年十一月。他把稟議书收进文件夹,打开代码编辑器,开始写那段冗长的兼容性补丁。这种经验日复一日地累积,在表面上看是平淡无奇的职场日常,但在一个对“规则”有着异常敏感度的人身上,它正在缓慢地沉淀为某种更为根本的认知。规则不是写在纸上的条款,规则是那些条款之间彼此冲突时,实际生效的那条隐形路径。
公平感不是每个人得到相同的对待,而是规则本身具有一致性——你知道触碰哪条线会触发什么后果,你知道那个后果不会因为审批者的心情或部门的利益而改变。在企业系统里,规则是在不断被重新解释的,每一次解释都向权力结构的方向弯曲,直到最终执行者面对的不再是一套规则,而是一团由规则碎片、行政惯例和权力意志混合而成的黏稠介质。办公室窗外正在发生的事情构成了另一重对照。1986年到1989年,日本经济进入了泡沫膨胀的最高速阶段。日经平均指数从一万三千点一路飙升到接近四万点,东京都心的商业地价在三年内翻了三倍,企业利润和名义工资同步上涨,但资产价格的涨幅远远甩开了劳动收入。IT行业同时经历着双重刺激:一方面,企业信息化投资的预算随着整体经济膨胀而水涨船高;另一方面,资产价格的飙升催生了一种普遍的投机心态——任何与技术相关的概念都被赋予了过高的预期。招聘广告上的数字变得夸张起来。
一些刚成立的小型软件公司打出“年薪一千万、周休三日、提供公司宿舍”的条件争夺程序员,背后往往是房地产商或金融机构的资本在支撑——他们需要一个“IT子公司”来作为资产组合中的技术标签。一些大型企业则开始设立“新事业开发室”,投入巨额预算探索人工智能、多媒体、卫星通信等前沿领域,但这些部门往往在两年后就被悄然解散,因为泡沫破裂后母公司的核心业务遭受重创,所有“未来投资”都被第一时间裁撤。宫崎英高所在的甲骨文日本法人相对稳定。作为一家外资数据库公司,它的客户基础是那些真正需要处理大规模数据的大型企业和政府机构,而不是泡沫催生的投机性项目。但这种稳定本身也意味着一种更深的嵌入:他每天处理的代码,是银行的核心账务系统、制造商的库存管理系统、政府机构的人口统计数据库——这些系统对“稳定性”的要求压倒一切,任何创新的尝试都必须经过层层安全论证,最终被削平为最保守的实现方式。他在这个系统里工作了数年。
公开记录中几乎没有留下任何痕迹:没有发表的技术文章,没有参与的开源项目,没有任何关于这段职业生涯的直接回忆被保留下来。这种沉默本身是一种证据——他是一名普通的、尽职的员工,完成了分配给他的任务,没有制造麻烦,也没有引起特别的注意。但这并不意味着他在沉睡。同一时期,东京的游戏产业正在经历自己的膨胀与躁动。1986年,艾尼克斯(Enix)发行了《勇者斗恶龙》初代,堀井雄二将美式RPG的复杂系统简化为任何人都能上手的指令菜单,中村光一则用精巧的程序设计确保了游戏在FC有限的硬件性能下流畅运行。这款游戏最终售出超过一百五十万份,确立了一种新的范式:角色扮演游戏不必是《巫术》那样的硬核地牢爬行,它可以是温暖的、线性的、由明确的剧情引导的。一年后,史克威尔(Square)的《最终幻想》从另一个方向切入同一片市场,用更为精致的视觉呈现和更为戏剧化的叙事结构,将“故事驱动”推向了日式RPG的核心位置。
这两条路径——简化与叙事化——共同定义了一个时代。日本游戏产业在八十年代后半期进入黄金时代,FC和后续的SFC主机建立起庞大的家庭用户基础,游戏设计的主流哲学是降低门槛、扩大受众、用清晰的引导和明确的正反馈留住玩家。难度不是被消灭了,而是被重新包装:它不再表现为《巫术》那种“不知道规则就寸步难行”的严苛,而是表现为“知道规则之后可以反复挑战”的适度障碍。死亡不再是惩罚,而是一个短暂的停顿,玩家很快就能从上一个存档点重新开始,几乎没有损失。这与宫崎英高在深夜独自玩《巫术》时的体验截然相反。在那个地牢里,死亡意味着失去进度、失去装备、失去数小时的探索成果——除非你在死亡之前已经通过反复试错掌握了这一层的全部规则。这种体验在当时已经被日本主流游戏市场判定为“过时”,但宫崎英高并不觉得它过时。他觉得它真实。世界本来就充满了不透明的规则、不可逆的后果和必须自己摸索才能获得的认知,一本说明书不能解释所有事情,一个箭头不能指引所有方向。
这种偏好在他大学时代已经成形,但在这段企业IT生涯中,它获得了一个新的维度:他开始理解为什么规则的一致性如此重要。在企业系统里,规则的不一致性是刻意维持的。管理层需要保留解释权,营业部门需要保留谈判弹性,客户需要保留变更需求的余地。程序员在链条的最末端承受所有这些不一致性的后果——你的代码必须同时满足相互矛盾的要求,而你没有权力决定哪个要求优先。这种处境与玩家面对一款设计糟糕的游戏时的处境在结构上是一致的:你被扔进一个规则不透明的环境里,你试图通过观察和尝试来理解规则,但规则本身在变化,不是因为你理解错了,而是因为设计者没有想清楚,或者想清楚的人没有最终决定权。宫崎英高后来在设计《黑暗之魂》的难度机制时,反复强调一个概念:“公平感”。不是仁慈,不是降低难度,不是给玩家更多的提示或更低的惩罚——而是公平。公平意味着规则是透明的、一致的、可穿透的。玩家每一次死亡,都知道自己为什么死亡;
每一次失败,都能从失败中提取可用于下一次尝试的信息。这种设计哲学的形成,不能简单归因于他玩过《巫术》或读过晦涩的平装书。它还需要一个反向的参照系:一套不透明的、不一致的、不可穿透的规则系统,以及在其中长时间承受挫败感的切身体验。1988年秋天,一个具体的事件加深了这种认知。宫崎英高被分配到一个大型制造企业的ERP系统迁移项目。旧系统运行在一台已经服役十年的富士通大型机上,新系统要迁移到甲骨文的数据库平台。迁移本身并不复杂——数据结构相对规整,业务逻辑有完整的文档记录——但问题出在时间表上。客户要求在次年四月之前完成迁移,因为四月是新财年的开始,所有预算和人事安排都以四月为节点。这意味着整个项目必须在六个月内完成从需求分析到上线运行的全部流程。项目经理制定了一份详细到每一天的进度表,贴在办公室的白板上。最初两个月,进度按照计划推进。
第三个月,测试阶段发现旧系统中存在大量未被文档记录的数据异常——某些字段在特定条件下会被写入错误的值,旧系统用一套外部修补程序在夜间批处理中修正这些错误,但修补程序的逻辑从未被正式记录,因为它是由一位已经退休的前任系统管理员在八年前手写的。要复现这套逻辑,团队需要逆向工程数万行未经注释的代码。宫崎英高向项目经理提出延长测试周期、推迟上线日期的建议。项目经理将建议提交给营业课,营业课与客户协商后回复:上线日期不可更改,因为新财年的预算已经基于新系统上线的前提编制,推迟意味着整个财年的业务计划需要重新调整。替代方案是:在上线后保留旧系统作为备份,新系统遇到数据异常时手动切换回旧系统处理,然后在后台逐步修复数据问题。这是一个典型的零和博弈:时间、质量、成本三者之间不存在同时满足的解。客户选择了时间和成本,质量被牺牲——不是完全放弃,而是将风险转移到上线后的运维阶段。
程序员们知道这个决定意味着什么:未来的几个月甚至几年里,他们需要不断为这个仓促上线的系统打补丁,每一次补丁都会引入新的问题,而新的问题又需要新的补丁。技术债务会像复利一样滚雪球。宫崎英高在那个秋天写了大量代码——不是他想要写的代码,而是为了填补时间表和质量之间鸿沟而不得不写的代码。一段用于处理日期格式转换的函数,因为要兼容旧系统中三种不同的日期记录方式,被写成了超过两百行;一个本可以用一条SQL语句完成的查询,因为旧数据库不支持标准SQL的某个子句,被拆成了七条语句加一段中间处理逻辑。他知道这些代码是丑陋的,知道它们在逻辑上是不必要的复杂,知道未来维护这些代码的人会诅咒写代码的人。但他也知道,在给定的约束条件下——不可更改的截止日期、不可升级的旧系统、不可增加的人手——这些丑陋的代码是唯一能让系统按时跑起来的方案。这让他对“约束”有了更深的理解。
高中时代在计算机教室里写ASCII迷宫时,约束是物质性的:没有外接存储设备,每次关机代码都会消失,所以必须在一次开机时间内完成构建和测试。那种约束是清晰的、硬性的、不可协商的,但它同时也是一个创造性的前提——正因为代码会消失,他才学会了重视结构而非具体实现,学会了把迷宫的核心逻辑压缩到可以在短时间内重建的程度。而现在面对的约束是另一种性质:它是软性的、可协商的、由人的决策而非物理规律造成的——但正因为如此,它更难穿透。物理规律不会跟你谈判,人的决策会。每一次谈判都在消耗时间和精力,最终达成的妥协往往比物理约束更令人沮丧。办公室里比他年长的同事们已经适应了这种状态。那位从银行派遣来的中年程序员有一套自己的生存哲学:不要试图改变系统,系统比你大;把分内的工作做好,不要为分外的决策负责;如果项目失败了,确保失败的原因不在你的代码里。这套哲学不是懦弱,而是一个人在经历了足够多次无效抗争之后形成的理性策略。
他曾经也试图推动过技术改进,也写过详细的备忘录论证某种新方案的优越性,也等待过稟議书的批复——最终发现批复的结果与论证的质量无关,只与决策链条上各个部门的利益平衡有关。于是他停止了试图改变系统,转而专注于在系统内部为自己争取最小的摩擦空间。宫崎英高观察着这位同事,也观察着其他人在这个系统中的不同应对方式。有人选择了彻底的技术保守主义——只使用最成熟的、经过十年以上验证的技术方案,拒绝任何新的工具或框架,因为“新的东西会带来新的风险,新的风险需要新的审批”。有人选择了热情消退后的麻木——八小时内完成规定的工作,八小时外完全切断与工作的联系,把编程从一种兴趣降格为一种谋生手段。还有人选择了离开——那些跳槽到泡沫催生的新兴IT公司的人,他们的新公司在两年后随着泡沫破裂而倒闭,他们又不得不重新找工作,重新进入另一个类似的系统。宫崎英高的选择与所有这些都不同。他没有试图改变系统——他看到了试图改变系统的人最终被系统边缘化的结局。
他也没有变得麻木或保守——他仍然保持着对技术的兴趣,仍然在业余时间阅读行业杂志上关于新编程语言和开发方法的文章,仍然会在个人计算机上尝试写一些与工作无关的小程序。他也没有跳槽到那些泡沫催生的公司——也许是因为他对风险有着某种直觉性的警惕,也许只是因为他还没有找到真正值得跳过去的目标。他的选择是一种沉默的内化。他把每天在工作中遭遇的挫败感、不合理性、规则的扭曲和个体意志的无效率,一点一点地吸收进自己的认知体系里。他没有让这些经验变成怨气或麻木,而是将它们转化为一种对“系统”的深刻理解:系统是如何运作的,系统是如何消解个体独创性的,系统是如何在表面上维持理性而在深层是非理性的——以及,如果有一天由他来设计一个系统,他会如何避免这些陷阱。这种内化的过程不是有意识的、目标明确的积累。宫崎英高在那几年里并没有一个清晰的职业规划,没有告诉自己“我在企业IT待几年是为了学习系统的运作逻辑以便将来设计游戏”。
他只是一个二十九岁才入行游戏业的迟到者,在那之前需要一份工作养活自己。但正是因为没有明确的功利目的,这段经验的吸收才更加深层和自然——它不是在为某个特定目标收集素材,而是在为一个尚未命名的设计哲学积攒感性质地。1989年,日经平均指数在十二月二十九日达到了三万八千九百一十五点的历史最高点。那一天,宫崎英高正在处理某个年终交付的项目收尾工作,在写一份关于下一年度技术预算的稟議书,在开放式办公室里度过又一个加班到深夜的夜晚。泡沫即将破裂,但此刻还没有人知道这一点。办公室里仍然弥漫着一种奇特的乐观情绪:项目预算还在增加,招聘广告上的数字还在攀升,人们还在相信增长会永远持续下去。但宫崎英高内心的某种不安已经开始积累到可以被感知的程度。他二十九岁了。三十岁的节点正在逼近。他在这个系统里已经待了五年——足够长到深刻理解了它的运作逻辑,也足够长到开始怀疑自己是否正在被这个系统同化。
那些年长的同事们曾经也年轻过,也曾经有过改变系统的冲动,也曾经相信自己与别人不同。他们是在什么时候放弃了那种信念的?是在第三年?第五年?还是在一个无法精确指认的时刻,当一份稟議书又一次被驳回,当一个设计良好的方案又一次被妥协取代,当他们发现自己已经不再为这些事情感到愤怒的时候?宫崎英高还没有放弃。他仍然保留着高中时代在计算机教室里构建迷宫时那种“在约束中建造”的本能。他仍然会在业余时间读那些封面晦暗的书,玩那些不解释规则的游戏。他仍然记得《巫术》的地下城里那种严苛但透明的规则体系——每一次死亡都有原因,每一次失败都可以被转化为下一次尝试的知识。那个地下城与他每天身处的企业系统构成了一个精确的镜像:一个是规则一致但严苛的世界,一个是规则多变但表面上温和的世界;一个让你通过死亡学习,一个让你通过妥协生存;一个将挫败感转化为成就感,一个将挫败感转化为麻木。他还没有决定离开。
但他已经开始意识到,继续留在这个系统里意味着什么——不是失败,不是失业,不是贫穷,而是一种更隐蔽的丧失:丧失建造自己世界的能力和冲动。那个在高中计算机教室里用ASCII字符构建迷宫的青年,那个在大学图书馆里阅读北欧神话和存在主义小说的学生,那个在深夜独自面对《巫术》地下城的玩家——他还没有死,但他正在被一层一层地覆盖。覆盖他的不是暴力,而是日复一日的规格书、稟議书、截止日期和兼容性补丁。1990年,泡沫开始破裂。日经指数在新年开盘后急转直下,在此后的两年多时间里跌去了超过一半的市值。那些曾经打出夸张招聘广告的新兴IT公司开始倒闭,那些曾经设立“新事业开发室”的大型企业开始裁员,那些曾经相信增长会永远持续下去的人们开始面对一个漫长的冬天。IT行业的就业市场从卖方市场迅速转为买方市场,跳槽的机会窗口正在关闭。宫崎英高仍然坐在那间开放式办公室的角落工位上。
日光灯管仍然发出同样的嗡鸣声,稟議书仍然需要四个部门的印章,规格书仍然充满了相互矛盾的需求。但他内心某个东西已经接近临界点。不是愤怒,不是绝望,而是一种更为安静的、更为根本的认知:他想要建造的世界不在这个地方。那个世界里有迷宫、有篝火、有不解释的规则和可穿透的难度,有他在图书馆里第一次读到残缺故事时那种用自己的想象填补空白的冲动,有他在计算机教室里第一次看到自己写的迷宫在屏幕上闪烁时那种创造者的满足。那个世界还没有名字,还没有形状,但他知道它存在——因为他每天都在承受它的缺席。三十岁那年,宫崎英高做出了一个决定。这个决定的具体过程和触发契机在此后的公开记录中从未被详细披露——他自己在后来的采访中只简单地提到“想做一些更有创造性的事情”。但在那段简短的陈述之下,是一个积压了近十年的建造世界的冲动,是一个在系统内部观察了足够久之后终于确信自己可以设计出更好系统的判断,是一个迟到者终于决定走向他本该更早到达的入口。他投出了简历。
不是投向那些泡沫破裂后正在收缩的大型IT企业,不是投向那些要求特定行业经验的金融或制造业系统集成商,而是投向了一家叫做FromSoftware的公司——一家当时还默默无闻的商业软件开发商,刚刚开始尝试转型游戏开发,正在为一款叫做《国王密令》的角色扮演游戏招募人手。这家公司的招聘门槛不高,薪资水平远低于他当时在甲骨文的收入,项目的前景也不明确。但它提供了建造世界的途径。宫崎英高认可了那个选择。他离开了那间开放式办公室,离开了那些盖满印章的稟議书,离开了那些充满矛盾的规格书和不可更改的截止日期。他带走的东西不是技术——COBOL和企业数据库管理在游戏开发中几乎没有用武之地——而是一种更为深层的认知:关于规则如何被设计才能保持一致性,关于系统如何运作才能避免消解个体创造力,关于挫败感在什么条件下可以转化为成就感而非麻木。
这些认知在他此后的游戏设计生涯中将反复浮现,但它们的形式不再是企业IT的经验教训,而是篝火的摆放位置、死亡惩罚的幅度、敌人攻击模式的可读性、以及那条贯穿魂系游戏始终的设计原则:这个世界很难,但它是公平的。在那个决定做出的时候,没有人知道它意味着什么。宫崎英高自己也不知道。他只是走到了临界点,然后跨了过去。