成熟代码设计的几点思考

成熟代码设计的几点思考

工程成熟度的一个标志在于你可以越来越有信心将任意一个方案落地实施好,而不是对着一堆标准和流程望洋兴叹。这样的成熟度来自于你经年累月的积累。不断反复的练习,将实施的流程和模式逐步刻入脑海中形成肌肉记忆。如此,你便可以节省出更多的脑力去思考别的一些问题:宏观的、细节安全的、可维护性等。而如果没有形成肌肉记忆,你不得不在那些平凡的细节处耗费脑力,以至于无法腾出足够的大脑运算力考虑别的事情。

伴随着成熟度的,是你产出的稳定和质量的保证。不必再回到满是草稿代码的时代,一方面是因为生产高质量代码已经形成不用思考的肌肉记忆,另一方面是经过长时间的实践,你知道一开始多花些时间在代码的管理和设计上,会为你的后续工作节省更多的时间。即便是项目工期相当紧急,良好的事前代码设计依旧会成为不可替代的加速器。越是清晰的代码结构,越是能够将问题展漏无疑。于是,一方面你可以很有信息地确认你的代码确实在正常工作,另一方面你能够轻松地对这部分的东西做改动,特别是一个处于探索阶段的项目前期。

还有一点,良好的代码结构,会给你足够多的士气。你不会因为大量的工作产出而感到疲劳或者沮丧,相反,你会因为你的巨大产出而备受鼓舞。反过来,如果你的代码结构混乱,或者草稿代码东拉西扯地分布在各处,你会因为大量的不确定性而备受煎熬。你无法确认你的每一部分都可以正确工作,进而你无法轻易地修改已有代码。你无法准确定位你代码的问题,甚至,你根本就无法判断你的代码是否有问题。在这样的浮沙之上,越多的工作付出意味着越多的心理压力。你完全无法知晓这堆东西会在哪一个时刻突然爆炸化为泡影。这样的工作状态,只会让你倍感沮丧,毫无成就感。

再往后,有了这样的成熟度和无时无刻的良好设计,你会更有耐心去做一些看起来容易实则很模糊的事情。因为你知道,这些模糊的东西会逐步成为后续工作的根基。而模糊性意味着不可控的定时炸弹。你要做的事情,就是把模糊的不确定转化为清晰直观的确定,让关于“正确/错误”的判断一目了然。

例如,你想要修改一个数据的计算方式,很可能只是修改一行代码的工作量,没什么了不起。但随着工程度的成熟,你会逐步意识到这很可能是一个陷阱。往往,修改完这行代码后你根本无法在本地确认这个修改的作用会是什么。一个不得不抗拒的诱惑是:直接扔到生产环境看看是否有问题不就行了吗?

这里其实混杂了两个问题,第一个是“表面上的微小工作量”,第二个是“容易忽略的模糊”。在第二点中,其实已经有了坏代码的味道,即:你没办法很容易地判断你修改后的代码是否正确。这就意味着你的代码其实存在更深层次的问题,即它的结构不是足够清晰。

什么叫代码结构足够清晰呢?图领奖得主Tony Hoare的一段话是最好的说明:

One way is to make it so simple that there are obviously no deficiencies. And the other way is to make it so complicated that there are no obvious deficiencies.

清晰的代码结构,意味着你能够一眼看出来,这“显然”没有问题。也就是,“清晰”意味着你的结构能够让所有的bug更容易地暴露在阳光之下,没有可以藏身的“孔隙”。为什么可以有藏身的“孔隙”?无非是你设计出的结构和逻辑足够复杂、曲径通幽,这些“曲折”之处便是藏身之所。

所以,当你无法确认修改后的代码是否正确时,这已经说明了你的结构可能已经复杂到超过了一个阈值,以至于你连最根本、最重要的正确和错误都看不见了。

当然,随着项目的复杂,这种代码藏身的“孔隙”,不仅来自于业务代码结构的复杂,更会是来自于与中间件(middleware)交互的复杂。很可能你的无法判断,就源自于你没办法很容易地修改与中间件交互的配置项,以至于你无法自由地切换remote和本地的测试环境。于是只好寄希望于扔到remote端看效果。

正确的做法并不是对上述过程做妥协,而是重新设计自己与中间件的交互配置。无法修改配置项,大多源自于你的代码中有太多关于middleware的magic value。它们不是引用一个统一的配置项,而是分散在各地。另一点是,你的代码与中间件的交互逻辑很可能无法随着配置值的改变而自动更新。这就造成了环境切换的困难,进而构建了代码bug的藏身所。而你要做的,无非就是把这个藏身所给拆掉,让一切都可以轻易地暴露在阳光之下。这就需要你提供更为优雅的设计让交互流程可以自适应于配置项。

“阳光是最好的防腐剂,公开是最好的监督”。

这不仅是关于politics的设计,也是代码设计的规范标准。不要寄希望于自己的才智,而是要寄希望于结构所体现的体制。当你的代码结构在不断地鼓励阳光、鼓励公开,让一切变得直观清晰、让一切都更容易地暴露在阳光之下时,你的代码自然可以清新脱俗、亘古绵长。


近期回顾

自己才是那个最软的柿子
海盗出海
选择正确的问题去解决


如果你喜欢我的文章或分享,请长按下面的二维码关注我的微信公众号,谢谢!


更多信息交流和观点分享,可加入知识星球:

https://press.one/file/v?s=d10ff59e6cebcfed504636611a933720046de1146394905932a5944ebe1d7901025722a9f9d1ecabbdb77a0b78ffb123b18ae0cf27895e665a8c2060a31739b70&h=5e8be6fb8859d7da05ea6def31231825f67d46d480e42b5b1fa8d8465b99bef8&a=e37dc7ad240ce4bfcd9cb80ee7e8715b85fd5fbb&f=P1&v=3

发表评论