【外评】我们应该将编程法则视作谚语
我相信,只要简单地理解我们所有的编程法则都应被理解为谚语而非定律,我们围绕软件开发实践所发生的许多争论都可以避免。
如果你了解谚语,那么你就会知道,每一句谚语都有一个相同和相反的谚语。
因此,这意味着说 “DRY”(不要重复自己)和 “WET”(一切都要写两遍)都没有问题。
这意味着,我们可以引用 Knuth 的名言 “过早优化是万恶之源”,同时也可以相信 “性能是一种特性”。
我们可以理解并应用 “关注点分离”,同时也能看到行为局部性的价值。
YAGNI 有它的用武之地,YAGNI 也有它的禁忌之处。
以上都不涉及逻辑矛盾。谚语用精炼的语句概括了一点智慧,但你仍然需要学会正确运用这些智慧。
好的谚语还应该让你思考。在你跃跃欲试去做一件可能会坏事的事情之前,它们会让你放慢脚步,或者帮助你反思哪些地方出了问题。
箴言 26:4-5 中的一对圣经谚语很好地说明了这两点:
4 不要按照愚人的愚蠢回答他、
否则你自己也会像他一样。
5 愚昧人的愚昧,你要照着他的愚昧回答他、
否则他在自己眼中就聪明了。
第一步是你应该思考:在这种情况下值得争论吗?
第二步,当你与一个人有过多次失败的互动时,你应该想:还值得与他争论吗?如果对方是个傻瓜,那你就赢不了。
第三步是当你这样想的时候:我发现从来没有人和我争论过很长时间。这是因为我总是对的,还是因为我是一个不愿意输掉争论的傻瓜?
因此,在编程时,你不应该只是从相互矛盾的谚语中选择适合你想做的事,你应该意识到自己可能会做傻事,并在继续之前进行反思。
如果你似乎要违背积累的智慧,你就需要思考这句谚语的出处,以及忽视它的后果。
例如,对于 “DRY”,你需要明白它并不是指重复或枯燥的代码,而是指将相同的知识嵌入到系统的多个地方,以及当你要改变某些东西时,这将是一个怎样的问题。而 “WET “则是指不成熟的抽象比重复的代价更高。
一旦你静下心来思考,你就能找出哪种方法适用于你的情况,以及如果你选择忽略这句谚语,你能做些什么来减轻可能遇到的困难–换句话说,你可以运用切斯特顿的栅栏(Chesterton’s Fence.)。
本文文字及图片出自 Programming mantras are proverbs
你也许感兴趣的:
- 【外评】15 年前我给自己的一系列编程建议
- 【外评】软件复杂性的三大法则(或:为什么软件工程师总是脾气暴躁)
- 【外评】我对 The Clean Coder 的看法
- 【外评】我为什么编程
- 【译文】40 亿条 if 语句
- 现在开始,把代码里的 else 丢掉!
- 程序员提交 PR 的理想长度是多少?有人答:50 行代码!
- 别再说 “技术债” 了!
- 经历多次重写,苹果平台最强科学计算器PCalc背后的故事
- 世界级编程大师Bob 大叔为“干净代码”辩护遭质疑:时代变了,别用Clean Code那套要求我们了!
你对本文的反应是: