返回博客

写代码10年,我最大的收获是「不写代码」

写代码是最容易的部分,决定不写什么代码才是最难的部分。

从大二开始写第一行代码算起,我写代码这件事已经做了十年。

回头看看这十年,我的技术能力确实在提升——从写一个简单的 CRUD 后台,到设计能支撑百万请求的系统架构,从只会用 jQuery 到能熟练使用各种框架和工具。但最大的认知转变,不是关于"怎么写代码",而是关于"什么时候不写代码"。

听起来有点反直觉,对不对?一个写了十年代码的人,最大的收获居然是不写代码。但这就是我的真实感受:写代码是最容易的部分,决定不写什么代码才是最难的部分

从"能写"到"不写"

刚入行的前三年,我的心态是"所有问题都能用代码解决"。遇到问题,第一反应就是"写一个工具"、"搭一个系统"、"做一个自动化"。那时候我觉得,写代码多就是厉害,功能多就是牛逼。

我记得有一次,我想做一个简单的数据统计功能。公司的现有工具不太方便,我花了整整一周,自己写了一个完整的统计系统。做出来之后我特别自豪,到处跟人炫耀。直到有一天,一个同事路过看了一眼,说:"你为什么不直接用 Excel 透视表?"

我愣住了。Excel 透视表,10 分钟就能搞定的事情,我花了一周写了一个远远不如它好用的工具。

这是我第一次意识到:"能写"不意味着"应该写"。写代码是一件很酷的事情,但如果你把"酷"当作"正确",你就会在错误的方向上越走越远。

什么时候不写代码?

经过多年的"踩坑",我总结出了四个"不写代码"的场景:

1. 已经有现成的,别写

这是最常见的陷阱。很多程序员有"Not Invented Here"综合征——总觉得别人做的不够好,自己写一个才放心。

但现实是:大多数时候,现成的解决方案比你自己写的要好得多。无论是支付系统、用户认证、还是数据分析工具,除非你有非常特殊的需求,否则直接用现成的。你花一个月写了一个"还不错的"支付系统,但 Stripe 已经花了十年、几千个工程师迭代它。你凭什么觉得自己一个月能超越它?

我现在做独立开发,原则是:能用第三方服务绝不自建,能用开源库绝不手写,能用现成模板绝不从零开始。节省下来的时间,全部用来做真正需要我做的事情——理解用户、设计产品、做推广。

2. 这个功能不一定需要,别写

产品经理有一个经典问题:"这个功能用户真的需要吗?"

但程序员自己也有一个类似的问题:"这个代码真的需要吗?"

我做过太多"提前优化"的事情。比如,在用户只有 100 个的时候,就开始设计能支撑 100 万用户的架构。在功能还没验证的时候,就开始做单元测试、自动化部署、监控告警。这些都没有错,但问题是——如果你连这个产品能不能活到 100 万用户都不知道,为什么要花时间做这些?

我现在的做法是:先让功能跑起来,用最笨的方式。如果用户确实需要,数据撑不住了,再迭代优化。90% 的情况下,你担心的那些"优化"根本不需要做。

3. 以后会大改的,别写

很多时候,你写了一段"完美"的代码,但三个月后需求变了,那代码被全部删掉重写。

我学到的教训是:如果你不确定一个功能会长期存在,就用最简单的方式实现它。不要写抽象层,不要设计扩展性,不要做过度工程。因为你为之努力的那些"可扩展性",在需求变更面前一文不值。

有一句名言说得好:"代码不是写出来的,是改出来的。"但更准确的说法是:代码不是写出来的,是删出来的。你写的大部分代码,最终都会被删掉。所以,尽可能少写,尽可能简单。

4. 应该由别人写的,别写

这是最难的一种"不写"。

在团队中,你经常面临一个选择:一个功能,你自己写需要 2 天,但把这个功能教会另一个人来做需要 5 天。你可能会选择自己写,因为"更快"。但如果你算一下长期成本:

第一个选择短期更快,但长期更慢。第二个选择短期更慢,但长期更快。

我做了太多次第一种选择,结果就是"把自己活成了瓶颈"——所有事情都要经过我,因为我写代码最快,但我也没有时间去思考更重要的事情。

不写代码,比写代码更难

你可能觉得,不写代码不就是"偷懒"吗?有什么难的?

但事实是,不写代码比写代码难得多。因为:

写在最后

写代码十年,我最大的收获不是学会了多少框架、多少语言,而是学会了在合适的时候放下键盘

代码是工具,不是目的。你的目的可能是解决一个问题、创造一款产品、或者帮助一群人。写代码只是通往这个目的的一种方式。如果你不写代码也能达到目的,那就不写。如果你写更少的代码也能达到目的,那就写更少。

下次你准备开始写代码之前,先问自己一个问题:这行代码,真的需要存在吗?

如果答案是"不需要",那就别写。你会感谢你自己的。