我在一家外包公司干了六年,其中三年被强制要求每天和别人共用键盘。最初我以为自己是幸运的——毕竟结对编程被包装成最佳实践,领导说这样能减少bug、培养新人。但三个月后我开始怀疑自己得了什么病:每次搭档换人,我的思维模式就要硬生生切换一次,像被强迫用左手写字。后来我读了一些认知心理学文献,才明白问题不在技术,而在于人类大脑的RAM本来就不支持双线程。
支持者总是搬出那些经典数据:IBM的某个团队缺陷率下降15%,某位大牛说结对编程像代码审查的实时版。但没人讨论那些消失的中间层思考——当你旁边坐着一个人,你没法自由地尝试错误路径,没法对着空白屏幕发呆五分钟再写一行烂代码。我一度以为自己变笨了,直到我独自在家写完一个周末项目:那感觉像憋了很久终于能独自上厕所。协作的真正价值不在每时每刻,而在于那些关键分叉点:设计决策、疑难bug、代码评审。
我后来做了一个小实验:在团队里推行'间歇性结对'——每天只结对1.5小时,集中在最难的模块,其余时间各自孤独干活。三个月后,不仅交付速度回升,而且那1.5小时的效率达到了过去全天结对的三倍。因为稀缺感让人认真,而固定流程只会催生表演性配合。有趣的是,那些最反对我的同事,往往是最热爱在结对时说话的人——他们享受的不是产出,而是注意力。
所以我现在不再相信结对编程是个普适真理。它更像一种工具,适合特定的任务类型(比如修复遗留系统、带新人入门)和特定的性格组合。但把它当成默认工作方式,等同于把每一个程序员都当作同一个模具里的齿轮。如果你发现自己结对时总在频频看表,或者你的搭档开始替你补全句子,那不是一个好的征兆,那说明你在杀死自己的独立思考。真正的深度工作,从来都是一个人完成的。
(附:我把这个观点写进季度复盘后,立刻被项目经理约谈,说我缺乏团队精神。但从那年开始,我的bug率一降再降,收入翻倍。你猜谁赢了?)