从个人编程到工程化思维

先看两个程序员。 小丙写代码很快:变量随便起个 atmp,函数一写上百行,能跑就行。半年后需求改了,他打开自己当年的代码看了半天:「这段到底在干啥?」改完一处,别的地方又报错,只好再通宵排查。小丁也写代码,但会顺手写两行注释说明「为什么这么写」、把长函数拆成几个小函数、关键逻辑补上单元测试;提交时写清楚「改了什么、为什么」。半年后需求再改,他几分钟就定位到该改哪里,改完测试一跑,心里有底。差别不在谁更聪明,而在是否在用「工程化思维」写代码——为「别人」和「未来的自己」留一条能走通的路。本章带你认清个人开发与团队交付的差异,再讲清可读性、可测试性、可维护性三件事,以及文档、版本控制与协作习惯;最后落到一句话:为他人与未来写代码

一、个人开发与团队交付的差异

一个人写、一个人用、写完就丢,可以「怎么快怎么来」。一旦代码要给别人看、给别人改、要长期留着用,游戏规则就变了:别人看不懂就会来问你、问多了你就成瓶颈;没有记录,过几个月没人记得「当时为什么这么设计」;没有规范,每个人风格不一样,合在一起就像拼布被子——能跑,但维护成本暴增。

个人开发(只对自己负责)
  • 自己看懂就行,命名、结构随意
  • 改完就忘,不写注释、不写文档
  • 能跑就行,不测也没关系
  • 代码在本地,换电脑就没了
团队交付(对他人与未来负责)
  • 别人能接手:命名清晰、结构清楚
  • 有记录:注释、文档、提交说明
  • 可验证:有测试,改完敢发布
  • 可追溯:版本控制、协作流程
个人开发 vs 团队交付:责任对象不同,对代码的要求就不同

所以,从「个人编程」到「工程化思维」,本质是责任对象的转变:从「对当下的自己负责」变成「对队友、对半年后的自己、对产品与用户负责」。下面三件事——可读性、可测试性、可维护性——就是这种转变在代码层面的具体体现。

二、可读性、可测试性、可维护性

这三项经常被合在一起说,因为它们互相支撑:可读别人(和自己)才看得懂;可测改完才有信心、重构才敢动手;可维护才能长期演进、不变成一坨不敢动的「祖传代码」。

可读性
命名达意、结构清晰、注释说清「为什么」;别人(和半年后的自己)能快速看懂。
可测试性
逻辑可隔离、依赖可注入、行为可断言;写得出单测、改完能跑测试兜底。
可维护性
模块边界清晰、耦合低、改一处不必动全身;能安全重构、持续演进。
工程化代码的三根支柱:可读性、可测试性、可维护性

一句话: 可读是基础,可测是保障,可维护是结果。三者做到位,代码才能「活得久、改得动」。

三、文档、版本控制与协作习惯

工程化思维不仅体现在「代码怎么写」,还体现在文档、版本控制和协作习惯上。这三样是团队能并行工作、能交接、能追溯的根基。

文档:写什么、何时写

不是「代码里堆满注释」就叫文档,也不是「什么都写成长篇大论」。文档要对读者有用:架构文档给新人或评审看、API 文档给调用方看、运行手册给运维看、决策记录(ADR)给未来的自己看「当时为什么这么选」。原则:该写的写清楚、能代码表达的用代码、文档和代码一起更新。过时的文档比没有文档更害人。

版本控制:不只是「备份」

版本控制(如 Git)的作用不只是把代码存到云端,而是:谁在什么时候改了什么、为什么改,都有记录;可以开分支并行开发、再合并;出问题可以回滚或对比。工程化习惯包括:提交信息写清「改了什么、为什么」;分支策略统一(例如 main 保护、feature 分支开发);重要改动通过 Code Review 再合入。下面这张图帮你建立「提交与分支」的直观印象:

版本控制:提交形成历史线,分支从某次提交分出、开发完成再合并

协作习惯:接口、评审与沟通

多人改同一套代码时,接口要约定清楚(模块之间怎么调、传什么、返回什么),这样大家并行时不会互相踩脚。Code Review:别人改的代码你看一遍、你改的别人看一遍,既能发现错误又能统一风格、传播知识。沟通:需求不清先问、设计有争议先对齐、阻塞了及时说——这些看起来是「软技能」,却是工程能否顺畅运转的关键。

文档
该写的写、与代码同步更新;架构、API、决策有据可查。
版本控制
提交信息清晰、分支策略统一、重要改动走 Review。
协作
接口约定、Code Review、需求与设计及时沟通对齐。
三种工程化习惯:文档、版本控制、协作

四、建立「为他人与未来写代码」的意识

有一句话常被引用:「写代码时,要假设六个月后接手的是一个知道你住址的暴力狂。」 意思是:别指望「反正我会记得」——你会忘;别指望「反正只有我用」——迟早会有人接手。所以,为他人与未来写代码,就是把「读者」当成一个具体的人:可能是你的队友、可能是半年后的自己、可能是下一个维护者。他们需要能快速看懂、能安全修改、能通过测试和文档理解「为什么这样设计」。

从「只对当下自己负责」到「为他人与未来写代码」,落到可读、可测、可维护

具体可以这样落地:命名多花几秒想清楚,避免 atmpdata2函数别写太长,一段逻辑一个函数;复杂处补一句注释说「为什么」;关键逻辑加个单测,改完跑一遍;提交时写清「改了什么、为什么」;设计有取舍时写进 ADR 或文档,方便以后复盘。这些习惯一开始会多花一点时间,但会省下大量未来的排查和沟通成本。

小贴士: 从今天起,每写一段代码就问自己一句:「半年后别人(或我自己)看这段,能看懂吗?敢改吗?」若答案是否定的,就顺手补个名字、拆个函数、加行注释或一个测试。慢慢就会形成「为他人与未来写代码」的肌肉记忆。

五、小结

个人开发只对自己负责,团队交付要对他人与未来负责;差异体现在命名、文档、测试与版本控制上。可读性、可测试性、可维护性是工程化代码的三根支柱:可读别人才能看懂,可测改完才有底气,可维护才能长期演进。文档、版本控制与协作习惯是团队并行与交接的根基:文档要对读者有用并随代码更新,版本控制要留下清晰历史与分支策略,协作要讲清接口、做 Code Review、及时沟通。最后,建立「为他人与未来写代码」的意识:把读者当成具体的人,用可读、可测、可维护和良好习惯为他们铺路。下一章我们进入需求工程:需求获取与分类,为后续设计与开发打好地基。