本文作者张朝晖,系国家级高端人才引进计划入选者,正高级工程师。 曾任中国头部券商首席信息官,任期十一年半。他主导设计并建成中国金融市场首个固定收益、外汇、大宗商品(FICC)电子交易系统,随后在同一分布式平台(领航)上建成微卡片平台(MIRACLE)——从300个组件增长到42000个,组织采用率达到100%。 在此之前,张朝晖在华尔街从事技术领导工作逾二十年,先后任职于摩根大通、摩根士丹利、德意志银行、瑞士信贷和美国银行,主导构建全球分布式电子交易、固定收益衍生品分析、实时风险管理及财富管理系统,职业生涯横跨三十五年。 张朝晖目前专注于将三十五年经验系统化,著有《软件是软的》与《靶向变革》两部著作。
我以前那个泳池正前方的墙上,贴着一张海报。画面上,迈克尔·菲尔普斯正在游蝶泳,身体高高跃出水面,眼睛直视镜头。我几乎每天早上都会看到它,一看就是一年多,久到它几乎成了我脑子里一幅固定不变的画面。
我当时知道这张照片是在真实比赛中拍的——2008年北京奥运会,不是摆拍的工作室照片——这也是我信任它的原因。我那时完全不知道它到底是怎么拍出来的。
我想学蝶泳,最初就是因为这张海报。那看起来是人在水里能做到的最厉害的动作。有一阵子我自己试着模仿,一直不太成功,能做出几秒钟看着还像样的划臂,然后整个动作就散了。
泳池的一位救生员看到我瞎扑腾了一个下午,花了五分钟给我讲了一下。他有一些教练背景,但从没正式给我上过课,只是我们熟悉之后,他时不时给我一些建议。
“蝶泳有两次打腿。”他告诉我,“一次在水面上,一次在水面下。”这基本上就是他讲的全部内容。我又下水试了一次。
他对我上手之快感到震惊。他说,他教过的许多学生,即使上了十二节课也没达到我这个水平。而我,仅仅凭借五分钟的介绍就做到了。他特别称赞了我身体中传递出的波浪感,告诉我这是最难教的东西之一,而我竟然无师自通。他说我的移臂看起来很放松,而不是僵硬用力,还称赞了我划水时呼吸的时机。无论是什么把身体波浪、双臂对称、呼吸、时机这些蝶泳的各个部分组装成一个运转系统的,似乎都在我体内自动完成了。
不久之后我把一段视频发到了网上,得到的称赞不只来自这位救生员。不认识的人也在下面留言,而最打动大多数人的,恰恰是当初打动我的那个东西:我能把身体抬出水面很高。我确实挺高兴的。但我心里面其实已经想要更多,不只是看起来好,我想要真正能游长距离,而不只是在镜头前表演三十秒好看的动作。
我跟救生员说,我想游得比二十五米更远,他听了之后告诉我还需要改进的地方:换气露出水面时,头要压低,眼睛看水面而不是看前方;打腿别抬太高,膝盖别弯太多;入水时手臂要伸直,整个动作才会更流畅。
第一条建议,我却犹豫了很长一段时间,没能真正接受。我每天早上都会面对那张菲尔普斯高高跃起面对镜头的照片。而他是个救生员,在池边给我指点几句而已,不是专业队出来的,而菲尔普斯是公认的蝶泳之王。这场对比在我心里根本算不上公平。我们俩当时都不知道,其实是这位救生员说对了,也都不知道那张照片为什么会照出这样的效果。
但学得快并没有让我能够游得远。我不知道到底哪里出了问题。我手上有的,只是救生员给的建议,而我当时还不知道那是对的,另外就是我自己能感觉到的两件事:我的打腿确实不太对,还有把自己抬出水面这件事很耗体力。我完全不知道这两件事之间有什么关系,也不知道救生员的建议到底能不能解决其中任何一个。
很久以后回看第一天的视频,那个关联其实清清楚楚:每次打腿身后都会溅起明显的水花,因为膝盖弯得太厉害,而每次抬头换气,下半身都会跟着微微下沉,一个问题在悄悄喂养另一个问题。游到大概二十五米时我会很累,动作会变形,划水节奏也会崩盘。
过去一年里,我的训练重心一直放在自由泳上,蝶泳更多是顺带练练,所以这道二十五米的坎一直没有紧迫到非解决不可。我每一次划水都会把身体抬得很高,靠的是大量上半身肌肉,拍照片和录像看起来确实很唬人。但这也很耗力气。既然蝶泳的其他部分我掌握得都比这位救生员帮过的大多数人要快,我就断定问题出在力量不够,而不是我或许根本不需要抬那么高。菲尔普斯高高跃起直视镜头的照片还牢牢印在我脑子里。我的体能从来不是问题,但游完二十五米蝶泳后我是真的筋疲力尽。我决定把它放到以后再解决,先专注提高自由泳的千米时间目标。
后来我发现自己的进步不像预期的那样,才终于让ChatGPT分析了一段我划水的视频。它给出的技术指导比救生员的话更全面,但建立在他已经指出的同一个问题之上:从髋部驱动动作,然后是大腿,接着是小腿,最后才是脚,并且不要为了产生力量而过度弯曲膝盖。它把这个动作比作甩鞭子,力量从根部开始积蓄,一路向外传递,越到末端越快越轻,正好和我一直以来的做法相反。
建议是正确的,和他说的一样,只是更详细,而且这是第二个、独立的信息来源,这让我比第一次更认真地对待它。我开始真正地去想如何优化自己的动作。我甚至直接问过ChatGPT,我是不是应该开始力量训练来增强打腿的力度。它告诉我没这个必要,我需要专注在动作上,而这正是它刚刚一整段分析都在解释的东西。
我真的试着去按这个方向练。但我的打腿还是没有任何我能感觉到的变化。我也注意到过泳池里有几个游泳者,看起来比我瘦小,也不像我这么强壮,却能游五十米甚至更远而没有同样的崩盘,但我没有深究下去。这些都没能真正带来突破。我的注意力大部分还在自由泳上。我继续断断续续地游二十五米蝶泳,比以前更用心,但还是没有进展,想着等自由泳的目标推进得差不多了再认真解决这个问题。
后来,一件和训练完全无关的事,把这一切一下子连在了一起。
几天前,我站在海洋世界的玻璃后面看海豚在水下游动,当时根本没想我的划水动作。首先震撼我的是,海豚踢一次腿能游多远,超过一辆车的长度,而且没有任何费力或匆忙的感觉。关键不在于它们踢腿的频率,也不在于力度。整个身体像一个连续的、同步的波浪在运动,没有任何部位在相互对抗,没有任何匆忙。
看着看着,有些东西咔哒一声对上了,这是救生员的话语或ChatGPT的技术拆解都没能做到的。海豚身体的波浪始于髋部。大腿紧接着承接,膝盖跟随。尾巴,或者说在我的情况下是脚,只是动作结束的地方,而不是开始的地方。我一直试图通过更用力地弯曲膝盖和更频繁地踢腿来产生力量,这完全是本末倒置。
海豚展示给我的没有任何新东西。这位救生员早就说过,而且不止一次。ChatGPT也描述了几乎完全相同的顺序,更详细一些。信息从未缺失。缺失的是那个画面。
但如果没有前面那些铺垫,这一幕本身其实什么都说明不了。救生员和ChatGPT早就告诉过我该看什么:先是髋部,然后大腿,然后膝盖,然后脚。一个从没练过蝶泳的人站在同一块玻璃前,看到的只会是海豚游得很优美,不会看到一条从髋部开始传导的运动链。外行看热闹,内行看门道,说的就是这个意思。这幅画面没有取代他们教给我的东西。它是在他们已经帮我准备好之后,才终于补上的那一块。一张图片说不定真的抵得上千言万语,但前提是你手上已经有了一部分那些语言。
接下来的几天我回到泳池,脑海里带着那幅海豚的画面练习,而不是那句句子。二十五米变成了五十米,不是靠硬撑过后半程,而是用和前半程一样的动作游下来的。那道困住我数周的墙消失了。
又过了几天,一个日出刚过的早上,我走上圣彼得海滩,看到两只海豚在离岸有一段舒适距离的地方,平行于海岸线游动,浮出水面,消失,再浮出。我下水,在同一片海域游了一会儿,试着像几天前看它们游动那样移动:髋部先行,其余部位跟随。海上公开水域与泳池是完全不同的考验,有波浪而不是平坦可预测的水面,每二十五米也没有池壁可以蹬。我在那里也保持了同样精炼的动作,又是五十米,野生海豚一直在不远处的水中清晰可见。
五天后,在佛罗里达的另一边,我又有了一次检验的机会。这几天我一直在东海岸,最近待在好莱坞海滩,那里整个夏天都被马尾藻困扰。这天早上情况还不算理想,但已经清了不少,可以下水试试。这一次,我终于决定试试救生员一直告诉我的那件事。把抬高的幅度压低,刚好露出水面就够了。脸朝下,而不是看前方。
那个抬高的动作总是随着体力下降而逐渐消失,因为那个力量来自上半身,靠手臂和核心撑着,撑不了多久。这一次我让打腿的动量来完成这件事,还是那道从髋部开始的波浪。肩膀自己就浮了起来,靠的是动量而不是肌肉,比我以前任何一次都省力,而且整组都保持住了,没有再逐渐消失。上岸的时候,一对一直在沙滩上看着的老夫妇笑着告诉我,有那么一瞬间,他们还以为看到了一只海豚。
就是在那一刻,我终于认真对待了救生员最初的那条建议,抬得低、脸朝下,也开始好奇,为什么我模仿了一年多的那张海报,展示的却是完全相反的东西:菲尔普斯胸部高高抬出水面,头抬起,直视镜头。
那天晚些时候,我认真查了一下。这确实是一张真实的照片,不是摆拍的,拍摄于2008年北京奥运会男子200米蝶泳比赛,摄影师把一台遥控相机固定在泳池底部,朝正上方拍摄,这个角度是任何游泳者、教练或岸边的观众都不可能看到的。专业体育摄影和纪实摄影通常让相机和拍摄对象保持水平,因为低角度会让高度和体态看起来失真。他故意打破了这个惯例,为了效果,而且确实奏效了。
菲尔普斯在那张照片里是直视镜头的,我一直以为这意味着他在朝正前方看,就像任何人面朝前方时那样。我完全没想过相机是在他下方,也完全没想过水下相机能拍出这么清晰的画面。原来这需要非常具体的工程技术:为了修正水对光线的折射而设计的光学镜头罩,以及能在瞬间冻结每一滴飞溅水花的高速闪光灯。在完全不知道这些技术存在的情况下,我当时的判断其实并不算不合理,只是错了,就像今天看一段视频,如果不知道生成式AI现在能做到什么程度,很容易就会以为它是真实拍摄的。一张图片背后的技术可以先进到,让一个完全合理的判断变成错的。
那个高度是真的,但那只是一次全速奥运冲刺中最巅峰的一瞬间,不是任何人能保持一整趟的姿势。那个角度也解释了那个凝视。从水下拍摄,透过被冲散、发生折射的水面,这个角度让一个其实是正确朝下倾斜的头,看起来像是死死地盯着前方,而这正是那位救生员一直在告诉我的事。
我花了一年多去信任一个极限运动巅峰状态中的一瞬间,那还是从一个为了戏剧效果而不是为了教学而设计的角度拍下来的,却没有信任就站在我旁边、后来证明是对的那位救生员。这位摄影师完全达成了他想要的效果。他从来没打算教任何人怎么游蝶泳,他要的是让人看了倒吸一口气,而这一年多,它在我身上确实起到了这个效果。
眼见未必为实,尤其是当拍出你正在看的这个画面的人,压根就没想过要教你任何东西的时候。那张最初把我带下水的海报,从某种意义上说,正是这篇文章一直在论证的那种画面:具体、直观,比任何口头指导都更有说服力。它只是碰巧教了一件错的事。
这不只是游泳才有的事。看任何一项运动,你都会偶尔看到运动员在某个瞬间做出一个非常炫目的动作,这个动作在那一刻、对那个运动员来说完全站得住脚,但换成别人把它当成一套可以反复使用的技术去模仿,就是错的。这些恰恰是所有人都会记住、也都想去模仿的瞬间,我自己也一样,乒乓球场上和泳池里都一样。花哨的打法也许能帮你赢一分。真正让你能持续得分、能一直打下去的,是那些看着无趣、反复打磨的基本功。
我一直在思考一个简单的问题:学习海豚腿的最佳方式是什么?我想,答案不是救生员的话语,也不是AI的技术拆解,或者仅仅是海豚。它们各自给了我不同的东西。这位救生员给了我原则。ChatGPT将那个原则翻译成了我划水的具体力学机制。而海豚给了我大脑真正缺失的那个画面。
将你理解的东西转化为真正能做到的东西,有时需要的不仅仅是正确的指导和反复的练习。有时它需要一次真正的突破,而那次突破并不总是来自更多的努力或更多的解释。有时,只需要以你的大脑真正能抓住的形式,看一次正确的示范。
我在远离泳池的地方也看到过这种完全相同的模式:正确的理论,缺失的画面。每个做过企业软件的人理论上都知道,界面应该对用户友好。关于这个主题的设计理论不缺。然而,大多数系统最终的组织方式还是一样的:一个巨大的应用程序,功能埋在菜单里,子菜单分支出更多的子菜单,用户被迫记住多层深的屏幕里到底哪一个能完成他们那天需要的操作。知道理论似乎从未阻止任何人去构建那样的东西。
我最终构建的平台叫微卡片,它的工作方式不同。我们没有构建一个功能隐藏在菜单里的大型系统,而是构建了数千个小型、独立的界面,每一个都是一张卡片,每一个都只为了做好一个业务功能:查询一个职位,检查一种特定的风险,生成一份特定的报告。仅此而已,没有捆绑其他东西。
因为每张卡片都是用同一个简单的、可重复的模板构建的,不需要工程师就能使用,这个平台在五年内从几百张卡片增长到四万多张,许多是由实际使用它们的人构建的,而不是由一个试图提前预测每个人需求的中心团队构建的。它们也可以被连接并组合成更大的工作流,不需要有人每次都从头设计一个新的大型系统,仅仅因为现有的菜单不能完全覆盖某人的需求。
四万张卡片太多了,不能靠碰运气去找。相关的卡片被放在一起,就像宜家的样板间一样,一整个厨房被完整地布置出来,而不是像仓库那样一排排货架。卡片之间也会根据你实际在做的事情自然地链接起来,所以完成一个任务可以直接带你进入下一个,而无需打开任何菜单。
当我这样解释时,这都不是什么新主意。模块化设计,单一用途组件,这些在软件领域都是老生常谈,有几十年的历史了。改变人们理解的不是理论。是看到一个完全以此方式构建的实际系统,活生生地摆在他们面前,成千上万张卡片协同工作,并突然意识到模块化在实践中到底意味着什么,而不是教科书里的一个术语。人们可以读这种方法的描述读上好几年,点头称是,但这并没有改变他们设计任何东西的方式。一旦他们看到它运行起来,有些东西就改变了,这是任何解释都做不到的。但这种触动只发生在那些自己曾经和菜单式系统缠斗过很多年的人身上,就像海豚对我之所以有意义,是因为救生员和ChatGPT早就告诉过我该看什么。一个刚入行的人看到微卡片,可能只会觉得方便。只有经历过被旧方法论困扰的人,才会有我看海豚时那种震动。
今天的AI生成软件也能看到同样的反差。把需求描述清楚,几分钟就能拿到一个看起来相当漂亮的网站,界面干净,动效流畅,正是那种在演示里很上镜的东西,就像一段蝶泳,好看个三十秒。真正的考验在后面,第一次真正需要去改它的时候。那才是分辨花架子和真正达到企业级标准的东西的时刻。这也是我自己写作方式的一部分原因,跟AI一起反复打磨很多轮,而不是接受第一版看着已经很顺的稿子。
写这篇文章本身的过程中,也出现过一次类似的情况。我想把故事里的一段内容加在一个当时感觉很顺理成章的位置,就在海豚那段之后。主题上确实说得通。但它其实打乱了这篇文章一直小心维护的时间顺序,因为我想加的那件事,实际上发生得更晚,而且会抢走海豚那一段应得的功劳。要把它做对,需要真正听懂为什么这个顺序很重要,而不只是接受我一开始想放的位置,然后再找一个新的位置,既能容下新内容,又不破坏已经成立的事实。这种修正,读者是看不出来的。但这恰恰是一份读起来还行的稿子,和一份真正对得上事实的稿子之间的差别。真正管用的,是那些不起眼的、一轮一轮的修改,而不是第一眼给人的印象。眼见为实。海豚让我看见。结果证明,那个我多年来试图向他人描述的系统,一旦真正运行起来,也让我看见了。
并非所有的鸿沟都是这样,诚实地说这一点很重要。有些事情确实就是需要一个人比另一个人花更长的时间,原因与缺失的画面无关。用嘴呼吸是我一辈子的自然习惯,学习在水中通过鼻子持续呼气,这是许多游泳者几乎立刻就能掌握的东西,花了我长得多的时间。没有海豚能解决这个问题。没有巧妙的呈现方式能走捷径。有些事情对你这个特定的人来说就是更难,唯一的出路就是时间和练习。
有时学习的发生不是因为有人解释得更好。有时它发生是因为,突然间,一个想法不再是一个句子,而变成了一幅画面。
海豚从未解释过任何事。它们只是游动。