易于修改原则
这个月来,我已经在从事《程序员修炼之道》第二版的翻译。到现在已经超过十万字,几乎是全书的一半了。
很难很累。翻译和阅读是两码事,就算自己理解了,想说清楚也是很难的。何况有些句子理解起来摸棱两可,想理解透彻也不是那么容易的事。毕竟是别人的思想,凡思想都非真理,没有太多对错可言,翻译者只求能准确表达。
不过越是深入,越是觉得自己在做一件伟大的事。这本书一如二十年前的那一版一样,字字珠玑。能给无数程序员引路。有些道理过去讲得不甚透彻的,经过数十年的历练,作者看得更通透了。
比如,有一条过去没有提及的原则,在这一版中放在了重中之重的位置。那就是:ETC 原则,Easier To Change ,易于修改。
我当然明白,易于修改非常重要。但从未想过,它可以是一切原则的基石。
在上一版中,作者言必提 DRY 原则,Don't Repeat Yourself ,不要重复。我觉得说得还不够好,我自己更喜欢 Unix 编程艺术中的提法 SPOT :Single Point Of Truth ,唯一真理。但这次,DRY 被放在了一个次要的位置,和本书提出的其他原则一起,围绕着一个更基本的原则谈起。为什么不能重复?为什么真理只应写在一个地方?
因为,我们所作的一切,都是为了更容易修改。
当真理只存在一个地方,那么在需要修改它的时候,就只需要改动一处,更容易修改了。
为什么需要解耦模块。因为耦合在一起的模块很难修改。在修改时,要么你要花时间搞清楚关联之处都在哪些地方;要么你不去搞清楚,只改一处,结果出了问题,再花时间弄明白问题出在哪里,有什么牵连之处忘记了。解耦之后,可以放心的只修改一处就够了,更容易修改。
为什么我们要给函数名,变量名取个好名字。取名为什么是很重要的事?因为好的名字方便阅读,而修改的前提就是阅读。好的名字让修改更容易。
……
说到取名,在翻译每章时,我会在作者篇头引用的名言翻译上颇费一番功夫。仔细查找出处,推敲为什么本章要引用这句话。许多句子我过去从没了解过,搜索下去会被原著所吸引。
前天翻到作者引用《地海传奇》中的一句话,"To light a candle is to cast a shadow" ,我引用了蔡美玲的译文 “点亮一盏烛光,便投出一道阴影。” ,编辑说 点亮 ... 烛光 有点语法问题,建议改成 烛火。我在推敲之余,对书产生了兴趣,在 kindle 上买了一套。结果读了两页就停不下来。周末一口气读完了前三本。
名字为什么重要?《地海传奇》能给我们答案 :)
Comments
哈哈,一定要尽快出,不然我怕自己转行了,看不到这本书了
Posted by: EOS. | (18) December 25, 2019 11:45 AM
单元测试接口测试集成测试还是真做才有效,做自动化测试是为了放心地修改/重构,越是核心代码越是如此
Posted by: olive | (17) December 21, 2019 09:51 AM
你还是得易于修改
Posted by: olive | (16) December 21, 2019 08:37 AM
最近设计很多插件系统,对楼下所说,“对修改封闭,对扩展开放”,有深深的体会,扩展系统是很困难的代码,内部高度耦合抽象,这块实际很难改,也不打算有多少人维护,
相当于把修改和维护性从系统降级到了扩展,
我相信操作系统之类开发更重视初始设计,后面带来的被依赖其实让你没有多少机会修改,
当然在这有限的修改机会里,
Posted by: olive | (15) December 21, 2019 08:36 AM
一开始我在翻译 ETC 的时候,将 Change 翻译成 变更 。
但是针对文中一些上下文,会有 变更更容易 ,这样的说法,连续两个 更字读起来有些别扭。故而全部改为了修改。
今天想了一下,“修改”在中文语境下,的确比“变更”有更狭隘的语义。所以想恢复之前的译法。不过会根据上下文把 Change 翻译成 “变更”“改变”“变化”以及“修改”。
Posted by: Cloud | (14) December 9, 2019 08:07 PM
我认为 modify 是 change 的一种而已,ETC 说的是 易于 Change ,这是对 Change 的难易做出评价。
开闭原则的 闭 讲得是尽量不改,谈是要不要去做。
做不要去做,和做起来是否容易,是两个维度的事情。
类似的还有 tpp 后面一章谈到 test ,说我们要在 code 时刻思考 test ,但又说,其实有时 test 是不必的。这并不矛盾。test 带来的好处在思考怎么去 test 的时候就获得了,真的去做就是另一件事了。
所以写代码的过程保持写的东西容易修改,和尽量不要去改实现,并不相悖。
Posted by: Cloud | (13) December 9, 2019 06:20 PM
etc不是易于修改(modify)而是易于改变(change)吧。修改感觉有侧重于修改源码的意思,但这就违背开闭原则了吧。
Posted by: seekyao | (12) December 8, 2019 07:45 AM
推翻重做
Posted by: 前进轮胎 | (11) December 5, 2019 09:27 AM
期待出版~
Posted by: denglitong | (10) December 4, 2019 10:48 PM
这个『易于修改原则』是不是和面向对象的『开闭原则』有点矛盾?开闭原则讲究对扩展开放,对修改封闭。就算不用面向对象编程,前一句改成『对组合开放』,后一句『对修改封闭』还是应该保留的。
Posted by: 杨博 | (9) December 4, 2019 04:33 PM
编辑一定是学理的
Posted by: 胖胖 | (8) December 3, 2019 09:59 AM
领会一句话需要多少幸酸
Posted by: heibor | (7) December 3, 2019 09:26 AM
期待,等待 ⌛️。
Posted by: Wu | (6) December 2, 2019 04:21 PM
Easier To Change 棒棒哒
Posted by: 小无路 | (5) December 2, 2019 12:12 AM
大学时完全被第一版生动形象故事/理念吸引,当然更期待云风版的,难得!
Posted by: ThomasLau | (4) November 24, 2019 12:43 PM
期待早日完成。
Posted by: anders0913 | (3) November 23, 2019 08:59 PM
风哥自己什么时候出本书,不枉毕生经纶,留一传世之作。
Posted by: 申公豹 | (2) November 19, 2019 09:48 AM
看过第一版,期待一下第二版 :)
Posted by: 大头龙仔 | (1) November 18, 2019 08:43 AM