Clean Code有感

记录 · 2022-12-05

今天在v2ex上看到一篇文章名为 [写了一篇关于整洁代码的文章] 博主将Bob大叔的Claen Code演讲视频纸做成了中文文章。到现在还在翻译编写中。

看这篇文章的一些内容让我很有感触。以下来自摘抄博主的原文中的两小段:


好的代码质量很重要, 原因有很多, 举个例子, 为什么我们开发的这么慢? 为什么我们的程序员这么慢? 这里有一个未开发的项目, 一行代码都没有的项目, 你们能做多快? 在没有代码的最初几天, 有人来找你, 说要你完成一个功能, 你认为可以, 你开始编写代码, 代码从你身体的每个毛孔中涌出, 功能完成后每个人都惊叹不已, 你的工作速度很快, 只花了几天时间, 因为我们是程序员啊.

你能再做一次吗? 你觉得可以. 于是一年后回到那个团队, 有人问你能再做一个新功能吗? 你说, 嗯..., 有点棘手, 可能要花我们六个月的时间, 尽管那是曾经几天就可以做出来的. 你说你们知不知道这个系统已经变得有多么混乱, 即使我们碰一行代码, 地狱就会到来! 为什么会发生这些事? 这就是现在的软件团队正在发生的事情.

这一段简直感同身受, 我们都喜欢写新项目, 新模块, 新功能, 甚至有时会有意无意的无视系统中已经存在的部分, 强行写一个新的模块出来. 就是因为全新的东西是整洁的, 确实, 因为啥都没有, 可以尽情发挥. 但是一旦轮到修改老系统老代码就蔫了, 碰都不想碰一下, 问要多长时间改完, 完全不知道, 因为连看一眼都觉得够了.


当你决定向团队中添加新人时会发生什么? 团队会变慢, 因为前几个月新人会持续吸取老员工的生命. 现在你只能寄希望于那些新人会在一段时间后变得聪明一些, 同时生产力会提高. 但是还有一个问题, 是谁在培训新人? 那些老人, 一开始就把事情搞得一团糟的人? 事实上, 不是老人在训练新人, 而是老代码在训练新人. 新人被扔进火里, 他们必须从这个系统中理解一些东西, 他们阅读老代码, 他们对自己说, 哦, 我来看看这里的这些功能是如何完成的, 他们当然会效仿它, 然后当然问题依然会变得越来越糟, 无论你向团队中添加多少人, 代码都会变得越来越混乱. 你所做的任何事情都无法提高生产力. 这一段也完全同意, 确实是老代码在训练人, 新来的人必定会有意无意的参照老代码, 不知不觉中, 屎山的规模就变得更大了

这就是为什么程序员变得很慢很慢, 因为他们在制造混乱, 如果他们不弄乱的话, 他们就会变得很快. 如果你能保持代码整洁, 它就不会混乱, 你就可以在一个合理的时间内添加新功能. 只要你能继续保持代码整洁干净有序, 就不会有问题.

我们有一些策略可以去保持整洁, 但是在此之前, 我想彻底地让你记住这一点, 我们速度变慢是因为我们制造混乱, 为什么我们制造混乱? 是什么驱使我们在最开始制造混乱? 因为我们认为我必须要更快速完成, 他们正期待我完成很多事情, 我必须做到它, 必须完成它, 直到突然它成功工作了, 就结束了. 现在你们中的有多少是这样做的?

让代码工作确实很难, 你努力挣扎着想让它工作, 你正在尝试一些方法, 使用调试器, 单步跟踪, 只想让它工作. 然后突然, 它工作了, 你不敢呼吸, 小心移动, 然后提交代码. 哦上帝, 这是错误的做法, 因为让代码可以工作只是你的工作的一半, 此时正是需要你去清理代码的时候.

没有人可以一开始就编写整洁的代码, 没有人这样做, 因为让代码工作太难了, 所以一旦代码运行, 它将变得一团糟. 人类不是简单的直线思维, 他们不会在if语句和while循环中思考, 他们无法预见整个算法, 我们把东西拼凑在一起, 用电线和胶带把它拼凑在一起, 然后它突然就工作了, 我们也不知道为什么. 此时就是你要说, 好吧, 现在我需要清理它的时候了. 你需要投入多少时间来清理它? 这应与你编写它所花费的时间大致相同. 这就是问题所在了, 没有人愿意付出这些努力, 因为他们认为代码能运行就完成了. 不, 你没有完成如果代码仅仅只是可以工作, 当代码变得正确, 才是真正的完成(You're not done when it works, you're done when it's right).

如果你很好地采取这种态度, 那么代码将保持整洁, 并且你永远不会慢下来.

这一小节我觉得是全篇精髓所在, 因为确实只是写出可以运行的代码已经很难了, 再把它们重新整理, 重新组织, 全局规划, 提供扩展, 保持质量, 有太多的优化整理需要去做, 可能需要再花费一倍的时间都不止, 更何况这些技能也同样需要钻研和练习. 但是这不就是我们作为程序员的价值所在吗? 当然, 出于现实压力, 我们也可以妥协, 但是要牢记那只是一个妥协, 是暂时的, 不能就此放手, 一旦有机会还是要坚持去做的.


原文章:Coding Better World Together - Lesson 1 · 语雀 (yuque.com)

这两段话很有感触。就是我目前的状况。实习三个月期间内。公司内的项目都是开源项目来二开甚至是三开。我们只能学习写好的代码。函数/接口/类。去熟悉项目原本的写法,看他们是怎么写的,然后模仿来写。完全就没有属于自己的想法。都是按班就部的copy copy copy。可能这才是我觉得程序员开发中最无聊且枯燥的生活。曾几何时。我已经对编程没有兴趣了。找不回当初学习时的快乐。那种自己学写代码。实现功能的快乐。今天看到这两段话之后,我才发现。原来不是不喜欢编程了。而是我在编程中写代码的思维已经被禁锢在一个范围内中了。没有办法跳脱出这个范围。这才会导致我变得对写代码很抗拒。没有以前那么的喜欢和好学。以至于开始逃避,不想写代码。看到代码就反胃的状态。