清晨八点半,林晨已经坐在了科技园写字楼的工位上。昨晚优化投资系统到凌晨一点,但此刻他精神还不错。窗外的南山科技园在晨光中逐渐苏醒,远处腾讯滨海大厦的玻璃幕墙反射着金色的阳光。他抿了一口保温杯里的黑咖啡,打开了昨天没来得及细看的项目代码库。
入职这家 web3 公司已经两周,他主要负责一个 deFi 借贷平台的后端智能合约开发。前两周主要在熟悉业务逻辑和团队协作流程,今天终于要开始深入核心代码了。项目名叫“鲸鱼金融”——一个面向大户的加密资产借贷协议。林晨点开主合约文件,Solidity 代码在编辑器里铺展开来。
只看了一分钟,他的眉头就皱了起来。五百行的合约文件里,竟然有四处完全相同的抵押品清算逻辑,只是变量名稍有不同。继续往下翻,一个处理利率计算的函数里嵌套了七层 if-else 判断,像一团纠缠的毛线球。注释?寥寥无几,仅有的几行还写着:“这里好像有问题,但先这样吧”。
林晨深吸一口气,点开了测试目录。空的。只有几个自动生成的骨架文件,没有任何实际测试用例。他又查看了文档目录,只有一个 REAdmE.md,里面写着“鲸鱼金融——下一代 deFi 借贷协议”,下面就没有实质性内容了。“这……”林晨感觉太阳穴在跳。他从业十年,经历过各种项目,但像这样基础质量的项目,在稍微正规点的公司都活不过立项评审。
上午九点,团队站会。tech Lead 陈峰——一个三十出头、穿着印有“hodL”字样 t 恤的瘦高男人——站在白板前,语速飞快:“这周重点是上线流动性挖矿功能,吸引第一批用户。合约开发部分,林晨你负责挖矿奖励的发放逻辑,三天内完成开发,周五部署测试网”。
林晨举手:“陈哥,我看了现有的合约代码,有些问题想讨论一下”。 陈峰看了眼手表:“简单说,五分钟”。
“第一,代码重复严重,同样逻辑写了四遍,维护起来是灾难。第二,核心函数嵌套太深,可读性和可测试性都很差。第三,完全没有单元测试,部署风险极高。第四,缺乏技术文档,新人上手成本太高”。林晨尽量用平实的语言陈述,“我建议先花一周时间做基础重构,建立测试框架,然后再开发新功能。否则技术债务会越积越多,后期迭代成本会呈指数级增长”。
会议室里安静了几秒。几个年轻程序员交换着眼神。坐在角落的王明——那个上周连续熬了三个通宵的 95 后——小声嘀咕:“又要拖进度……”
陈峰笑了,那是一种混合着无奈和不以为然的笑容:“林哥,我知道你以前在大公司待过,讲究那些规范。但咱们这是创业公司,赛道窗口期就几个月,慢一步就死了”。他走到白板前,用马克笔写下四个大字:“能跑就行”。
“咱们的优先级很明确:第一,功能快速上线;第二,用户体验;第三,营销推广”。陈峰敲着白板,“代码质量?排第十吧。只要合约能编译、能部署、用户能操作,就够了。测试?手动点一点就行。文档?等咱们活下来再补”。
林晨试图争辩:“但智能合约涉及真金白银,一个整数溢出漏洞就可能让所有资金归零。去年那个……” “去年是去年,咱们的合约简单”。陈峰打断他,“林哥,我知道你是好心,但现实是:投资方在看数据,用户在看收益,没人看你的代码写得好不好看。咱们这个月必须上线流动性挖矿,下个月交易量要翻倍,否则下一轮融资就悬了”。他拍了拍林晨的肩膀,语气缓和了些:“这样,你先按现有架构把挖矿功能做出来。等上线后稳定了,咱们再抽时间优化,行吧”?
站会结束,团队成员鱼贯而出。林晨坐在椅子上没动。窗外的阳光刺眼,他却觉得有些冷。那种熟悉的无力感又涌了上来——不是面对裁员时的恐慌,而是一种更深的失望:对技术被工具化的失望,对行业浮躁氛围的失望。
他想起十年前刚入行时,带他的导师说过:“代码是程序员的手艺,手艺不能糙”。那时的互联网行业虽然也快,但至少还有对技术本身的敬畏。现在呢?区块链、web3,概念一个比一个炫,但扒开光鲜的外衣,里面可能是草台班子和屎山代码。
“林哥,还不走”?王明探头进来。 “马上”。林晨关掉编辑器。
中午吃饭时,林晨在科技园附近的“湘满楼”遇到了张伟。两人点了两个菜,张伟听林晨说完早上的事,苦笑着摇头:“正常,太正常了。现在 web3 圈子里,十个项目有九个是这样。快速发币、快速上线、快速拉盘,然后要么跑路,要么归零。真正想做事的团队,凤毛麟角”。
“那你还推荐我来”?林晨夹了块剁椒鱼头。 “当时不是看你急着找工作嘛”。张伟压低声音,“而且这家至少是真在做产品,虽然糙了点。不过说实话,兄弟,你要是图长远发展,这里确实不是久留之地”。
林晨沉默地吃着饭。张伟继续说:“你知道为什么他们不重视代码质量吗?因为整个商业模式就不靠技术驱动。吸引用户靠的是高 ApY(年化收益率),留住用户靠的是庞氏经济学,赚钱靠的是发币割韭菜。技术?就是个道具。所以人家才说‘能跑就行’”。
“那你觉得我应该怎么办”?林晨问。 张伟想了想:“两条路。第一,适应环境,他们让你怎么写你就怎么写,拿几个月工资,同时骑驴找马。第二,如果你实在受不了,趁早撤。不过……”他顿了顿,“你现在这个年纪,再找工作的难度不小。除非——” “除非什么”?“除非你有特别硬的技能,硬到能打破年龄歧视”。张伟看着林晨,“比如,AI”。
林晨心里一动。下午回到公司,林晨打开那个混乱的合约文件。他做了个决定:不推翻现有架构,但在自己负责的挖矿功能模块里,尽可能写出清晰的代码。他新建了一个 utils 目录,把通用的数学计算函数抽离出来。给每个函数写了清晰的注释,包括参数说明、返回值、可能的异常。
敲代码时,他刻意放慢了速度。每一行都思考:这样写半年后还能看懂吗?如果别人接手,能理解这里的逻辑吗?那个嵌套七层的 if-else 函数,他用了半小时重构,拆分成三个小函数,每个职责单一。
隔壁工位的王明凑过来看了一眼屏幕,惊讶道:“林哥,你写这么多注释干嘛?还抽函数……这得多花多少时间啊”。 “现在多花一小时,以后可能省下十小时”。林晨头也不抬。 “但陈哥不是说周五就要吗”? “来得及”。
下班前,陈峰过来看进度。看到林晨代码库里那些清晰的函数和注释,他表情复杂。最终只说了句:“注释写得太详细了,其实没必要”。林晨没接话。
晚上七点,林晨准时下班。地铁上,他戴着耳机,但没听音乐,只是看着窗外飞驰而过的城市灯火。回家后,苏婉已经做好了饭。乐乐扑过来要爸爸讲区块链是什么,林晨用“网上大账本”的比喻简单解释,孩子听得似懂非懂,但眼睛亮晶晶的。
等乐乐睡了,林晨回到书房,打开了那台承载着他所有野心的电脑。他没有立刻去写那堆让他疲惫的 Solidity 代码,而是点开了收藏夹里深埋的一个文件夹,里面是他最近两个月死磕的深度学习笔记。
事实上,从入职前那段空窗期开始,他就已经意识到了 web3 的虚火,并开始系统性地攻克深度学习。他不仅啃完了吴恩达的经典课程,甚至已经开始尝试将 LStm(长短期记忆网络)模型应用到自己的 A 股量化投资系统中。
但今晚,他在搜索框里输入的词条变成了:“transformer 架构在时间序列预测中的深度应用”。
成千上万的链接跳出来。有炫耀算力霸权的行业新闻,也有深奥的学术论文。林晨并没有像初学者那样感到迷茫,他已经过了那个阶段。现在的他,正处于一个瓶颈期:如何将这些最前沿的 AI 模型,真正转化为投资系统中精准的买卖信号。
深夜十一点,苏婉端了杯热牛奶进来。看到屏幕上复杂的注意力机制图解,她轻声问:“还在钻研那个新模型”? “嗯”。林晨接过牛奶,杯壁的温度让他紧绷的神经稍微舒缓,“今天在公司,那种幻灭感特别强”。 “还是因为那些‘屎山’代码”? “不只是代码本身”。林晨抿了一口牛奶,目光从屏幕移向窗外,“是那种环境。大家都在透支未来的信用去换取当下的快钱。我以前觉得 web3 是未来,但今天我才意识到,如果没有扎实的技术底层,那只是沙滩上的城堡。而 AI,才是我能握在手里、谁也拿不走的真本事”。
苏婉在他身边坐下,看着他已经密密麻麻写了大半本的推导笔记。林晨继续说:“我原本以为掌握了深度学习的基础就能做出好的投资系统,但今天复盘发现,传统的模型还是太迟钝了。我想把现在最火的 transformer 引入进来,用它来捕捉那些稍纵即逝的市场逻辑”。
“想做就彻底做透”。苏婉的话依然简洁有力,“你之前跟我说,区块链只是解决了信任问题,而 AI 才能解决生产力问题。既然你已经入门了,就别在门口徘徊”。林晨看着她,有些感慨地笑了:“你就不怕我这套系统最后还是跑不赢大盘,折腾了半天又是空忙一场”? “怕啊”。苏婉也笑了,眼中闪烁着坚定,“但更怕你空有一身手艺却被平庸的环境磨平了。你那股钻研劲儿,是我最看重你的地方。就算系统成了,也不是因为运气,是因为你真的看懂了背后的数学”。
那一刻,林晨心里那丝关于“35岁转行是否太晚”的最后摇摆,彻底烟消云散了。他不再仅仅是为了生存而焦虑,而是为了攻克某个技术高地而战栗。
睡前,他给张伟发了条微信:“之前你给我的那个吴恩达资源我啃完了,现在在搞 transformer 的位置编码优化,你那边有没有关于金融时间序列数据降噪的硬核论文”? 几分钟后,张伟回复了一串 pdF 文件名,附言:“好家伙,你这进度够快的。看来你不是想转行,你是想在 AI 圈子里卷死我们啊!这几篇是顶会论文,够你折腾几宿的”。
林晨点开链接,看着全英文的算法推导。他没有退缩,反而感到一种久违的兴奋——那是多年前初次写出完美程序时的纯粹喜悦。窗外,鹏城的夜色正浓,但林晨眼前的屏幕上,每一行 python 脚本、每一组张量运算,都在为他勾勒出一条通往未来的、无比清晰的上升曲线。