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

好代码的五个特质 - CUPID

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

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

    CUPID 出自 Daniel 的一篇名为《 CUPIDfor 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     Solana     889 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:49 PVG 06:49 LAX 15:49 JFK 18:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86