9692 - 「中身が無い」

上周和一位即将毕业的大学生聊天。他很厉害,学了很多东西,却感叹道:“很多人学了好多编程语言,但最后也只停留在能写一个 ‘Hello World’1 的程度。” 我笑了笑,说:“那是因为他们大多一直在准备学习,往往刚刚开始,就放弃了。”

——题记

我叫雨帆。所有汉字中,我最喜欢、也最擅长写的就是“雨”和“帆”这两个字。并不是因为我字写得好,而是因为我专门练过。

这句话,其实可以套在很多事情上。无论是技能还是兴趣,想要掌握,都不是一蹴而就的,而是反复练习、持续积累的结果。没有人能一开始就成长为参天大树,即使是天才,也有常人难以想象的汗水与努力。

所以一直以来,我都很认同一句话:信念永远不能达到目的地。每个人都有自己的梦想,但如果只是停留在“梦想”,不去行动,那么它也仅仅是一个梦。

记得三年前,有一位叫 谢钦 的网友给我发邮件,问了很多关于独立博客的问题。那一刻我就像在茫茫大海中看见了一束光。因为长期以来,我总以为只有我一个人在做这件事,身边无人理解。而突然有人懂你、与你共鸣的感觉,真的让人感动。

然而三年过去,他的博客主页上依然写着那句话:“未命名博客更新中……”

我并不是要刻意嘲讽这位朋友,而是觉得有些遗憾。因为,建立一个独立博客的准备过程真的很麻烦——尤其是在国内,还得经历繁琐的备案流程。若不是出于热爱,很多人一开始就会选择放弃。可惜的是,即便准备好了域名、服务器、系统、模板,却在最关键的一步——“开始写作”——上放弃了。


写代码的时候,老大会经常提醒我们一句话:**不要过度设计。**所谓过度设计,就是和业务无关的东西写了一大堆,但真正关键的业务逻辑却很少。

说到这儿,不得不提知乎上那个很火的问题:为什么有些大公司技术弱爆了?看到这个问题时,我就想起前老大常说的一句话——“满足业务需求的代码,就是好代码。”

对于很多还没毕业的计算机专业学生来说,这句话可能难以理解。毕竟当他们看到一些外表光鲜的项目,却发现底层代码简直糟糕透顶,甚至数据库设计都违反教科书级规范时,往往会感到震惊。但事实是,这些项目之所以存在、盈利,正是因为它们最起码做对了一件事:满足了业务需求。

当然,我并不是在为“烂代码”洗地。对于互联网公司而言,快速上线、持续迭代,才是维持竞争力的关键。尤其是智能手机用户可能最有体会——许多 APP 一周能更新好几次。那为什么不一开始就把设计定好呢?

从产品角度来看,**需求是不断变化的。**以输入法为例:最初用户只想打字时少选字,于是有了词库;后来又有了按词频排序的候选词;再后来,因网络聊天的普及,出现了 Emoji、字符画等功能……这些需求的出现,谁也无法在最初设计阶段预料到。如果你一开始就想面面俱到,潜心打磨几个月甚至几年,结果很可能是:要么市场早被别人抢走,要么你自己被耗死在设计阶段。

所以,很多事情一开始不可能就做到完美。如果只是一味思考“怎么做好”,而迟迟不动手,那永远也做不出来。你必须先动手——哪怕只是写个 demo,先跑通主流程,再一点点打磨细节。如果一开始就追求完美,要么累到想放弃,要么根本等不到成果。


上周参加 OpenResty Meetup 时,我和一位架构师聊到“架构设计”。在他看来,架构的存在,是公司业务达到一定规模后的自然产物。对初创公司来说,架构往往不是必需品,因为业务量还没到那个程度。套用安迪·比尔定律,当你的业务规模还很小,再精致的架构设计都不如一个能跑的主流程。按照业内的常见标准,只有当业务量上升到百万级,才真正需要系统性的架构与设计。

当然,这种观点或许有些偏激,我保留意见。但如果回到“写代码”这件事上,我觉得成长路径大概是这样的:

能写出代码能写出满足业务需求的代码能优化满足业务需求的代码能为未来的需求变化预留接口
能将可变行为参数化能在现有语言体系中持续演进
不再为设计模式而设计模式理解并践行 Clean Code 准则拥抱 TDD,不断重构与测试驱动。

换句话说: 不要为了设计模式而设计模式,不要提前优化,不要过度封装,不要一味追新技术。

很多经验丰富的程序员写的代码,往往小而精,恰到好处。当年我在写公司开放平台时,整整半个月几乎毫无进展。后来带我的师兄对我说了一句让我醍醐灌顶的话:

“先理解需求,构建抽象实体,打通主流程。”

如果我一直纠结“用什么框架”“怎么写才优雅”,那今天可能还没写出任何成果。

完美主义是很多人的通病。我们希望一开始就把事情做到最好,于是花大量时间准备、思考、权衡。等真正动手时,却发现别人早已领先几步。

当然,准备是必要的,但行动才是关键。只准备、不实践,再好的计划也只是纸上谈兵。

我的话说完了。


9692 - bleu ciel

Footnotes

  1. Hello World,基本上任何编程语言的教科书,一开始都是教大家如何写一个Hello World,久而久之成为一个梗。