写程序,到底把代码写复杂一点好,还是写简单一点好? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回技术问题时复制粘贴 AI 生成的内容
tool2d
V2EX    程序员

写程序,到底把代码写复杂一点好,还是写简单一点好?

  •  
  •   tool2d 2022-10-24 12:43:10 +08:00 4671 次点击
    这是一个创建于 1165 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个项目写久了,内部逻辑必然会变复杂。

    而大部分码农最讨厌的一件事,就是继承别人的项目进行二次开发。

    所以除非继承代码是非常简单的,否则宁可弃用,完全自己从头写。

    有时候我在思考,太过复杂的项目,最后是不是没谁愿意接手维护啊?只要能正常运行,保证不挂就行了。
    31 条回复    2022-10-26 17:20:41 +08:00
    westoy
        1
    westoy  
       2022-10-24 12:53:25 +08:00
    所以行业最佳实践就包括了小 bug won't fix 以及只要程序能跑就不要动它啊

    都不要说别人写的, 我自己写的, 业务复杂的, 隔了几个月没碰过的, 我都不会想再碰的
    tool2d
        2
    tool2d  
    OP
       2022-10-24 12:58:59 +08:00
    @westoy 那就很矛盾啊,自己写的代码都不愿意去碰,是不是从开始,就不应该写大而全的项目?

    也许应该学 npm ,项目分成无数个小包,小模块,再组合在一起,代码才有生命力。
    msg7086
        3
    msg7086  
       2022-10-24 13:00:51 +08:00
    应用最佳实践,合理拆分结构,加入适当的测试覆盖,写一些注释。
    现在让我拿起我十五年前写的代码都不至于不想去碰。
    edis0n0
        4
    edis0n0  
       2022-10-24 13:04:13 +08:00
    没谁愿意接手维护 公司就不敢随意开除你
    mxT52CRuqR6o5
        5
    mxT52CRuqR6o5  
       2022-10-24 13:04:22 +08:00   2
    我觉得和复杂简单没啥关系,关键要看代码怎么组织的,有些情况下可能就是简单不下来,但组织的好的话,可以把复杂难懂的东西局限在文件、函数内,不让复杂度难懂性扩散,不影响整体的可读可维护性
    aecra1
        6
    aecra1  
       2022-10-24 13:07:44 +08:00 via Android
    复杂度不会消失只会转移
    qiumaoyuan
        7
    qiumaoyuan  
       2022-10-24 13:08:22 +08:00
    你可能搞混了两个概念,业务逻辑的复杂度跟代码结构的复杂度是两回事。
    kop1989smurf
        8
    kop1989smurf  
       2022-10-24 13:10:11 +08:00   3
    大而全 ≠ 复杂 ≠ 耦合度爆表

    首先,代码腐败是一定的。因为需求的变化,总会突破既有逻辑架构的限制。
    团队下代码的结构设计统一就非常重要。优良的代码结构+高可读性,能够最大限度的降低代码腐败的速度。

    其次,代码腐败是个“度”的问题,不是“是否”问题。
    很多年头很长的项目,最终归宿都是彻底重制。而不是兼容性更新。

    最后,“代码的生命力”,其实是一个不可控的伪命题。
    因为最终的代码产出受非常多外力的作用。
    比如开发的个人能力是否足以胜任、比如人力是否充沛,比如工期是否宽裕、比如需求调研是否明确、比如实现团队在整个项目中的地位(决定了需求的解决是否倾向于更好的技术方案)等等。
    qiumaoyuan
        9
    qiumaoyuan  
       2022-10-24 13:11:02 +08:00   1
    之前写过点东西,欢迎讨论: https://www.zhihu.com/question/31049510/answer/115281860
    ration
        10
    ration  
       2022-10-24 13:11:26 +08:00 via Android
    kiss
    kop1989smurf
        11
    kop1989smurf  
       2022-10-24 13:12:13 +08:00
    btw:楼主总喜好把一件事的某个片面现象,不加以作证和抽象,就假定为通解进行讨论,这并不是一个良好的习惯。
    tool2d
        12
    tool2d  
    OP
       2022-10-24 13:18:13 +08:00
    @aecra1 “复杂度不会消失只会转移”, 可以采用低纬度转向高维度的方法,把代码细节都隐藏起来。

    比如你用汇编写程序,细节就特别多。而用高级语言实现相同的业务,由于细节都被编译器隐藏了,代码就非常简洁明了。
    tool2d
        13
    tool2d  
    OP
       2022-10-24 13:22:45 +08:00
    @kop1989smurf “最后,“代码的生命力”,其实是一个不可控的伪命题。”

    你自己写的代码一般都是可控的,所谓不可控都是给自己找的理由。比如工期短,压力大,水平菜。

    每到一个 milestore 后,把这几个月的写的代码回顾规整一下,部分重构,总是能焕发青春,让代码生命力更久。
    tool2d
        14
    tool2d  
    OP
       2022-10-24 13:43:15 +08:00
    JSX 能把语境抽象,真实的执行代码远不如看到的如此简单,又长又复杂。

    但我发现一个很奇怪的现象,只有极少一部分人,会对自己写的语境进行抽象。

    而恰恰只有这种抽象,才能缓解复杂度根本问题。

    VUE 那么火,其中一部分原因,也归功于他自创了新语法,缩短了总代码量。代码量才是“复杂”最根本的因素。
    QKgf555H87Fp0cth
        15
    QKgf555H87Fp0cth  
       2022-10-24 14:06:41 +08:00
    React 建议把东西都放在一起,HTML CSS JS ,这样单元可以非常细小。
    xianyv
        16
    xianyv  
       2022-10-24 14:12:57 +08:00
    工期紧张的要死的时候,顺着往下写吧,管他复杂还是简单呢,后面能不能看懂都不知道了
    fiypig
        17
    fiypig  
       2022-10-24 14:15:40 +08:00
    如果从 0 开始开发,我会规范一点,如果二次开发,我就管他的蛇皮代码,就是往下撸就对了
    exonuclease
        18
    exonuclease  
       2022-10-24 14:41:54 +08:00
    大公司都会遇到这种问题 上古代码扔不掉 服务太多依赖关系太复杂什么的 没什么好办法 一点点拆分和重写吧 当初定义的接口比较清晰的话就比较好弄 要是一堆黑魔法那就自求多福。。。
    tianyou666shen
        19
    tianyou666shen  
       2022-10-24 14:50:06 +08:00
    希望能写的越简单越好 不过有时候能力所限 复杂的业务写出来就会很复杂 木有办法咯
    Leviathann
        20
    Leviathann  
       2022-10-24 15:21:58 +08:00
    和业务同构
    pein
        21
    pein  
       2022-10-24 15:39:18 +08:00
    从软件工程角度:隐藏复杂实现部分,运用设计模式,模块化解耦,逻辑清晰越容易看懂越好
    从自身利益角度:能看懂的人越少越好,比如使用 C++模版再混合多种语言,增加不可替代性,否则随便招个新人就把你给优化了
    zyxk
        22
    zyxk  
       2022-10-24 23:20:32 +08:00
    我总是想尽可能的简单, 总感觉 复杂一点, 程序就会运行很慢的感觉, 你们有这样吗?
    jones2000
        23
    jones2000  
       2022-10-25 01:34:17 +08:00
    写程序是用来解决问题的, 就算代码再复杂,能解决问题, 给公司或客户带来高额的收益,基本这个团队里的人就很少流动,你想进去都难。
    xqk111
        24
    xqk111  
       2022-10-25 08:58:29 +08:00
    代码越简单越好
    zjj19950716
        25
    zjj19950716  
       2022-10-25 10:04:03 +08:00
    大道至简,no code no bug
    wangtian2020
        26
    wangtian2020  
       2022-10-25 11:19:36 +08:00
    我前端能用 Array map filter 扩展运算符 可选链 一条龙一行解决的逻辑绝不拆开写
    目标就是削减代码总行数,短小精悍绝不废话
    能用箭头函数绝不多写一个“function”
    llsquaer
        27
    llsquaer  
       2022-10-25 13:17:03 +08:00
    写了一段时间的 python 发现项目写大了..能用函数解决的就用函数,别想当然的再去搞一个 class 类..麻烦
    AnroZ
        28
    AnroZ  
       2022-10-25 13:29:48 +08:00
    给公司写的代码是用来(自己或他人)维护的,写简单点为佳。这里说的简单指 code 写得要通俗易读,而非功能简单。可以为一些性能放弃复杂语义写法。
    luvxy
        29
    luvxy  
       2022-10-25 14:01:28 +08:00
    写复杂点对自己好 写简单对别人好
    shellus
        30
    shellus  
       2022-10-25 15:12:30 +08:00   1
    其实楼主这是很多个问题

    1:写程序,到底把代码写复杂一点好,还是写简单一点好?
    答案是肯定和绝对的:简单好,类比其他东西你就会明白了,例如科学研究,例如写文章,都是在试图将复杂的和困难的东西简单化,找出其最短路径,那就是成功,例如老师将复杂的道理浅显的讲给学生听,那就是一个好老师,例如将一些玄学的,自古以来没人能解释的清楚的现象用实验的方式重现并归纳其原理,那就是一个好的科学家。同样的,如果你将一个复杂的系统,用浅显易懂的代码实现了,那么你也会是一个好的程序员。


    2:一个项目写久了,内部逻辑必然会变复杂。
    大多数情况是这样的,为什么会写久了?因为业务逻辑不断变化,增加。所以对应的代码越来越多。
    当然也有例外情况,例如 windows 的扫雷游戏,因为它的业务逻辑不会变化,如果你一直写它的代码,那么就不是对代码做加法,而是优化,优化必然会让代码变得更加可读。

    3:而大部分码农最讨厌的一件事,就是继承别人的项目进行二次开发。所以除非继承代码是非常简单的,否则宁可弃用,完全自己从头写。
    通常情况下是这样的,因为我们都不是神仙,都要吃饭拉屎,我为了吃饭而在公司拉的屎山,现在要你来清理的话,没有人会高兴得起来。
    但是换个角度来看,其实大多数人都喜欢继承别人的代码来进行开发,例如什么呢?例如各种编程语言,各种开发框架,继承他们的代码来进行开发,我们往往不知不觉,享受其中,确忽略了这本质上也是在基于他们的代码进行后续开发,为什么就没有感到不开心,反而非常乐意呢?如果想明白了这个问题,我想你的继任者也会很高兴接手你的代码。


    4:有时候我在思考,太过复杂的项目,最后是不是没谁愿意接手维护啊?只要能正常运行,保证不挂就行了。
    是的,没有人想铲翻屎山,除非你想沾一身屎。
    除非你有非常棒的项目管理能力,一边完成新任务,一边规划吃力不讨好容易导致业务故障的优化,但是绝大多数情况,这么优秀的人才,一般不会去接手屎山项目。
    大多数普通人,还是继续吃饭和拉屎,写新需求,拿工资,往摇摇欲坠的项目中添加更多难以维护的代码。


    引用一段笑话:
    "每一个程序员在他的职业生涯中某一天都会突然获得开示,这种开示在通常某一个夜晚悄然降临,有时是以图灵本人托梦的形式出现。这一开示的主要内容如下:程序员是真正理解思维和逻辑真谛的人。非程序员是被蒙蔽的无知者。每一个程序员对于世界上其他程序员有着不可推卸的责任。每一个程序员都必须尽力维护程序员这一高贵种族的延续,并保证世界的命运控制在程序员手中,既不被无知者淹没,也不被机器智能取代。完成这一使命的唯一方式,是保证稳定地出产低质量,难以理解,修改和维护的代码。每一个负责任的程序员,他每一年的产出,必须为另外三个程序员制造一年的就业机会。唯此,程序员一族可生生不息,整个 IT 行业欣欣向荣。图灵大神在冥冥中微笑,他的纸带机将嗒嗒作响,直至永恒。"
    anonymous2351d00
        31
    anonymous2351d00  
       2022-10-26 17:20:41 +08:00
    简单的代码做复杂的事儿最好
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2560 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 13:49 PVG 21:49 LAX 05:49 JFK 08: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