V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
BrightLiao
V2EX  ›  程序员

好代码的五个特质 - CUPID

  •  
  •   BrightLiao ·
    gmlove · 2022-08-02 15:06:41 +08:00 · 2565 次点击
    这是一个创建于 880 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 之外,我们有了新的评判代码好坏的参考了! 欢迎大家评论!

    9 条回复    2022-08-04 12:15:13 +08:00
    horizon
        1
    horizon  
       2022-08-02 15:33:03 +08:00
    TDD 可以用于帮助我们更多的用领域语言编写代码
    应该是 DDD ?
    encro
        2
    encro  
       2022-08-02 15:41:55 +08:00   ❤️ 1
    def get_todos(todos, users):

    看到这个就不想看了,函数名不表意,里面写再好也是白搭。
    zhuangzhuang1988
        3
    zhuangzhuang1988  
       2022-08-02 15:59:34 +08:00
    看了下 以为是 CPUID 开源了。
    shawndev
        4
    shawndev  
       2022-08-02 17:25:59 +08:00
    @zhuangzhuang1988 哈哈哈,一样
    FrankHB
        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 碰瓷?
    encro
        6
    encro  
       2022-08-03 10:05:16 +08:00
    @FrankHB

    unix 哲学还是当 solid 里面的 s 理解就行,别想太多。。。。哈哈
    tairan2006
        7
    tairan2006  
       2022-08-03 16:07:50 +08:00
    软件行业最佳实践只有一条:没有银弹
    BrightLiao
        8
    BrightLiao  
    OP
       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
        9
    BrightLiao  
    OP
       2022-08-04 12:15:13 +08:00
    @FrankHB
    哈哈,淡定。

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

    当然,Unix 哲学好不好这个对个人来说可能比较主观,但是纵观现在的软件行业,Unix 使用如此之广泛,这还是能反映主流是认同的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 09:00 · PVG 17:00 · LAX 01:00 · JFK 04:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.