今天是我写代码的第十年。
没有蛋糕,没有仪式,工位上还堆着今天要 review 的 PR 和明天上线的需求清单。但我想停下来 30 分钟,写一点东西给自己,也给那些和我一样还在键盘前的人。
这不是一篇炫技的文章,也不是一篇贩卖焦虑的鸡汤。我只是想老老实实地讲一讲这十年——那些一行一行写出来的、半夜爬起来回滚过的、被骂过又被感谢过的代码,到底教会了我什么。
第一阶段:相信代码可以解决一切(第 1-3 年)
刚入行的时候,我以为程序员的世界是这样的:需求清晰、文档齐全、架构合理、代码优雅。我相信只要我把基础打扎实,把设计模式背熟,把算法刷透,我就能写出"对"的代码。
后来我才明白,工作中 80% 的时间不是在写新代码,是在和现实打架:
- 和不清晰的需求打架
- 和上一个人留下的屎山打架
- 和"明天就要上线"的 deadline 打架
- 和"这不是我的锅"的同事打架
- 和自己昨天写的 bug 打架
那几年我学到最重要的一件事是:优雅的代码是结果,不是起点。 工程师的真实工作,是在一团乱麻里硬生生拽出一条能跑的线来。
第二阶段:被业务"教育"的几年(第 4-6 年)
我进入加密行业是个偶然。一开始我以为只是"换个业务领域写 CRUD",干了几个月才意识到,这个行业的服务端不是普通服务端——它是钱、风控、撮合、波动这四件事缠在一起的怪物。
这几年我先后主导或独立扛下来过这些业务的服务端:
- 现货交易:撮合、订单、资产、对账
- 合约/衍生品:永续、交割、强平、ADL、保险基金、风控阶梯
- 做市与对冲:策略接入、报价管理、风险敞口控制
- U 卡 / 法币通道:KYC、清结算、合规字段、第三方对接
- IEO / Launchpad:抢购、分配、防刷、上币流程
- 返佣体系 / VIP 积分:多级关系、防作弊、结算口径
- 后台与运营系统:权限、审计、数据看板
最难的不是任何一个单点,而是它们之间的耦合。一个交易所的服务端工程师,必须在脑子里同时装着资金流、订单流、风控流、用户流四张图,少装一张就会出事故。
我经历过几次让我后背发凉的故障:一次是合约系统在极端行情下的连锁反应,一次是返佣链路因为一个 join 写错导致的对账偏差,一次是上线前最后一刻发现的资产权限边界问题。这些事故没有一个写在简历里好看,但它们是这十年里教会我最多的东西。
我学到的几条结论:
金融系统第一性原理是"对账平",不是"性能高"。
一个慢但平的系统可以救命,一个快但不平的系统可以杀死公司。在涉及钱的业务里,"我以为不会发生"就是事故的开始。
极端行情不是偶发,它是一定会来的,区别只是哪一天来。稳定运行三年,比上线时刷屏的庆功宴更值得骄傲。
但行业不是这么计算功劳的——这一点,我后面会说。
第三阶段:开始看见"代码之外"的东西(第 7-10 年)
到了第七年之后,我发现自己花在写代码上的时间越来越少,花在以下几件事上的时间越来越多:
- 拆需求、和产品对齐边界
- 做技术选型和方案评审
- 复盘事故、写 RCA 报告
- 带新人、Review 别人的代码
- 在跨部门会议上"代表服务端"
刚开始我有点抗拒——感觉自己被推离了"工程师"的本职。但后来我意识到,这些事情才是让代码真正产生价值的事情。一个写得再漂亮的模块,如果方向错了、时机错了、和上下游对接错了,它的价值依然是零。
这几年我也开始接触一些纯技术之外的能力:
- 业务判断力:哪些需求该做、哪些该砍、哪些该延后
- 沟通和向上管理:怎么把一个复杂方案讲明白、怎么让老板看见风险
- 优先级和取舍:永远资源不够,砍需求比加需求重要十倍
- 写作能力:写好一份事故复盘比写好一段代码更难
这些东西没有任何一本"程序员转管理"的书能真正教你,全是被工作硬磨出来的。
关于 PHP 转 Golang,关于"老代码差"
最近团队在做一次大重构:PHP → Golang,MySQL → PostgreSQL,引入 Kafka,重写一部分核心链路。新来的同事会吐槽"老代码写得真差"。
我想说一句心里话:
老代码差,是结果,不是原因。
任何一个跑了五六年的系统,回头看都会觉得它差。因为:
- 它承载了五六年的业务变化,每一次变化都在它身上加了一刀
- 它经历了人员流动,每个人都按自己的理解改了一点
- 它在资源不足的情况下被反复施压,没人有时间停下来重写
- 它的"差"是它活下来的代价——一个写得太理想化的系统,可能根本撑不到今天
新人看见的是"代码差",老人看见的是"它居然活到了今天"。这不是为屎山辩护,这是对工程现实的尊重。
我自己写的代码,五年后回头看也一样难看。这不丢人。丢人的是写完五年还是那个水平。
这十年教会我的几件事
1. 技术只是入场券,判断力才是天花板。
能写代码的人很多,能判断"这件事该不该做、什么时候做、做到什么程度"的人很少。
2. 让别人看见你的功劳,是工程师必修课。
这一条我学得最晚,代价最大。能扛事是优点,但默默扛事会让你的功劳变成"应该的"。
3. 稳定不是没有功劳,是最大的功劳——但你得自己说出来。
"它一直跑得好好的"是这个行业里被严重低估的一句话。一个系统平稳运行三年,背后是无数次半夜起来的修复、无数次"差点出事"的预案、无数次拒绝看似合理但其实危险的需求。
4. 不要把"会扛"和"该扛"画等号。
能搞定一件事,不代表这件事就该是你的。下一份工作我打算学会一句话:"这个事情我可以做,但需要 X 资源 / Y 时间 / Z 人配合"。
5. 35 岁焦虑是个伪命题,方向焦虑才是真问题。
35 岁的程序员不值钱,是因为他还在和 25 岁的人比同样的事。35 岁应该比的是判断力、业务感、复合能力——这些恰恰是只有时间能给你的东西。
6. 真正的护城河是"懂业务 + 懂技术 + 能拍板"。
单纯的技术深度会被新人和 AI 持续追赶;单纯的业务理解会被新业务淘汰;只有这三者的组合,才是任何工具都替代不了的。
7. 健康比什么都重要。
连续 996 几年下来,最先垮的不是项目,是你自己。我没什么资格说教,因为我也没做好。但请你比我做得好一点。
写在最后
这十年,我没有去过大厂,没有挂过响亮的 title,没有写过爆款的开源项目。我做的事情,写在简历上很难讲清楚——一个人撑起过一个交易所大半个服务端,从现货到合约到做市到卡业务,全栈打通,稳定运行多年。
这种履历在行业里既稀缺又尴尬:稀缺是因为真没几个人这么干过,尴尬是因为它不符合任何一种标准的"职业模板"。
但我不后悔。这十年磨出来的东西,是任何课程、任何证书、任何漂亮的简历都换不来的。它在我脑子里、手上、判断里,谁也拿不走。
下一个十年,我想换一种活法。不是不写代码了,是不再把自己只当一个"写代码的"。我想用这十年攒下的所有筹码——技术也好、业务也好、踩过的坑也好——去做更接近"决定"和"创造"的事。
如果你也在键盘前坐了很多年,如果你也偶尔觉得自己的努力没被看见,我想对你说:
你写的每一行代码,每一次半夜的紧急修复,每一份没人读完的事故复盘,都不会白费。它们沉淀成了你这个人。
下一个十年,会更好。
写于第十年的某个普通晚上。