第三十六章:新公司报道日,只有我一个后端

6 阅读13分钟

我去新公司报到那天,一大早就从固戍出发了。

电脑包照例背在背上,里面那台笔记本跟我一样,命苦,上一家公司刚熬完夜,现在又要陪我去新地方继续卖命。地铁一进站,我跟着人流往里一挤,熟悉得不能再熟悉的深圳打工人流程又开始了。

只是这一次,我不是去宝安了。

我看着地铁线路一点点往南,心里还有点说不出的感觉。明明还是深圳,明明还是这些站,明明还是那些一大早就困得跟僵尸似的上班族,但我这个人,算是又切了一次地图,从宝安副本重新传送回了南山高新园。

说实话,跳来这家公司,原因挺简单,没那么多弯弯绕绕。

就是钱给得更多。

成年人跳槽,很多时候别扯什么梦想不梦想,成长不成长,先看工资条再谈情怀。上一家公司也不是完全不能干,但那个薪资吧,怎么说呢,就像一个 2 核 4G 的服务器,平时跑点小服务还行,一碰上房租、水电、吃饭、通勤这种高并发场景,立马 CPU 飙红,内存告急,月底直接开始系统报警。

深圳这地方最不讲武德的一点就是,别的城市是你在生活,这里更像是你在持续给生活做性能优化。

所以新公司的 offer 一出来,我基本没怎么犹豫,心想:行,这次总算不是纯靠爱发电了。

到了高新园,刚从地铁口出来,我就被那股熟悉的“南山味儿”扑了一脸。

路边全是写字楼,玻璃幕墙被太阳照得晃眼,一栋栋楼看着都像特别贵的项目。楼下那些打工人不是端着咖啡就是抱着电脑,走路速度一个比一个快,跟谁后面有线程在追似的。空气里都透着一种味道——这里的人不是在开会,就是在去开会的路上。

我站在楼下抬头看了眼新公司所在的大厦,心里还真有点小激动。

毕竟这回我过来,不是普通搬砖仔了。

我是以 AI 项目组长 的身份来的。

这个 title 听起来还是很唬人的,至少在地铁上的时候,我心里偷偷爽过一阵。感觉自己像是从普通开发账号升级成了带点管理权限的高级账号,虽然不一定真能为所欲为,但至少不像以前那样只能被动接需求了。

结果这种爽感,进办公室不到十分钟,就被现实一巴掌拍清醒了。

HR 先带我办入职,签字、录指纹、拿工牌、开权限,流程走得很丝滑。办公室环境也确实不错,比我之前待过的地方看起来正规多了,工位宽敞,显示器也大,装修风格一看就属于“老板最近应该不差钱”的那种。

我一边点头一边看,心里还在想:嗯,不错,这钱加得值。

结果等我在自己工位坐下来,环顾四周之后,慢慢发现有点不对劲。

我左边,不像后端。
右边,也不像后端。
对面看着像产品。
斜对角像前端。
再往远处扫一圈,还是没看到那种一脸没睡醒、眼里自带 SQL、头发多少有点危险的同类。

我一开始还以为人没到齐。

结果旁边同事很自然地来了一句:

“咱们后端现在就你一个,后面项目起来了应该会招。”

我当时人都愣了一下。

“啥?就我一个?”

“对啊。”他点点头,“你不是组长嘛,这块肯定你来扛。”

那一瞬间,我表面镇定,内心日志已经开始疯狂打印:

[WARN] 当前后端节点数:1
[WARN] 未发现备机
[ERROR] 单点故障已产生
[CRITICAL] 所有锅默认绑定当前用户

我本来以为这个“项目组长”,是带着几个人一起冲。搞了半天,是我一个人既当组长,又当组员,还顺带当救火队长。

说白了就是——

整个 AI 项目的后端线程池,现在只有我这一条线程。

没有副本,没有集群,没有容灾,没有替补。

纯单机裸奔。

我坐下开电脑的时候,心里那点“升职加薪真爽啊”的感觉,瞬间就被冲淡了一半。不是说不高兴,而是那种高兴里掺了很大一勺压力,喝着有点呛。

电脑一开,邮箱里已经躺了一堆资料。

我点开一看,文件名就很有互联网公司的味道:

《AI音乐项目一期方案最终版》
《AI音乐项目一期方案最终版-修改》
《AI音乐项目一期方案最终版-v5》
《AI音乐项目一期方案最终版-v7-最终确认-真的别改了》

我看到这些文件名就知道,这项目需求大概率已经改过很多轮了,只不过刀还没真正砍到代码层而已。

我随手点开其中一个文档,越看眉头皱得越厉害。

项目是做 AI 音乐生成 的,面向 C 端用户。简单理解就是,用户输几个关键词,选个风格,再写点想表达的内容,系统就去调模型,给他生成旋律、歌词、编曲,最后弄出一首能听、能分享、甚至能继续改的歌。

听起来挺炫。

也确实是现在很时髦的方向。

但这个东西对后端来说,可不是什么“建两张表、写几个接口”就能糊过去的活。它不像以前那种业务系统,查个列表、改个状态、返回个 JSON 完事。这玩意儿一听就知道链路长、状态多、依赖杂,哪哪都容易出幺蛾子。

用户点一下“生成”,背后其实是一串连锁反应:

参数校验、任务创建、任务入队、模型调用、状态回写、文件落盘、结果返回、失败重试、资源扣减……

这中间只要有一环抽风,用户那边感受到的就是一句冷冰冰的“生成失败,请稍后再试”。

而现在的问题是——这整套东西,基本都得我来顶。

接口我来定。
数据库我来设计。
任务状态我来梳理。
模型服务我来接。
失败重试我来兜底。
API 文档我来补。
很多技术方案,甚至也默认等着我拍板。

我一边翻文档,一边在心里骂了句:老板这是招后端吗?这分明是在招一套后端系统。

更要命的是,文档看着挺厚,真正落到技术实现上,很多关键地方都写得很虚。

比如有一句写得特别轻描淡写:

“要尽量保证用户生成体验流畅自然。”

这句话用产品语言看,挺正常。
但在我眼里,这十几个字翻译过来差不多等于:

  • 响应别慢
  • 任务别丢
  • 失败能兜
  • 状态要实时
  • 文件得稳定
  • 成本还不能太高
  • 最好用户还觉得很智能很高级

我心想这哪是“体验流畅”,这分明是让我拿一辆电动车跑出高铁的效果。

我坐在工位上继续看,脑子已经不自觉开始转起来了。

任务表怎么设计?
歌曲主表和生成记录表要不要拆?
模型调用走同步还是异步?
前端查状态是轮询、SSE 还是 WebSocket?
用户连续点十次生成,怎么防抖、限流?
失败任务怎么补偿?
音频文件是直接丢 OSS,还是先过临时存储?
后面要是支持“继续生成”“局部重做”“换个曲风重跑”,现在要不要提前预留扩展?

越想越头大。

我甚至能感觉到自己脑子里的 CPU 占用率正在一路往上窜,风扇都快转出来了。

但就在这种时候,我又很没出息地想起了工资。

然后心态一下子又稳了一点。

没办法,人有时候就是这么现实。

如果压力暴涨,工资不涨,那叫压榨。
如果压力暴涨,工资也明显涨,那你就会安慰自己:这是成长。

虽然本质上还是干活,但至少这次熬夜,单价更高了。以前在宝安加班,我总觉得自己像廉价劳动力被拿去跑高负载任务,现在好歹有点“高性能实例”的待遇了。

这么一想,我心里居然还平衡了。

行吧。

既然来都来了,逃肯定是逃不掉了,那就别在那儿空焦虑,先把系统初始化起来再说。

我拿出本子,开始给自己列待办。

第一件事,先搭一个最小可用的后端骨架出来。

别一上来就想着分布式、微服务、超前设计,那都是有团队之后再谈的事。现在我一个人,最重要的是先让最核心的链路能跑通。

用户提交生成任务。
后端记录任务。
任务调模型。
拿到结果。
前端能查。

先把这一条主线打穿,系统从 not found 变成 running,这比什么都重要。

第二件事,接口文档必须尽快整理。

我太清楚了,一个项目最怕的不是需求多,而是大家以为别人懂。产品觉得自己讲清楚了,前端觉得后端会补,后端觉得这个地方默认就行,最后联调的时候一看,三边各写各的,像三个服务调用了三种协议,谁都觉得自己没问题,合起来就是不通。

所以接口定义、字段含义、状态码规范,这些东西必须先立规矩。

没规矩的联调现场,比没有索引的大表全表扫描还折磨人。

第三件事,数据库和状态流转要先想清楚。

这种 AI 任务最烦的就是状态乱。

创建中、排队中、生成中、成功、失败、超时、取消、重试……这些状态要是一开始不想清楚,后面一出问题,整套系统的数据就会脏得跟没人维护的老库一样,到时候查都查不明白。

第四件事,赶紧摸清模型调用的真实边界。

文档写得再好都没用,最后落地还得看模型服务到底稳不稳、快不快、贵不贵。
如果慢得离谱,我后端包装得再漂亮也只是给慢服务套了个好看的壳。
如果成本高得吓人,那用户还没起来,老板先把我叫去聊预算。
如果失败率居高不下,那这项目分分钟从 AI 音乐生成,做成 AI 情绪破坏器。

第五件事,赶紧把“招人”和“要资源”写进清单。

一个人顶一期可以,长期这么干,迟早把自己干成生产事故。
我可以单刷项目,但我不想把自己刷成项目。

后端得补。
测试最好也得有。
运维支持不能真全靠我脑补。
模型接口对接最好也有专门的人跟。

不然我后面不仅是后端,我还是半个 DBA、半个运维、半个架构师、半个项目经理,顺带兼职救火员。

那不是上班,那是渡劫。

中午吃饭的时候,产品跟我聊这个项目,说老板很重视,觉得 AI 音乐这个方向机会很大,希望能尽快做出第一版,先把市场抢下来。

我一边点头一边心想,翻译成人话就是:

时间紧,任务重,预期高,背锅位已锁定。

我都听习惯了。

互联网公司很多话术,拆开了看都差不多。什么“重点项目”“老板关注”“尽快推进”,本质上都是一句话:

兄弟,这活儿你得狠狠干。

下午我就老老实实开始梳理东西了。

先看文档,再过原型,再找产品和前端把流程捋一遍。等我忙到快下班的时候,桌面上已经新建了好几个文件:

《后端架构草案》
《数据库设计v1》
《任务状态流转说明》
《模型调用链路梳理》
《一期待确认问题》
《资源申请与招聘建议》

看着这些文件,我心里反倒没早上那么慌了。

很多时候人怕的不是活多,而是活多还一团乱麻。真等你把它拆开,按轻重缓急一摆,发现其实也就是一堆待办而已。程序员最擅长的不就是这个吗?把一坨看起来很抽象、很复杂的东西,慢慢拆成一个个能处理的小问题。

下班的时候,办公室已经走了不少人。

我靠在椅子上揉了揉脖子,感觉自己像连续跑了十几个复杂 SQL,虽然还能撑,但也快到该 GC 的边缘了。我抬头看了眼窗外,高新园的灯一点点亮起来,整片写字楼区像刚上线的一排服务器,窗口一格一格发着光。

那一刻我心里突然又冒出一点莫名其妙的兴奋。

虽然只有我一个后端,这事听着挺惨。
但反过来说,也因为只有我一个后端,这套系统到底怎么搭、接口怎么定、库表怎么拆、任务怎么跑,基本都由我说了算。

说难听点,这是一口很大的锅。
说好听点,这也是很大的主导权。

以前我更多是写别人定好的东西,像一个老老实实实现需求的模块。
这一次,我终于有点像在从 0 搭一个完整的后端系统了。

这种感觉很累。
但对程序员来说,也确实挺上头。

收拾东西准备走的时候,我站起来伸了个懒腰,背上电脑包往外走。电梯下行的那几十秒,我脑子里还在过白天那些事,像后台任务还没停,表面下班了,实际线程一个没退。

走到楼下的时候,我掏出手机给小璇发了条消息:

“新公司第一天报道结束。工资高是高了点,代价就是整个 AI 项目的后端只有我一个人。老板估计是把我当分布式集群在使。”

消息发过去没一会儿,她就回了我一句:

“这不正适合你吗?你不就喜欢这种从 0 搭东西的活。”

我看着手机笑了下,回她:

“喜欢归喜欢,但我本来以为自己是来当组长的,结果现在看,更像是来当整个后端部门的。”

发完这句,我把手机塞回口袋,抬头看了眼夜里的高新园。

风不大,人很多,灯也很亮。

我突然有种很强烈的感觉——这次跳槽,肯定不会轻松。后面的日子,多半也少不了加班、熬夜、改需求、扛压力,甚至一不小心就得原地爆肝。

但不知道为什么,我心里又没那么虚。

可能是因为工资到位了。
也可能是因为这种“全靠自己把东西搭起来”的感觉,本来就很容易让程序员上头。
再说得直白一点——我这种人,天生就对这种高压开局有点犯贱式的兴奋。

只不过这次,我心里也很清楚:

新公司的第一天,严格来说还不算真正开工。
今天顶多只是把项目 init 了一下。

真正的硬仗,真正的线上压力测试——还在后面。