周四上午十点,陈远接到一个陌生微信好友请求。
备注信息是:“陈工您好,我是王明,老周(周建国)推荐。有个急活想请您帮忙看看。”
老周?陈远在记忆里搜索。想起来了,是星云科技之前合作过的一个外包公司的项目经理,为人还算厚道,合作时没怎么刁难过他们技术团队。陈远通过了他的好友请求。
几乎是立刻,对方就发来消息:“陈工,不好意思打扰。听老周说你最近有空,我们这边有个小项目,客户催得急,自己团队搞不定,想找个有经验的大拿帮忙看看。不知道您有没有兴趣接个私活?”
私活。这个词对陈远来说不陌生。在他职业生涯的前几年,为了多赚点钱,他没少接私活。后来职位高了,工作忙了,薪资也上去了,就很少接了。主要是嫌麻烦,钱不多,事不少,还容易和本职工作冲突。
但现在,他“有空”。有大把的空闲时间。而且,他需要钱。哪怕不多,也能补贴点家用,缓解一点坐吃山空的焦虑。
他打字回复:“什么项目?大概什么情况?”
王明很快发来一个压缩包和一个简单的需求文档。陈远下载,打开。是一个小型电商促销活动的后台管理系统。功能不复杂:商品管理、优惠券发放、订单统计、简单的数据看板。技术栈是Spring Boot + MyBatis + MySQL,前端是Vue,都是他熟悉得不能再熟悉的东西。唯一有点特别的是,客户要求能支持瞬时高并发——活动开始时可能会有几万人同时抢券。
“工期很紧,客户要求两周内上线。我们自己的主力都在忙大项目,抽不出人。这个项目不大,但对稳定性要求高。老周说您做过星云的大促系统,经验丰富,所以冒昧找您。”王明补充道。
两周。陈远在心里快速评估。以他现在的效率,如果全心投入,一周到十天应该能搞定核心功能。但他现在不是全职,白天要投简历、学新技术、陪朵朵,只能利用晚上和周末。两周,会非常赶。
“报酬怎么说?”陈远问。这是关键。
“这个项目总包价五万。您这边,我们可以给您两万。预付五千,核心功能完成后付一万,上线验收后付尾款五千。您看行吗?”
两万。两周。平均一周一万。这比他之前时薪低多了,但比他现在的收入——零——高。而且,这是现金,不用交税(至少对方是这么操作的),能直接补贴家用。五千的预付款,可以立刻解决下个月的部分房贷。
但他没立刻答应。“需求文档我看了,技术难度不大,但并发要求高,需要做压测和优化。两周时间,如果要保证质量,很紧。而且,我需要明确需求边界,避免后期扯皮。”
“这个您放心,需求不会再变了,客户已经签了字。并发这块,我们相信您的经验。时间……确实紧,但客户催得急,我们也没办法。您看,能不能接?价格……我们可以再商量。”王明的话里透着急切。
陈远想了想。他需要这笔钱,也需要用这个项目来“验证”自己还没废掉,还能写代码,还能解决问题。而且,这是一个信号——市场上还有人需要他的技术,哪怕只是“私活”的形式。
“两万五。预付一万。功能清单我拉一个,以那个为准。我保证质量,但时间节点要卡死,需求不能再变。”陈远回复。他加价五千,一是试探对方的底线,二是给自己留点议价空间,三是觉得这个项目值得这个价——毕竟,稳定高并发不是谁都敢接的。
那边沉默了几分钟。然后王明回复:“行!陈工爽快!就按您说的。合同我发您电子版,您看看,没问题就签了。预付款今天就能打。您什么时候能开始?”
“合同没问题的话,明天开始。但丑话说在前头,我白天有自己的事,主要晚上和周末干活。沟通主要通过线上,紧急情况可以电话。每天同步进度。”陈远说。
“没问题!理解理解!那我把客户对接人也拉群里,方便沟通。太感谢了陈工,真是救急了!”
谈妥了。陈远放下手机,心里说不上是什么感觉。有点轻松——终于有进账了。有点兴奋——可以写代码了,做点实际的东西。但更多的是压力——两周,高并发,不能出错。而且,这是他失业后的第一份“工作”,哪怕只是临时私活,也不能搞砸。
他打开合同电子版,仔细看了一遍。条款很标准,甲方乙方责任,付款节点,保密条款,知识产权归属(归甲方)。没什么陷阱。他签了电子签名,发回去。
很快,王明把他拉进了一个三人微信群。除了王明,还有一个头像是个卡通猫咪的女孩,叫“莉莉”,是客户方的产品经理。王明简单介绍了一下,莉莉发了个“陈工好~”的表情包,然后发了一堆补充的需求细节和设计图。
陈远看着那些需求,眉头皱了起来。和最初的需求文档相比,多了不少边边角角的功能,比如“优惠券要能设置不同的领取门槛”“数据看板要能导出Excel”“要加个活动效果分析报表”。虽然每个都不大,但加起来,工作量至少增加30%。
他@莉莉:“这些新增需求,需要评估工期。原定两周可能不够。”
莉莉很快回复:“啊,这些都是很小的功能啦,不费事的吧?客户很想要,不然活动效果不好评估。陈工您辛苦一下嘛,加加班,我们也会很感激的!”
典型的甲方口吻。“很小的功能”“不费事”“辛苦一下”。陈远太熟悉了。以前在星云,他面对产品经理类似的请求,有时会据理力争,有时会妥协,取决于项目紧急程度和对方是谁。现在,他是乙方,是拿钱干活的。而且,他需要这笔钱。
他快速评估了一下。如果每天多投入两三个小时,周末全天,勉强能塞进去。但会很累,而且有风险。
他打字:“新增需求可以接,但需要明确优先级。核心功能(发券、下单、统计)必须保证。其他功能我尽力,但不能保证全部完成。另外,如果因为新增需求导致延期,责任不在我。”
莉莉发了个委屈的表情:“陈工,客户那边真的很急……要不这样,您先做,我们看看进度,实在不行,有些功能可以放到二期?”
“可以。但我需要书面的需求优先级列表,你发给我,我们确认。”陈远坚持。吃过太多“口头承诺不算数”的亏,他必须白纸黑字。
“好的好的,我整理一下发您。”莉莉答应。
聊完需求,王明私聊他,发了个银行账号信息:“陈工,预付款一万,您查收一下。合作愉快!”
陈远提供了自己的卡号。几分钟后,手机短信提示:尾号xxxx储蓄卡入账10,000.00元。
钱到账了。真快。陈远看着那个数字,心里五味杂陈。以前在星云,月薪四万,发工资时都没什么感觉,只是数字变动。现在,一万块钱的入账,却让他有种久旱逢甘霖的酸涩和踏实。这一万,能还掉下个月房贷的一半多,能让林薇稍微松口气,能让朵朵下个月去游乐场的愿望不那么难以实现。
他把手机放在一边,打开电脑,开始搭建本地开发环境。JDK,Maven,Git,IDE,MySQL。这些工具他用了十几年,闭着眼睛都能装好。但今天,当他敲下第一个Spring Boot的启动命令,在控制台看到熟悉的启动日志时,心里竟然涌起一阵近乎感动的情绪。
他在写代码。在创造东西。在解决一个具体的问题。而不是在投简历,在等消息,在焦虑地刷招聘软件,在自我怀疑。
他沉浸进去。设计数据库表结构,写Entity,写Mapper,写Service,写Controller。键盘敲击声在安静的客厅里回响,像一首熟悉的老歌。他找回了节奏,那种“问题-思考-解决-验证”的循环,那种专注带来的心流状态。时间过得飞快,等他觉得脖子酸疼抬起头时,发现已经下午两点了。
他煮了碗面,快速吃完,继续。下午,他搞定了商品和优惠券的核心接口,写了简单的单元测试。五点半,林薇接朵朵回来了。他保存代码,合上电脑,去迎接她们。
“爸爸,你看我画的!”朵朵举着一幅画,是今天在幼儿园画的,画的是全家去动物园,有熊猫,有猴子,有长颈鹿。色彩大胆,线条稚嫩,但充满快乐。
“画得真好!”陈远抱起她,亲了亲她的脸蛋,“晚上想吃什么?爸爸给你做。”
“我想吃爸爸做的西红柿鸡蛋面!”
“好,就做面条。”
做饭时,林薇走进厨房,小声问:“下午在忙什么?一直敲键盘。”
陈远一边切西红柿一边说:“接了个私活,以前合作过的外包公司,一个小项目,两周做完,两万五。预付款一万已经打了。”
林薇愣了一下,然后眼睛亮了:“真的?太好了!什么项目?累不累?”
“不累,小系统,我熟。就是时间紧点,得加加班。”陈远没说新增需求和并发压力的事,“这笔钱正好,能把下个月房贷顶上。”
“嗯。”林薇点点头,看着他切菜的侧脸,欲言又止,最后还是说,“你也别太拼,注意身体。好不容易有时间休息……”
“没事,写代码不累,比找工作轻松。”陈远笑笑,把鸡蛋打进碗里,“而且,有点事做,心里踏实。”
林薇没再说什么,出去陪朵朵玩了。陈远继续做饭,心里盘算着晚上的安排。吃完饭,陪朵朵玩一会儿,然后哄她睡觉,之后就可以继续写代码。顺利的话,今晚能把订单模块的骨架搭起来。
晚饭时,朵朵很兴奋,说着幼儿园的趣事。陈远认真听着,但脑子里时不时会蹦出技术问题:优惠券的并发锁怎么设计更优雅?订单表要不要分表?压测方案怎么定?
他强迫自己把注意力拉回女儿身上。这是他的生活,不能被工作完全侵占,哪怕这个工作是他现在急需的。
饭后,他陪朵朵拼了会儿积木,然后给她洗澡,讲故事。朵朵睡着后,已经九点半了。他轻手轻脚回到客厅,打开电脑,继续。
夜晚很安静。只有键盘声,和他偶尔的喃喃自语。他遇到了一个技术难点:在高并发领券场景下,如何防止超发?传统的数据库行锁在压力大时可能成为瓶颈。他思考着,查资料,写了几种方案,做简单的模拟测试。最终选择了一种“缓存计数+异步扣减”的方式,虽然增加了复杂度,但能更好地应对峰值。
敲定方案,开始实现。等他写完核心逻辑,跑通第一个简单测试用例时,抬头看时间,已经凌晨一点半了。
颈椎和后脑传来熟悉的钝痛。他站起来,活动了一下僵硬的脖子和肩膀,走到阳台。夜深了,小区里只有零星几盏灯还亮着。夜空清澈,能看到几颗星星。晚风吹来,带着夜的凉意。
他点了一支烟——戒了又复吸,最近压力大,忍不住。烟头的红光在黑暗里明灭。他吸了一口,缓缓吐出烟雾。尼古丁让紧绷的神经稍微松弛了一些。
他看着远处城市的灯火,想,此刻,这座城市里,有多少人像他一样,在深夜还在工作?在加班赶项目,在写代码,在处理线上问题,或者在为生计发愁,无法入睡?
以前,他是那些灯火中的一员,觉得忙碌是荣耀。现在,他在自己家的阳台,接着私活,为了两万五千块钱,熬夜写代码。这算堕落吗?还是务实?
他不知道。他只知道,这一万块预付款,能让林薇眉头舒展一些。能让下个月的房贷不那么压人。能让他在找工作暂时无果时,还有一点价值感和收入。
这就够了。
他掐灭烟头,回到客厅。关掉电脑,洗漱,上床。林薇睡得很沉,他轻轻躺下,尽量不吵醒她。
闭上眼睛,脑子里还在回放代码逻辑。优惠券的并发锁,订单的状态机,数据看板的查询优化……像放电影一样,一幕幕闪过。他知道,明天醒来,他要继续。
但他不觉得痛苦。反而有一种久违的、近乎饥渴的投入感。失业这一个月,他像一个被闲置的工具,生锈,迟钝,怀疑自己的用途。现在,他重新被拿起,去拧一个螺丝,去敲一块木头。虽然活不大,虽然报酬不高,但至少,他又“有用”了。
这种“有用”的感觉,对现在的他来说,比什么都重要。
窗外,夜色渐深。城市在沉睡,也在苏醒。明天,又是新的一天。他要继续投简历,学新技术,陪女儿,以及,写这个能换来两万五千块钱、让他暂时感觉“有用”的代码。
生活就是这样,在破碎和重建之间,寻找平衡。在无望和希望之间,寻找支点。
陈远找到了一个支点,很小,很临时,但至少,此刻,他能站在上面,喘口气,看看四周,然后决定下一步,往哪个方向,迈出哪只脚。
他翻了个身,面向林薇,轻轻搂住她。在睡梦中,她无意识地往他怀里靠了靠。
温暖,真实。
还有代码,还有问题要解决,还有钱要赚,还有家要养。
这就够了。陈远想。这就够了。
他闭上眼睛,让自己沉入睡眠。梦里,没有已读不回的HR,没有冰冷的拒绝邮件,只有一行行等待被运行的代码,和一个等着被解决的问题。
简单,明确,令人安心。