人们习惯以“完成”作为评判价值的标尺,可很多事是永无尽头的,“完成”不过是阶段性的终止,并不代表永久的结束。就像一场考试交卷的那一刻,算“完成”了吗?可学习这件事并没有结束。那么,“完成”是否还有意义?“未完成”又算不算失败?我想先讲一个飞行员的故事。
曾经有一位飞行员,接到一项几乎不可能完成的越洋任务:航程极远,环境恶劣,起飞前所有人都觉得他很难飞完全程。他没有强迫自己盯着遥远的终点,而是把整条航线拆成一个一个很近的航点:“我现在不需要飞到终点,只需要先飞到下一个检查点。”到了这个点,再瞄准下一个。再往前飞一点,“完成”;再往前飞一点,又是“完成”。就这样一个点接着一个点,他居然真的飞完了这个别人眼里不可能完成的任务。
这件事让我想明白:“完成”不一定非得是那个遥不可及的终点,它可以很小,小到只是一个检查点。一个小完成接一个小完成,就是别人眼里不可能的大完成。反过来说,那些还没到终点的事,那些“未完成”,也并不就等于失败——因为完成的意义,本来就蕴含在未完成之中:未完成,就还有无限的可能。
一个小完成接一个小完成,就是别人眼里不可能的大完成。
今年年中,我刷到一段音乐可视化的视频,音乐变成满屏流动的光,我立刻冒出一个想法:做一个把音乐自动变成动画的程序。那时的它只是一张模糊的蓝图:能不能做成、做成什么样,全是未知。但正因为它“未完成”,它才有可能被做成任何样子。
但正因为它“未完成”,它才有可能被做成任何样子。
可是,可能性不会自己变成现实。材料说得直白:倘若安于悬置,止步不行动,“未完成”便会沦为空想与拖延。这句话我深有体会。项目刚开头,AI还没有现在这么能干,我只能用最笨的办法开发:把AI写出的代码复制进电脑里跑,再把满屏的报错复制回去,就这样来回拉扯。当时AI写代码又不成熟,报错一个接一个,改好一个,又冒出三个。不到一个月,我烦了,也停了。项目成了个笑话,止步不前,没有任何未来可言,躺在硬盘里成了一堆没人打开的死代码。那段时间我偶尔会想起它,但也就是想想。这时的“未完成”,便沦为了空想与拖延。
回过头看,那段日子失败的其实不是这个项目——项目还在,代码还在,技术也还在进步;失败的正是那种毫无意义的“未完成”:不推进,也不放弃,只是挂着。它最可怕的地方在于,它不宣布结束,也不给人希望,就这么悬着,把一个鲜活的构想,慢慢地拖成一块心病。
它不宣布结束,也不给人希望,就这么悬着,把一个鲜活的构想,慢慢地拖成一块心病。
让它活过来的办法只有一个:接着做。后来AI升级了,可以直接在我的电脑上读文件、写代码、调试运行,搁置的构想重新变得可行,我抱着试一试的心态重启了项目。程序第一次真的跑了起来,虽然没有什么功能,但程序的启动给了我巨大的信心——此时,这个项目又从“失败”转变为了“未完成”。那一刻我真切地体会到:“失败”和“未完成”之间,隔着的往往不是能力,而是一次行动。
也许有人会问:既然未完成有这么多可能,那是不是干脆不去完成才最好?当然不是。飞行员的航点是一个一个被兑现的,我的模块也是一个一个被做完的——“未完成”的价值,恰恰要靠一个一个“小完成”去兑现。迟迟不动手的“未完成”不是希望,是空想;不断兑现的“未完成”,才是真正的可能。
“失败”和“未完成”之间,隔着的往往不是能力,而是一次行动。
当然,重启不等于顺利。我急功近利地往上堆功能,程序越来越大,AI越来越记不住每个部分,低级报错不断。我一度怀疑是底层的框架选错了,索性整个推倒重来,换了个新框架;结果折腾半天,发现新框架也就那样,只好又推翻一次,绕回了最初的方案。两次重构,我几乎崩溃。但也正是这两次折腾教会我一个道理:绕回起点的路不是白走的。为了引导AI完成重构,我不得不把整个框架摸得透透的;每绕回一次,都比离开时多懂一层。原来探索里的弯路,本身就是“未完成”留给人的礼物。
而真正解决问题的,还是那位飞行员的办法:把大目标拆成一个个“完成”。我带着AI从头把程序梳理了一遍,拆成一小块一小块的模块:做完一个,算一次“完成”,再瞄准下一个。祸不单行,那段时间我的免费额度很快见了底——我开发这个程序,从头到尾没花过一分钱,全靠各家的免费额度。额度用完,我就换一个AI接着干,并给每个模块都写上详细的备注,让任何一个新来的AI都能快速看懂这个程序。那些备注,就是留给下一双手的说明书。就这样一个模块一个模块地啃,三个月后,程序基本成型。
原来探索里的弯路,本身就是“未完成”留给人的礼物。
我可以自豪地告诉你:我知道它“完成”了。但这个“完成”,只是航线上的又一个检查点。我不会停止,我会把那些天马行空的构想一点点完善、升级、改造,最后发布。原来成就一件事,不是一口气抵达终点,而是把一个一个“小完成”接起来——飞行员飞完他的航线,我啃完我的模块,道理是同一个。
如果现在你问我:它完成了吗?我会说,基本完成了——它甚至有了自己的名字:音脉。可真的完成了吗?它出生在一台CPU常年烫到七十多度、开机要等半个小时、内存条还坏了一根的老电脑上,靠着一分钱没花的免费额度,一个模块一个模块地啃了出来。我清楚,音脉永远不会有“最终完成版”:每一代都是待完善的构想,每一步都是待接续的事业。
回头看这一路,材料说的三种“未完成”——待完善的构想、待接续的事业、反复试错却尚未成功的探索——我在这件事里居然全经历了一遍。我也终于读懂了它们:一时的失败并不可怕,能在这件事里获取经验、增长阅历就可以了;适时地停下来也并不可怕,只要构想还在、只要你还愿意回头看它一眼,它就仍然是“未完成”,而不是“失败”;“完成”并不代表终止,“未完成”也不是没有目标,失败的从来都是毫无意义的“未完成”——不推进,不放弃,也不回头看。
生命不息,“完成”不止。
下一个检查点,就在前面。