本文适合:和同事代码风格打架的开发者、从不做代码复审的团队、想尝试AI结对编程但不知道怎么配合的同学。
你将收获:代码风格与设计规范的核心要点、代码复审的3种形式与核查清单、结对编程的驾驶员/领航员模型、AI结对编程的"知人善任"策略、两人合作的5个阶段。
写在前面
前两章聚焦"个人"——个人技术、个人成长。从第四章开始,视角转向"人与人"的最小协作单位:两个人。
为什么是两个人?因为合作的最小单位不是团队,而是两个人。两个人都合作不好,团队协作就是空谈。
第四版在这一章新增了4.6 与AI结对编程——知人善任,这是前三版没有的,也是这一版最让我期待的部分。
01 | 代码规范:合作的前提是"说同一种语言"
两个人合作写代码,第一步不是分工,而是统一规范。否则你用Tab我空格、你驼峰命名我下划线,合并代码就是灾难。
1.1 代码风格规范
书中给出的原则只有三个词:简明、易读、无二义性。
具体规定覆盖了这些维度:
维度 | 规范要点 | 我的踩坑经历 |
缩进 | 4个空格,不用Tab | Tab在不同编辑器显示宽度不同,合并后代码"跳来跳去" |
行宽 | 限制100字符 | 超长行在小屏幕上要左右滚,code review时根本看不全 |
括号 | 复杂条件表达式用括号标明优先级 | a && b || c 谁优先?不加括号就是埋雷 |
断行 | 每个"{"和"}"独占一行 | 压缩在一行看起来"省空间",但debug时找不到括号对应关系 |
命名 | Pascal形式(类名)/ Camel形式(变量) | 一个项目里混用两种风格,阅读体验灾难级 |
注释 | 随代码更新,误导性注释比没有更糟 | 改了代码忘了改注释,同事按旧注释理解,直接踩坑 |
1.2 代码设计规范
风格规范管的是"怎么写",设计规范管的是"怎么设计":
函数:只做一件事,并且要做好
goto:有助于逻辑清晰时可以用,不必视如洪水猛兽
错误处理:Debug版验证所有参数,正式版验证外部传入参数;断言用于"肯定如此"的情况,错误处理代码用于"可能发生"的情况
类:仅在必要时使用,避免过度封装
我的实战感悟
以前觉得代码规范是"表面文章"——代码能跑就行,规范不规范的有什么关系?直到有一次接手离职同事的代码:没有注释、命名随意、一个函数500行、Tab和空格混用……我花了三天才理清逻辑,而如果他有基本的规范意识,可能只需要半天。
代码规范不是为了好看,而是为了"降低协作成本"。你自己写的代码自己能看懂,但别人呢?三个月后的你呢?
一句话提炼
代码规范的本质不是约束自己,而是善待他人。你写的每一行代码,都是别人(或三个月后的自己)要读的"文档"。
02 | 代码复审:看代码是否在规范框架内正确解决了问题
2.1 三种复审形式
书中定义了代码复审的三种形式:
形式 | 谁vs谁 | 特点 | 适用场景 |
自我复审 | 自己vs自己 | 最方便但最不可靠——人对自己总是过于自信 | 日常自查 |
同伴复审 | 复审者vs开发者 | 简便易行,最推荐的常规方式 | 日常代码提交 |
团队复审 | 团队vs开发者 | 覆盖率高但效率低,全体到场 | 关键代码、不再更新的代码 |
2.2 复审的目的
不只是"找bug",而是6个目标:
1.找出代码错误(编码错误、不符合规范)
2.发现逻辑错误
3.发现算法错误
4.发现潜在的错误和回归性错误
5.发现可能需要改进的地方
6.传授经验,教育开发人员
第6点经常被忽略。代码复审不只是"挑错",更是团队知识传递的通道。新人通过看老手的复审意见,能快速学到什么是好代码。
2.3 复审后做什么
书中给出了明确的三步处理:
1.更正明显的错误——当场改
2.记录无法很快更正的错误——建issue跟踪
3.把错误记入"我常犯的错误"表——作为以后自我复审的第一步
第3步太精妙了。每个人维护一份"常犯错误清单",每次写完代码先自查这个清单,等于给自己加了一层"个性化防护"。
我的踩坑案例
我们团队以前没有代码复审流程,每个人写完直接提交。有一次两个同事同时改了同一个配置文件的同一个位置,合并后谁都没发现,上线后系统直接崩了。如果哪怕有一个人做一次同伴复审,这种问题5秒钟就能发现。
代码复审不是"额外负担",而是"保险"。它花5分钟,省5小时。
一句话提炼
代码复审不是审判,而是互助。它帮你抓bug、传经验、建规范——一箭三雕。
03 | 结对编程:两个人一台电脑
3.1 两个角色
结对编程的核心是两个角色的分工:
角色 | 职责 | 类比 |
驾驶员(Driver) | 控制键盘,写代码,专注实现细节 | 开车的人 |
领航员(Navigator) | 审视全局,提醒方向,发现潜在问题 | 副驾驶看导航 |
关键点:两个角色平等互补,不是主从关系。而且要定期互换——你开一段,我开一段。
3.2 结对编程的好处
书中从三个层次总结:
· 开发层次:更好的设计质量和代码质量,两人解决问题的能力更强
· 个人层次:更多信心,高产出带来高满足感
· 企业管理层次:有效交流,相互学习,知识传递,更高投入产出比
我的思考
结对编程在现实中争议很大。很多老板觉得"两个人干一个人的活"是浪费。但我的体会是:结对编程最大的价值不是"写得更快",而是"减少返工"。两个人一起写,设计缺陷当场被发现,逻辑错误实时被纠正,省掉的不是编码时间,而是后续的调试和重构时间。
当然,不是所有任务都适合结对。探索性任务、复杂算法设计适合结对;简单CRUD、重复性工作就没必要。
一句话提炼
结对编程不是两个人干一个人的活,而是一个人干两个人的活——同时编码+复审,产出质量翻倍。
04 | 与AI结对编程——知人善任(第四版新增)
这是第四版新增的内容,也是这一章最前沿的部分。
4.1 AI也是"结对伙伴"
第四版将结对编程的模型扩展到了人+AI。AI可以扮演驾驶员(生成代码),也可以扮演领航员(审查代码、提供建议)。
但书中强调了一个关键概念:知人善任。
不是所有任务都适合交给AI,也不是所有AI都适合同一个任务。就像团队里不同人有不同特长,你要知道AI的能力边界,合理分配角色。
4.2 我的实战体会
做交付项目这一年,我大量使用AI辅助编程。体会有三点:
第一,AI适合做"驾驶员"的场景:写样板代码、生成测试用例、处理格式化任务。这些任务机械但易错,AI干得又快又好。
第二,AI适合做"领航员"的场景:代码审查、发现潜在bug、提供优化建议。AI不替代人做决策,但能帮你看到盲区。
第三,AI不擅长的场景:理解复杂业务上下文、跨系统影响分析、涉及领域知识的判断。这些必须人来。
核心原则:AI是你的副手,不是你的替身。决策权永远在你手里。
一句话提炼
AI结对编程的关键是"知人善任"——知道AI能干什么、不能干什么,把对的活交给对的"伙伴"。
05 | 两人合作的五个阶段
书中借用团队发展的经典模型,描述了两人合作会经历的阶段:
阶段 | 特征 | 我的理解 |
萌芽阶段 | 互相客气,试探边界 | "你说了算""都可以" |
磨合阶段 | 意见冲突,风格碰撞 | "你这样写不对""你才不对" |
规范阶段 | 建立共识,形成默契 | "这次你来写,我来复审" |
创造阶段 | 高效协作,1+1>2 | 不用说话就知道对方要什么 |
解体阶段 | 合作结束,各自上路 | 项目交付,各回各的 |
如何正确给予反馈
书中给出了反馈的三个层次:
最外层:行为和后果——"你这段代码没有处理空指针,可能导致线上崩溃"(推荐)
中间层:习惯和动机——"你总是不写异常处理,是不是觉得不重要?"(慎用)
最内层:本质和固有属性——"你就是个粗心的人"(绝对避免)
好的反馈针对行为,不针对人格。这条原则不只适用于代码复审,适用于所有职场沟通。
一句话提炼
两人合作从"客气"到"冲突"到"默契"再到"创造",是正常路径。跳过磨合阶段的"假和谐",走不到创造阶段。
干货复盘
本章核心概念 | 一句话理解 | 常见误区 |
代码风格规范 | 简明、易读、无二义性 | "能跑就行,规范不重要" |
代码设计规范 | 函数只做一件事,错误处理分层 | "设计规范是架构师的事" |
代码复审 | 看代码是否在规范框架内正确解决问题 | "复审就是挑刺" |
结对编程 | 驾驶员+领航员,平等互补 | "两个人干一个人的活" |
AI结对编程 | 知人善任,AI是副手不是替身 | "AI什么都能干" |
两人合作5阶段 | 萌芽→磨合→规范→创造→解体 | 跳过冲突追求"假和谐" |
本章最大收获:合作的最小单位是两个人。代码规范是合作的地基,代码复审是合作的保险,结对编程是合作的极致形态。而AI时代的结对编程,多了一个"不知疲倦但需要知人善任"的新伙伴——关键是想清楚:AI能干什么、不能干什么,决策权永远在自己手里。
下篇读第五章:团队和流程。如果这篇笔记对你有帮助,欢迎转发给也在学软件工程的朋友。