An image to describe post 趣谈“我这里怎么就是好的”

2020年9月,在包豪斯艺术博物馆

如果要统计软件开发行业最气人的几句口头禅,“我这里怎么就是好的”一定榜上有名。只要你做过软件开发,或者和软件开发人员打过交道,多半听到过这句话,或者它的变体——“我这里没问题啊”。

如果你是提出问题的人,听到这句话多半会被气个半死:我这里明明有问题,你却说你那是好的,合着是我自己的问题?如果你是负责解决问题的人,说这句话多半也是因为委屈:我这里是好的,就证明程序没问题,你那里出了问题,不是我的错呀。总之,大家都是受害者,没有人高兴听到这句话。

正因为如此,关于“我这里怎么就是好的”,的确值得多说两句。

“我这里怎么就是好的”,它暗含的逻辑是:程序在一台电脑上运行没问题,那么在所有电脑上运行都应该没有问题。换句话说,喊出这句话的人假设,无论CPU、内存、硬盘、显卡是什么品牌什么型号,也无论是什么操作系统什么版本……无论外界条件如何变化,同样的程序都应该是同样的表现。

我只能说,程序员真是集万千宠爱于一身,因为这世界上,恐怕很难有其它行业有如此水平的标准,从业者有如此水平的自信了。要知道,一个行业能走到这一步,真不是简单的事情。

对美国历史有点了解的人,大概都听说过“火烧白宫”这回事。1812年,美国和加拿大之间爆发了战争。1814年,加拿大和英国联军攻占了美国首都华盛顿,并放火烧毁了国会大厦和白宫。这是美国迄今为止,历史上第一次被外国军队攻占首都的记录。

An image to describe post 趣谈“我这里怎么就是好的”

美军为什么会如此惨败,后来众说纷纭,比如领导没水准、准备不充分、士兵素质不够等等。这些原因或许都成立,但还有一个原因同样不容忽视,那就是:美国步兵的枪支,在损坏之后很难修复。

当时,美军的制式武器是滑膛燧发枪。如今我们还可以在电影里看到这种枪,从枪口倒进火药,塞进弹丸,然后击发。这种枪的常见故障也不少,比如枪支过热,火药残渣堵塞枪膛等等。一旦发生故障,必须及时修理——但是,问题就出现在这个“及时修理”上。

An image to describe post 趣谈“我这里怎么就是好的”

当时,一旦枪支的某个零件发生损坏,整支枪就得全盘送回,让有经验的老师傅找出问题,替换零件。为什么要找“有经验的老师傅”?因为在那之前,从来没有人想过,所有的零件可以一模一样,随意替换,随意组装。换句话说,如果一支枪的扳机坏了,“直接找一个板机换上”的做法是不存在的。这样的枪支,不仅仅是军队的武器,更是军队的累赘。更可惜的是,美军其实早有机会摆脱这样的累赘,可惜,他们被骗了。

之前我们讲过,18世纪后期,英国工匠威尔金森发明了新的炮管制造工艺,让皇家海军所向披靡(参考《 瓦特、蒸汽机与英国皇家海军的故事》)。同一时期,法国人Gribeauval也发明了类似的工艺,后人称为Gribeauval System(法语原文是système Gribeauval)。拿破仑大军的火炮世人皆知,恰恰得益于这套生产工艺。

之后,法国制枪匠Honre Blanc基于已经熟悉的Gribeauval System,将火炮的生产工艺精细化到枪支制作中,发展出“标准化生产流程”的概念。那时正是18世纪80年代,法国对枪支的需求很迫切,制枪匠人的要价很高,法国政府极为恼怒,希望他们改善流程,降低价格,却得不到制枪匠人的正面回应。

这时候Blanc抱定“造福前线士兵”的想法,挺身而出。他希望通过一系列的流程,把枪支对制枪匠的依赖降到最低。他的具体做法是,亲自打造精密的母版(master),确定其规格后,通过一系列的夹具、量规,保证后续生产出来的枪支与母版不差分毫(用今天的单位,误差在0.2毫米之内)。如此生产出来的零件可以放心替换,完美组装。

1785年一个周五的下午,Blanc在前来参观的法军军官面前摆了50个枪机。在众目睽睽之下,他随便选出其中25个拆成零件,把同样的零件扔进同一个篮子,再逐个晃动篮子,确认所有的零件都已经混淆。之后,他随意从每个篮子中取出零件,一一组装成枪机,最终得到25个完美无缺的枪机。所有零件完美契合,看不出任何瑕疵。

Blanc的表演震惊了所有观众,法国军方盛赞他的办法,请他设立工作室,批量生产廉价标准的零件。然而人算不如天算,4年后,也就是1789年,法国大革命爆发。革命者闯入Blanc的工作室大肆劫掠,广大的第三等级群众在要求更多权利的同时,也极力反对机械化,反对让传统工匠处于不利地位的技术。所以,Blanc的先进生产办法竟然在法国销声匿迹了。

不过墙内开花墙外香,1785年的表演震惊的不只有法国人,还有美国驻法国公使托马斯·杰弗逊。看完表演,他立刻写信给美国外交部长约翰·杰伊(John Jay),要求在美国大力推广这种生产工艺。当时的美国在大力拥抱新思维,所以根本不存在任何阻力。很快,美国政府就和私人枪械制造商下了订单,要求按这种方式生产两万五千支步枪。

获得订单的商人是Eli Whitney。今天来看,Whitney是美国人耳熟能详的名字,在课本里列出的伟大商人和发明家中,他与爱迪生、福特、洛克菲勒并列。小学生都知道,他29岁时发明了轧棉机(Cotton Gin),这种机器可以迅速分离棉籽和棉花,从此南方各州才从棉花种植中获得了大量财富。

An image to describe post 趣谈“我这里怎么就是好的”

按理说,Whitney应当顺应新思维,大力推广标准化枪械制造流程,而美军也应当迅速取得军火的优势。然而事与愿违,Whitney在这件事上的行径一点也配不上“伟大”,他纯粹在扯谎,骗取政府资金。按规定,1800年他应当在交付一定数量的枪支了,但到了截止日期,他只是表示自己的新工厂仍然在生产——联想到今天某些“造车”的故事,我们只能说,成功企业家的誓言真不一定可靠,历来如此。

1801年,Whitney为了延续自己的谎言,选择继续把牛皮吹大。他在当时的美国总统亚当斯、副总统杰弗逊等众多人面前做了一场公开演示。实际上Whitney所用的根本不是“标准化生产”的零件,而是事先定制、人工磨合完的零件。他的表演堪称完美,成功蒙骗了所有人,让大家认为“美国已经能够生产标准化生产的、零件可以互换的枪支”。

当然,假的真不了,真的假不了。最终结果就是,1812年美国和加拿大爆发战争之后,美军还是装备着零件不能互换的枪支,带着能现场修理枪支的能工巧匠,才能上战场。

后来,美国真正能开始标准化生产枪支,有赖于三位不太知名的人物,Simeon North,John Hall,Thomas Blanchard。其中Blanchard的故事最为有趣。

Blanchard本来是做鞋的,当时鞋子根本没有“尺码”可言,所有鞋子都是放在一个大桶里,让人自由挑选的。Blanchard发明了一种机器,能把木头精确加工成设计的样子,作为制鞋的脚模,这就是今天常见的鞋楦。有了一模一样的鞋楦,尺码才可以流行开来,人们去买鞋子时只要说“我要38码的鞋”就可以,再也不用大海捞针了。

后来,Blanchard的发明被兵工厂采纳,用于生产枪托,于是无论金属零件还是木质零件,都已经做到了一模一样,美国建立了世界上第一个能批量制造标准化零件的兵工厂。今天,世界知名的枪支制造商Colt、Winchester、Smith and Wesson、Remington,仍然聚集康涅狄格河的低谷地区,这正是历史的印迹。

那么,一旦有了标准化的制造流程,就能保证“到处都是一模一样”的吗?答案是,未必。

1942年,供职于英国皇家陆军军械部(Royal Army Ordnance Corps)的Povey先生接到了一个特殊任务:联系美国军火商,调查军火质量问题。当时英军的反坦克枪使用的是美国生产的弹药,但经常遇到卡壳,让前线士兵头痛不已。麻烦的是,这种卡壳没有任何规律可言。对于Povey来说,这不是一个轻松的任务。

Povey到达底特律之后,仔细测量了每一批弹药,发现制造工艺毫无缺陷,每一发弹药都符合标准。于是他回报上司:弹药质量合格,不存在问题。然后,他接到伦敦的指令:那么,一路跟随弹药前往北非,一定要找出问题所在。

于是,尽忠职守的Povey带着他的全套测量设备,跟着弹药奔向北非。无论是火车、汽车、轮船,他一直伴随在弹药旁边,每天都掏出他的设备,记录下当时的情况,却全无异样。那么,问题到底出在哪里呢?

毫无异样的弹药在费城装上海轮,启程前往北非。当时的大西洋并不平静,海面下有德国潜艇,海面上有狂风暴雨,晕船成了家常便饭。不过,Povey恰恰是在这种煎熬之中,找到了问题所在。

原来,在船只剧烈摇晃时,堆放在最外面的板条箱(当时还没有集装箱)可能撞击到船舷。如果撞击反复持续,而且撞击的那一侧正好对着弹药的顶部(也就是弹头),则很有可能弹头会被轻轻“推”进弹壳之内,导致弹壳稍稍鼓起。这变形极其轻微,肉眼无法分辨,唯有Povey带着的精密测量设备可以发现。

弹药到达北非之后会被分配到各支部队,因为没有人会在分配弹药时关心板条箱的堆码顺序,那么卡壳的现象自然也就毫无规律可言。

所幸Povey发现了问题所在,所以解决起来也相当简单:改进板条箱的材质和弹药的装填方式,确保弹头不会撞击到箱壁发生变形。之后,困扰前线的卡壳现象自然就消失了。

话说回来,虽然我在IT这种“朝阳行业”混饭吃,但总是希望从其它行业多借鉴一些经验。关于“我这里怎么就是好的”,年轻的时候觉得天经地义,看得越多,越觉得即便身处IT行业,也实在不该这么说话。

“我这里怎么就是好的”,暗含的假设是“同一套程序在所有地方都应当一样”,这似乎是IT的“默认规则”。但是看看我们自己交付的产品,有多少能够保证“在所有地方都应当一样”呢?安装的时候有各种将就不算,安装完了,往往还要大费脑筋配置一番,这里改个参数,那里装个插件…… 每次指出来,开发人员似乎都愿意说“哦”,觉得不是大事——这态度倒很像标准化生产前的能工巧匠,许多问题对他们来说确实易如反掌,但离开他们就难比登天。

其实真正做过就知道,即便你是能工巧匠,即便你在的行业已经有许多标准化的现成便利,要交付真正标准化的,在不同环境下都能保证“一模一样”的成果,从来都不是一件轻松的事情。

“我这里怎么就是好的”,也消灭了新探索的可能。我经常看到不少IT人员(当然,也包括过去的自己),面对问题时两眼一闭、嘴角一翻:“我这怎么就是好的?”。确实,即便是在Povey要解决的卡壳问题里,兵工厂的人也可以振振有词,而且他们说的的确是实话,但这并不能解决问题,因为观察的领域有限,天然就排除了发现问题的可能。

相反,如果耐下心来,不把“我这里怎么就是好的”当成辩护的借口,而是作为分析的起点,排除某个环节的可能性,往往有助于发现新领域,找到真正的问题。

在IT行业,类似“Povey意外找到海轮颠簸与弹药卡壳之间关系”的例子还有很多,比如社交网络上流行的各种故事,“电子邮件发不到500英里之外”,原因是“电子信号传输500英里时延超过3毫秒阈值”,“程序员泡茶会断网”,原因是“放茶杯的桌面底下贴着一台Hub”,都是如此。每次排查这种“不可思议”的问题,都是在拓展我们的认知边界,也是在深化我们对于技术世界的理解。

所以,下一次,如果你想脱口而出“我这里怎么就是好的”的时候,不妨稍作忍耐,改成“我这里似乎没问题,那么来,我们一起看看吧”。

参考阅读

The Perfectionists: How Precision Engineers Created the Modern World, by Simon Winchester

An image to describe post 趣谈“我这里怎么就是好的”

如果喜欢本文,欢迎长按识别二维码订阅。