好代码的五个特质 - CUPID

2022-08-02 15:06:41 +08:00
 BrightLiao

Thoughtworks 新的一期技术雷达如期发布,仔细阅读了这一期的所有条目,CUPID 这一条尤其让我产生共鸣。

CUPID 出自 Daniel 的一篇名为《 CUPID—for joyful coding 》的博文,即《 CUPID - 为了快乐编程》。CUPID 是 Composable/Unix philosophy/Predictable/Idiomatic/Domain based 几个单词的缩写,有经验的同学一看就知道这是好代码的一些属性。知道 Cupid 这个单词的同学还能感受到这一组属性所蕴含的对于软件工程的热情。Cupid 的中文是丘比特,是指古罗马的爱神,其意象是一个长有翅膀的小孩,拿着弓箭射向人们,以便人们可以相互爱上对方。

...好的代码会给人一种非常愉悦的感觉。你可以轻松找到需要修改的地方,而且,那个地方的代码是如此的易于理解,以至于一眼就能看出来代码在干什么。你可以很自信的完成修改...

我结合了原文与自己的理解,整理成了一篇博客: https://brightliao.com/2022/05/24/5-properties-of-good-code-cupid/

除 SOLID 之外,我们有了新的评判代码好坏的参考了! 欢迎大家评论!

2408 次点击
所在节点    程序员
9 条回复
horizon
2022-08-02 15:33:03 +08:00
TDD 可以用于帮助我们更多的用领域语言编写代码
应该是 DDD ?
encro
2022-08-02 15:41:55 +08:00
def get_todos(todos, users):

看到这个就不想看了,函数名不表意,里面写再好也是白搭。
zhuangzhuang1988
2022-08-02 15:59:34 +08:00
看了下 以为是 CPUID 开源了。
shawndev
2022-08-02 17:25:59 +08:00
@zhuangzhuang1988 哈哈哈,一样
FrankHB
2022-08-03 04:32:49 +08:00
看到 U 就不用看了。UNIX 哲学本来就一大滩糊涂账,能直接整个拎过来当锤子抡的直接盲猜没理解什么 UNIX 哲学的外延——果然不会冤枉。
所谓一个程序做一件事不就是 SRP ?而一坨命令行参数什么时候成了正面示范了?不就是你 shell 语言弱鸡才让程序自己 parse 命令行参数?而这正好不就是混淆 shell 和 shell 应用的 SRP 的反面教材?真扯 purpose ,你能先整个允许把 purpose 定义为程序实体作为 first-class object 传的像样的语言代替 shell 再吹好不?
UNIX 还有一坨 everthing is a file 和 file 内容默认一坨文本的垃圾习惯。比如你写代码要按照那坨文本厨二排除 BOM 那实际上就是故意 type unsafety 双标搞事。幸亏原作者的脑洞这里还不够大教坏小朋友。
UNIX 哲学还包括信任程序员,该 UB 时就 UB ,这直接和“与期望一致的行为”矛盾。目的论上,被 WG21 的 narrowing contract considered harmful 之类的教条吊打。
DDD 该用的地方基本就是 D 出来应付外行;其它情形就是拖延简化问题的义务,让自己装作外行,这经常根本就是反模式——譬如说,增加一大坨不 man 就别想清楚干啥、又跟其它命令不通用的 domain-specific “专业”命令行选项。没有对滥用打预防针就是失败的,joyful 那是想多了。

SOLID 虽然日用混沌到像空话,至少 LSP 之类还是有坚实的理论基础的。就这点漏洞百出的理解,这坨 joyful 何德何能跟 SOLID 碰瓷?
encro
2022-08-03 10:05:16 +08:00
@FrankHB

unix 哲学还是当 solid 里面的 s 理解就行,别想太多。。。。哈哈
tairan2006
2022-08-03 16:07:50 +08:00
软件行业最佳实践只有一条:没有银弹
BrightLiao
2022-08-04 12:00:33 +08:00
@horizon
文中说的确实是 TDD 。TDD 可以帮助我们用领域语言写代码和定义接口。这一点其实与 DDD 提倡的大声的建模的思想是完全一致的。文中的示例也可以印证这一点。

更多内容可以看我的其他关于对 TDD 的理解的分享:
- 从改善设计的角度理解 TDD: https://brightliao.com/2019/07/20/tdd-for-improving-design/
- 从改善设计的角度理解 TDD (2): https://brightliao.com/2019/08/18/tdd-for-improving-design-2/
BrightLiao
2022-08-04 12:15:13 +08:00
@FrankHB
哈哈,淡定。

正如文中所说:
“ CUPID 中的 Unix 哲学主要指其最重要的一个观点:一个程序应该做一件事,并将其做好。
“ CUPID 就是从特质的角度来定义的,它尝试用一组助记词来指示好代码所具备的一组特质,并希望这组特质是最重要的特质。

当然,Unix 哲学好不好这个对个人来说可能比较主观,但是纵观现在的软件行业,Unix 使用如此之广泛,这还是能反映主流是认同的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/870226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX