这是 Jerry 2021 年的第 57 篇文章,也是汪子熙公众号总共第 334 篇原创文章。
Jerry 之前的文章 ABAP 真的会过时吗?聊聊 ABAP 的过去,现在和未来 里面提到了 三国演义十大谎言之首,有认真的读者在微信上问我,其他九大谎言各是什么?
作为一个三十年的老三国迷,我很小的时候就熟读《三国演义》了,里面的桥段早已烂熟于胸。另一方面,我从2000年进入大学校园开始接受正规的编程训练,至今已经二十一年了。今天这篇文章,聊聊我心中的三国演义十大谎言,同编程行业的十大口头禅做个对比。
声明1:严格意义上讲,本文提到《三国演义》书中这些“谎言”,只是为了渲染故事情节,烘托人物形象,推动情节发展之用,和现实中谎言的定义有一定差距。
同样,本文介绍的程序员十大口头禅,虽然是程序员出于自嘲目的调侃之用,但也确实反映了软件开发中一些通病。大家本着有则改之,无则加勉的态度阅读就行了。
声明2:排名先后没有客观的评价标准,纯粹按照 Jerry 主观意愿来排序的。
声明3:Jerry 深知《三国演义》里描述的内容和正史有很大出入,本文基于为大众所熟知的《三国演义》,而非正史。
下面是文章的正文。
十大谎言第十位:上将潘凤和程序员的 “这个 bug 很简单,很快就能改好”
东汉末年,董卓篡权,把持朝政,倒行逆施,激起十八路诸侯云集虎牢关加以讨伐。董卓派出猛将华雄守住关口,败孙坚,诛祖茂,斩俞涉,群雄震动。
太守韩馥曰:“吾有上将潘凤,可斩华雄。”绍急令出战。潘凤手提大斧上马。去不多时,飞马来报:“潘凤被华雄斩了。”
本以为潘凤是个王者,原来是个青铜。
程序员免不了和 bug 打交道。有些冒失的程序员,看到一个貌似简单的 bug 时,也免不了夸下海口:这个 bug 容易,很快就能修复。
我之前的文章 我与SAP成都研究院吴院长的二三事 介绍了我之前处理 SAP CRM 中间件的一个客户 issue 的故事。
当时我也像很多程序员一样,拍着胸脯自信地对我的老板吴院长说道:“只需要修改一个函数,就能解决这个问题。”
十大谎言第九位:孟获自诩颇知兵法和程序员的 “这个需求技术上无法实现”
刘备创业多年攒下的一点家底,在夷陵被儒帅陆逊烧了个精光。刘备身死白帝城后,西蜀大本营后方的南蛮孟获蠢蠢欲动。诸葛亮亲自出征,对其实施降维打击,七擒七纵。
孟获曰:“吾虽蛮人,颇知兵法;若丞相端的肯放吾回洞中,吾当率兵再决胜负。若丞相这番再擒得我,那时倾心吐胆归降,并不敢改移也。”
孟获被诸葛亮擒获后,在诸葛亮面前搭上一块自己“颇知兵法”的遮羞布,但很快就被打脸,又双叒叕被捉了。
“这个需求技术上无法实现”也是程序员的遮羞布。Jerry 去年也用过一次,后来和孟获一样,惨遭打脸。详情参见我的文章:Jerry的反省:程序员不要轻易说出"这个功能技术上无法实现"。
图片:南蛮王孟获
十大谎言第八位:荀正称关二爷为无名下将和程序员的“这个错误无法重现/在我电脑上是好的”
荀正是谁?估计很多人只认得荀彧和荀攸。而荀正比起这两位本家,名气可差太远了。此人乃袁术帐下纪灵的副将,名副其实的无名下将。
令人惊奇的是,这种小角色,竟然敢在关二爷面前口出不逊:
关公曰:“只教纪灵来,与他决个雌雄!”荀正曰:“汝乃无名下将,非纪将军对手!”
后果就是:
关公大怒,直取荀正;交马一合,砍荀正于马下。
图片:武圣关羽
“这个错误无法重现”,Jerry 的职业生涯里,我也记不清说过多少次了。正常情况下,它的下一句就是:
I will close the incident / ticket now.
十大谎言第七位:刑道荣力敌万人和程序员的“这代码我已经测过了,不可能有问题,应该是配置/环境原因”
零陵太守刘度,闻刘备军马到来,乃与其子刘贤商议。贤曰:“父亲放心。他虽有张飞、赵云之勇,我本州上将邢道荣,力敌万人,可以抵对。”
结果:
刑道荣只望黄旗而赶。抹过山脚,忽地中央分开,只见张飞挺矛跃马,大喝一声,直取道荣。道荣轮大斧来迎,战不数合,气力不加,拨马便走。
道荣走不十里,赵云引一军刺斜里杀出,一枪刺道荣于马下。
刑道荣先速败于张飞,再败于赵云。这真的算得上是力敌万人吗?
图片:取上将首级如同探囊取物般的张飞
同样,如果一段代码只能在某些环境/配置下才能正常工作,真的算得上是没有问题吗?
十大谎言第六位:诸葛亮称赞马谡为当世之英才和程序员的“这是一个已知的问题/以前就有这个问题/这是框架的问题/ This is working as designed”
刘备白帝城托孤之时,以目遍视床前群臣,只见马良之弟马谡在傍,刘备令且退。谡退出,刘备谓孔明曰:“丞相观马谡之才何如?”孔明曰:“此人亦当世之英才也。”刘备曰:“不然。朕观此人,言过其实,不可大用。丞相宜深察之。”
不得不说如诸葛亮这种高人,也有看走眼的时候。刘备毕竟是领导,看下属的眼光比诸葛亮这种打工仔更高一筹。马谡虽然不能算庸才,但是在街亭之战中生搬教材,直接葬送了西蜀第一次北伐的大好形势,这个战绩也很难匹配“英才”二字。
图片:诸葛卧龙也有看走眼的时候
如今程序员开发的程序复杂度日趋提高,应用开发几乎不可能离开框架的支持了。在处理一个 bug 时,我们切勿在调查清楚前盲目下结论,以免犯下类似诸葛亮那样的错误。
十大谎言第五位:司马懿指洛水为誓和程序员的 “这个功能不是我开发的”
司马懿高平陵政变,命校尉尹大目传话给曹爽,曰:“太傅(司马懿的官衔)指洛水为誓,只要将军削去兵权,早归相府,并无他意。”爽信为良言,掷剑而叹曰:“我不起兵,情愿弃官,但为富家翁足矣!”
结果:
司马懿命手下押曹爽兄弟三人并一干人犯,皆斩于市曹,灭其三族;其家产财物,尽抄入库。
图片:诸葛亮一生最强劲的对手:司马懿
当你去问程序员一个问题时,如果程序员回答说,“这个功能不是我开发的”,有可能确实如此,也有可能是“这个问题我也不清楚”的委婉说法。
十大谎言第四位:吕布给曹操画饼和程序员的“试试”大法
吕布白门楼被曹操擒获,在生死关头,给曹操画饼,试图挽回一命:
曹操上楼来,吕布叫曰:“明公所患,不过于布;布今已服矣。公为大将,布副之,天下不难定也。”
面对这位三国演义里超一流武将向自己表忠心,曹操显然心动了,回顾玄德曰:“何如?”
玄德答曰:“公不见丁建阳、董卓之事乎?”
吕布卒。
图片:飞将吕布,三国演义第一武将
当程序员遇到难题去求助同事时,也往往能够收获类似刘备这种“神助攻”:
- 你刷新试试。
- 你清除缓存试试。
- 你重启试试。
- 你换个电脑试试。
。。。
十大谎言第三位:曹操“汝妻子吾自养之”和程序员的“TODO / 这个问题我们将来再优化”
曹操率十七万大军,围攻袁术。军粮将尽,官粮官王垕向曹操告急。曹操玩了一个诡计。
操曰:“可将小解散之,权且救一时之急。”垕曰:“兵士倘怨,如何?”操曰:“吾自有策。”垕依命,以小斛分散。操暗使人各寨探听,无不嗟怨,皆言丞相欺众。操乃密召王垕入曰:“吾欲问汝借一物,以压众心,汝必勿吝。”垕曰:“丞相欲用何物?”操曰:“欲借汝头以示众耳。”垕大惊曰:“某实无罪!”操曰:“吾亦知汝无罪,但不杀汝,军必变矣。汝死后,汝妻子吾自养之,汝勿虑也。”垕再欲言时,操早呼刀斧手推出门外,一刀斩讫,悬头高竿,出榜晓示曰:“王垕故行小斛,盗窃官粮,谨按军法。”于是众怨始解。
曹操就这样,仅仅牺牲了一个小角色的性命,空手套白狼,就平息了部下因为军粮将尽饿肚子的嗟怨。
图片:曹操,治世之能臣,乱世之枭雄
至于他是否真会履行诺言,赡养王垕的妻子?他的对头刘备,信奉“妻子如衣服,兄弟如手足”,而曹操却是爱江山爱美人更爱人妻的主。如果王垕妻子有张绣婶婶邹夫人那样的姿色,那么这个诺言或许会成真。
程序员也经常许诺。比如当前代码还有很多瑕疵,或者是采取了一些 workaround 让代码先跑起来,那么往往会加上一些 TODO 注释:“这个版本先这样,等将来再优化。”
实际情况中,“将来再优化”大概率变成了“将来就这样吧”。
十大谎言第二位:刘备最冠冕堂皇的抢地盘理由和程序员的“已经差不多了”
刘备在付出损失了凤雏庞统的惨痛代价后,终于把西川从同宗刘璋那里抢过来了。
刘璋出城投降,玄德出寨迎接,握手流涕曰:“非吾不行仁义,奈势不得已也!”共入寨,交割印绶文籍,并马入城。
把赤裸裸出兵抢夺别人地盘的行为修饰得如此情非得已,刘皇叔不愧世之枭雄。
图片:刘备说哭就哭的实力派演技,绝对秒杀当今娱乐圈某些花瓶
“奈势不得已也!” 这是一句枭雄们在乱世中可以为所欲为的万能借口。
“这个需求你的进度如何了?”
程序员答曰:“已经差不多了。”
“这个 bug 改完了吗?”
程序员答曰:“已经差不多了。”
有个段子。
下班之前,测试妹子走到开发人员身边,“那个 bug 改得怎么样了?”
开发人员:“已经差不多了。”
测试妹子:“那你记得下班之前一定要提交代码。今晚我把电脑拿回家,测试你提交的代码。”
开发人员:“好。”
第二天早上上班,测试妹子来到公司,发现开发人员还坐在工位上,问:“你昨晚为什么不提交代码?我一直等着测试。”
开发人员:“我还没下班。”
十大谎言第一位:卧龙凤雏得一可安天下和 “PHP 是世界上最好的语言”
卧龙凤雏,得一可安天下。多有气势的一句话!
玄德喜曰:“昔司马德操言:‘伏龙、凤雏,两人得一,可安天下。’今吾二人皆得,汉室可兴矣。”
Jerry 小时候第一次读完庞统殒命落凤坡,诸葛亮星落五丈原的章节后,大惑不解: 不是得一就可安天下吗?这就 Game Over 了?
后来我才明白,水镜先生当时还有一句:“卧龙凤雏,虽得其主,不得其时也,惜哉。”
看来水镜先生才是《三国演义》里第一高人,轻轻松松一句话,就把自己之前的谎言中的漏洞补上了。
图片:诸葛亮虽鞠躬尽瘁,但凭一己之力无法率领西蜀与人口和资源都占压倒性优势的曹魏对抗,最终壮志未酬,殒命五丈原
有程序员有编程语言的地方就有江湖。江湖中也流传着关于 PHP 的传说:PHP 是世界上最好的编程语言,没有之一。
网络上甚至有一个专门强调这个观点的网站,url 非常容易记忆:
https://php-is-the-best-language-in-the-world.com/
这个网站没有别的内容,就是阐述了为什么 PHP 是世界上最好的编程语言。服不服?
朋友们心中还有哪些三国演义/编程语言里有趣的段子?欢迎留言分享。感谢阅读。
更多Jerry的原创文章,尽在:"汪子熙":