
凌晨两点,显示器幽蓝的光晕映着我浮肿的眼皮,键盘缝隙里的薯片碎屑随着颤抖簌簌掉落。产品经理在群里轻飘飘发来的 “加个搜索功能”,此刻像一把生锈的钝刀,在我太阳穴上反复剐蹭。咖啡杯底残留的褐色污渍早已干涸,第三罐红牛在桌角堆成小山,铝罐表面凝结的水珠正顺着我的手背往下淌,混着冷汗浸湿了袖口。
这不是第一次了。上个月的 “优化用户体验” 让我把整个页面推翻重写,结果甲方大爷指着屏幕说 “我想要的是五彩斑斓的黑”;上上个月的 “做个差不多的界面”,最终演变成十八个版本的深夜会议,每个领导都有自己的哈姆雷特。需求文档里的每个字都像薛定谔的猫,你永远不知道打开测试服时,会跳出什么奇形怪状的生物。窗外的霓虹在玻璃上晕染成扭曲的色块,就像我混乱的代码逻辑,越改越像一摊无法收拾的烂泥。
需求评审会是当代职场最魔幻的行为艺术。产品经理捧着咖啡讲述 “用户痛点”,PPT 上的流程图比清明上河图还复杂;运营小姐姐眨着无辜的眼睛说 “这个功能周末就要”;老板敲着桌子强调 “小改动而已”。而我们程序员,像被架在火上烤的秋刀鱼,连说 “不” 的资格都没有 —— 毕竟在某些人眼里,写代码和拧螺丝没什么区别。我揉着刺痛的后颈,看着会议室内此起彼伏的手机屏幕光,突然想起自己已经连续三周没见过夕阳。
最绝望的不是需求本身,而是需求的无限膨胀。最初的 “加个按钮” 会变成 “要带粒子特效的动态按钮”,“优化速度” 最终演变成 “必须比微信还快 0.01 秒”。需求文档像被施了膨胀咒的气球,而我们的发际线,正以肉眼可见的速度后移。凌晨四点,我盯着不断报错的代码,眼前开始出现重影,太阳穴突突跳动的频率和空调外机的轰鸣逐渐重合。

验收那天,会议室的空调发出刺耳的嗡鸣。领导翘着二郎腿,鼠标滚轮被他压得吱呀作响,镜片后的眼睛眯成两条细缝:“这搜索框位置不对啊,我要的是悬浮在右上角,还得跟着页面滚动。” 我攥紧手中的会议记录,指节泛白 —— 群聊记录里明明写的是 “顶部居中”,此刻却在投影仪上变成模糊的光斑。“而且这个搜索结果展示,太单调了。” 他突然用力拍了下桌子,震得马克杯里的枸杞都蹦了起来,“得加上渐变背景,再整点动态缩放效果,年轻人就是缺乏想象力。” 我盯着他锃亮的皮鞋尖,指甲深深掐进掌心 —— 三天前的需求确认会上,他亲口说过 “简洁优先”。喉咙里泛起铁锈味,是熬夜上火牙龈出血的味道,我却连起身接杯水的力气都没有。
当我第 108 次修改代码时,突然理解了西西弗斯的浪漫。至少他推的石头不会突然长出翅膀,不会在快到山顶时突然变成刺猬。而我们面对的,是永远在变形的需求,是永远不够用的排期,是永远无法沟通的 “外行”。显示器右下角的时间跳到五点十七分,窗外的城市依旧沉睡,只有我敲键盘的声音在空荡荡的办公室回响。手指机械地敲击着,我忽然觉得自己像台老化的机器,齿轮间卡着无数未解决的需求,每转动一次都发出痛苦的呻吟。
但愤怒过后,键盘依然要敲,bug 依然要改。毕竟在这个全民创业的时代,每个程序员都是用代码对抗混沌的战士。我们骂骂咧咧地写着需求,就像小时候捏着鼻子喝中药 —— 虽然苦,但总能治好些什么。可当晨光终于刺破云层,照在我布满血丝的眼睛上时,我却看不到那些所谓 “治好” 的希望,只看见下一个 “一句话需求” 正张牙舞爪地向我扑来。
下次再收到 “一句话需求” 时,我决定把自己关进小黑屋,对着空气开三个小时的需求评审会。说不定,那些漂浮在空气中的 bug,会自己爬进垃圾桶里。可即便如此,我也知道,新的需求总会像永不停歇的潮水,将我再次淹没在代码的深海里。