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 之外,我们有了新的评判代码好坏的参考了! 欢迎大家评论!
1
horizon 2022-08-02 15:33:03 +08:00
TDD 可以用于帮助我们更多的用领域语言编写代码
应该是 DDD ? |
2
encro 2022-08-02 15:41:55 +08:00 1
def get_todos(todos, users):
看到这个就不想看了,函数名不表意,里面写再好也是白搭。 |
3
zhuangzhuang1988 2022-08-02 15:59:34 +08:00
看了下 以为是 CPUID 开源了。
|
4
shawndev 2022-08-02 17:25:59 +08:00
@zhuangzhuang1988 哈哈哈,一样
|
5
FrankHB 2022-08-03 04:32:49 +08:00 1
看到 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 碰瓷? |
7
tairan2006 2022-08-03 16:07:50 +08:00
软件行业最佳实践只有一条:没有银弹
|
8
BrightLiao OP @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/ |
9
BrightLiao OP @FrankHB
哈哈,淡定。 正如文中所说: “ CUPID 中的 Unix 哲学主要指其最重要的一个观点:一个程序应该做一件事,并将其做好。 “ CUPID 就是从特质的角度来定义的,它尝试用一组助记词来指示好代码所具备的一组特质,并希望这组特质是最重要的特质。 当然,Unix 哲学好不好这个对个人来说可能比较主观,但是纵观现在的软件行业,Unix 使用如此之广泛,这还是能反映主流是认同的。 |