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

我们学最新的技术和概念,写优雅的代码和注释是为了什么?

  •  1
     
  •   kensoz · 2021-05-07 09:14:17 +08:00 · 5365 次点击
    这是一个创建于 1325 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们花时间学最新的库,最新的特性,写的时候代码优雅注释清晰,这是为了什么?

    写几个无脑的 for 循环,无脑的 if 判断就可以搞定上线,让老板赚钱。因为无论你用什么东西写最后的目的就是能用能上线就行,你写的再 nb 再高端,也不会升职加薪,老板也不懂,甚至因为看不懂你的奇淫巧计而批评你。

    而且有时学习新东西用新写法还会耽误自己的时间,自己的的 nb 代码,仅仅在写完的时候让自己爽了,其他人都不在乎,只在乎能用就行,其他的意义还有什么嘛。为了面试吗?如果下一家公司还是这样不就陷入了循环之中嘛。
    61 条回复    2021-05-08 17:19:05 +08:00
    xiaojun1994
        1
    xiaojun1994  
       2021-05-07 09:38:05 +08:00   ❤️ 3
    为了追究精神上的愉悦
    yunyuyuan
        2
    yunyuyuan  
       2021-05-07 09:47:10 +08:00
    在面向兴趣编程和面向薪资编程之间徘徊
    h1104350235
        3
    h1104350235  
       2021-05-07 09:52:49 +08:00
    不在工作中锻炼自己,如何进步?学习的目的肯定是要实战项目,不珍惜这个机会么?
    buzailianxi
        4
    buzailianxi  
       2021-05-07 09:53:28 +08:00
    forbreak
        5
    forbreak  
       2021-05-07 09:54:27 +08:00   ❤️ 4
    我觉得你说的有道理。
    zifangsky
        6
    zifangsky  
       2021-05-07 09:55:33 +08:00   ❤️ 1
    等你不得不接受离职同事的辣鸡代码(没有注释、大量复制粘贴、一个方法几百行等等),你顿时就会明白为啥要写得优雅了 😭
    phony2r
        7
    phony2r  
       2021-05-07 09:56:28 +08:00
    代码是给人读的, 不是给机器
    wr516516
        8
    wr516516  
       2021-05-07 10:24:17 +08:00   ❤️ 1
    @zifangsky 那不就是为了岗位的高可用性.公司希望你可以随时被替代.
    kensoz
        9
    kensoz  
    OP
       2021-05-07 10:26:15 +08:00
    @buzailianxi 单纯为了钱写写无脑代码交差就可以了,反而轻松愉快,因为代码质量也不和薪资挂钩。
    kensoz
        10
    kensoz  
    OP
       2021-05-07 10:30:26 +08:00
    @zifangsky 说实话,如果你一直负责这一块代码质量可以在一定条件下忽视,只要你知道他们是什么意思,如果你有离职打算,就更不必了,如果你绞尽脑汁代码优雅,注释清晰,自己辛苦不说,几乎没有意义。
    而且老哥你想一想,你接手了一个屎山,那不就正好说明了臭狗屎一样的东西都能赚钱嘛,那你为什么还要写高质量的代码费力不讨好呢?
    kensoz
        11
    kensoz  
    OP
       2021-05-07 10:31:31 +08:00
    @xiaojun1994 似乎只有这个意义了
    coderluan
        12
    coderluan  
       2021-05-07 10:33:00 +08:00
    "为了面试吗?如果下一家公司还是这样不就陷入了循环之中嘛。"

    楼主你这是充分必要条件没学好:

    "如果"不是"一定"啊, 你要确定自己会一直待在这种公司, 那确实没必要. 但是你希望去一家好的公司, 那么你就要重视代码质量, 否则你一定进不去, 这里的"一定"不是"可能".
    lostSoul
        13
    lostSoul  
       2021-05-07 10:38:15 +08:00   ❤️ 1
    我起初也是认为代码要优雅,通俗易懂,遇到复杂点的就用设计模式去解决,后来,工期比生产队的驴赶的时候,管你三七六十一,我直接就是 C+V if else if else if else..
    PiersSoCool
        14
    PiersSoCool  
       2021-05-07 10:43:35 +08:00
    新技术解决问题 => 提升生产效率 => 钱
    otakustay
        15
    otakustay  
       2021-05-07 11:10:09 +08:00   ❤️ 8
    人要取悦自己
    如果取悦你的是钱,那就随便写,保证不会被辞退、钱能赚到就行,不用管他什么质量什么优雅
    如果取悦你的是写代码的过程,那怎么写更开心你自然是知道的
    从团队角度来看,如果一个团队对代码质量有追求,那么在招人的时候自然有办法识别出用代码取悦自己的人,最后依然能相互匹配
    domodomo
        16
    domodomo  
       2021-05-07 11:15:22 +08:00
    当然是为了自己,不但可以提高水平,而且老板还付钱给你,还有这么好的事吗?

    自己要摆烂就不要问为什么老是在写 if else 了,因为机会来了你也抓不住。
    afewok
        17
    afewok  
       2021-05-07 11:31:12 +08:00   ❤️ 1
    为了体现,你与其他垃圾的不同。垃圾只能在垃圾堆里度日,而你可以拥有更多的选择。
    cominghome
        18
    cominghome  
       2021-05-07 11:56:22 +08:00
    “为了面试吗?如果下一家公司还是这样不就陷入了循环之中嘛”

    但你可以涨工资

    事实上,如果对现在到工作满意(待遇、晋升机会),也不用担心年纪大了被优化,确实可以不用那么卷
    levelworm
        19
    levelworm  
       2021-05-07 12:08:54 +08:00 via Android
    你不都说了吗?为了自己爽啊
    kkzxak47
        20
    kkzxak47  
       2021-05-07 12:52:39 +08:00 via Android
    当然是为了将来更好的摸鱼划水啦
    yvescheung
        21
    yvescheung  
       2021-05-07 12:59:02 +08:00
    学新技术和概念是为了不落后时代太久,写优雅的代码是为了更方便地 debug,注释是为了防止过段时间忘了这段代码的作用
    hxndg
        22
    hxndg  
       2021-05-07 13:12:09 +08:00   ❤️ 1
    @coderluan

    不要被 lz 的言论绕蒙了,这种言论就和婚姻就是长期的卖春一样的言论。
    而且如果单纯讲求语言的锋锐,那么所有的工程师都可以做屎一样
    msg7086
        23
    msg7086  
       2021-05-07 13:19:50 +08:00   ❤️ 1
    所以人以群分。
    如果一个公司里都是对代码质量有讲究的人,那你进去如果乱写,最后就会被开除。
    所以到最后,就会变成乱写的人窝在一家公司里,写得好的人窝在一家公司里。
    无脑 for if 的代码,等你扩张业务,更新换代的时候,天天 996 窝在办公室里,读别人写的没有注释的辣鸡代码,然后反复调试反复折腾,上线以后还要被客户和老板追着骂,你就知道写优雅的代码进严格的公司是为了什么了。
    buster
        24
    buster  
       2021-05-07 13:25:13 +08:00   ❤️ 1
    代码写得好,离职走得早。
    danhua
        25
    danhua  
       2021-05-07 13:29:22 +08:00
    @lostSoul 赞同,有时候时间太赶了。那还有功夫给你写优雅代码。
    jones2000
        26
    jones2000  
       2021-05-07 13:45:00 +08:00
    自己写的代码, 只要自己能维护,升级, 稳定就可以, 你爱怎么写就怎么写. 就怕自己写的代码, 过了半年以后连自己都看不懂. 当你自己的项目有 10W+代码以上的时候, 只要你能维护,增加新功能, 你不写注释都可以, 直接用 goto 都可以, 基本就没人去看了, 除了自己.
    ReferenceE
        27
    ReferenceE  
       2021-05-07 13:49:32 +08:00 via Android   ❤️ 2
    能问出这个问题的,都是为了钱多学的计算机吧?虽然这也挺正常,但人最起码有一丢丢精神追求吧?
    lagoon
        28
    lagoon  
       2021-05-07 14:08:19 +08:00
    学最新的技术和概念 ----> 有趣和不那么卷,另外提高效率更好摸鱼。
    写优雅的代码和注释 ----> 不好意思没写过。
    kensoz
        29
    kensoz  
    OP
       2021-05-07 14:10:17 +08:00   ❤️ 1
    各位老铁们感谢你们的回复。
    我看了所有的回复,很有感触,其实我也是对技术,优雅的代码有追求的,
    可是现实中自己追求的东西除了面试,在实际的开发中似乎用处的确不大,
    在随便写写,好好地写都一样的情况下,选择好好写完全就靠个人意志了,最近感觉有点累才发了这个主题。
    今后有条件还是会写出高质量的代码,只是会更功利一些。
    如果有学生朋友看到这个主题,还是希望你多学学技术,理解晦涩的概念,哪怕仅仅是为了面试。
    freakxx
        30
    freakxx  
       2021-05-07 14:18:24 +08:00
    你不得已吃屎的时候,要明白是在吃屎,而不能觉得是屎好吃,你很喜欢吃。

    新的用法,新的东西,如果是好的,那么他是节省你时间的,如果新的东西是为了炫技,那么他不是好的。
    好的和新的,应该是结合的,而不是分离的。


    但你假如不知道哪天可能要吃到自己做的狗屎的时候,还是用心做点可以吃的。
    假如人人都像你这么喜欢做狗屎的事,你总有一天会吃到另一个自己给你粗心准备的狗屎。
    freakxx
        31
    freakxx  
       2021-05-07 14:26:08 +08:00   ❤️ 4
    @kensoz #29

    实际上讲,你是没有追求的,你这种追求是错误的。
    你想要加薪升职,就去做对应的事。

    而不是把这个事情怪责到敬畏技术上,你不能加薪升职,是你没按这套游戏去做,而不是因为你敬畏了技术。


    我觉得有一个比较有趣的事,大部分会这么问的人,都觉得有天降正义这回事,事情会按部就班地实现好,就等自己去按下按钮。
    这种想法与其说是幼稚,不如说是无知。

    你随便写写也好,好好写写也好,这是你能力问题,不是你意志问题。
    就技术而言,你下限是你的能力,你无法做到的,或者你需要刻意去保持的,这也是你能力没达到的问题。
    HENQIGUAI
        32
    HENQIGUAI  
       2021-05-07 14:29:05 +08:00
    为了优雅
    Suddoo
        33
    Suddoo  
       2021-05-07 14:35:29 +08:00
    之前同事给我 review 代码,提了一堆意见:
    - 用三目表达式代替 if else
    - 用 lambda 表达式代替 for 循环
    - ......
    我说这些东西,本质上都是些语法糖,意义不大的
    wangchonglie
        34
    wangchonglie  
       2021-05-07 14:38:24 +08:00
    @Suddoo #33 这种确实是意义不大, 本质上是一样的。
    ychost
        35
    ychost  
       2021-05-07 14:42:04 +08:00
    自己热爱的东西,当然要好好对待
    312ybj
        36
    312ybj  
       2021-05-07 14:52:23 +08:00
    if else 可以用,但是最好不用于逻辑判断。 因为需求肯定会变的,而且乱七八糟的变。 所以如果想坑小一点,那就要保证代码的可扩展性。 毕竟大部分时候,自己的坑,自己填。 写出优美的代码,也是实力的提现嘛
    hxndg
        37
    hxndg  
       2021-05-07 15:19:10 +08:00   ❤️ 2
    @freakxx

    你说的没错,但是不是每个人都认同,好人是好人,就是最大的奖励。而是转而认可,好人必须有大豪斯,大钱之类的观点。这种东西实际上就是对应于价值观的混乱与淡漠。但不可否认这种混乱才是专业人才值得敬佩的原因。

    @Suddoo
    @wangchonglie

    所以呢?功能一样的话那么大可以不写定义宏,每个地方都用字符串 MAGIC NUMBER 表示。你们试试写点系统级别的代码就发现复杂的 IF/ELSE 会被人喷死的。我们做 TLS 优化的时候骂印度人骂的那就一个痛快。
    iXInbo
        38
    iXInbo  
       2021-05-07 16:03:26 +08:00
    今天你拉了一坨巧克力味的“屎”给老板,过几天后老板让你把巧克力味的改成草莓味的!
    今天你做了一个巧克力味的“蛋糕”给老板,过几天后老板让你把巧克力味的改成草莓味的!

    改屎还是改蛋糕好呢?

    写易懂和注释其实是给现在的自己、测试时有 Bug 的自己和未来改需求的自己用的。

    如果你做的是一次性的外包项目,这次写完再也不碰了,这就随你怎么写,怎么快怎么来,虽然会让接手的人有点不舒服
    IvanLi127
        39
    IvanLi127  
       2021-05-07 16:24:03 +08:00
    为了与天天被自己吐槽的傻逼同事划清界限 ::dog::
    seven123
        40
    seven123  
       2021-05-07 16:30:40 +08:00
    不为什么,只是为了心情愉悦罢了
    wu67
        41
    wu67  
       2021-05-07 17:28:28 +08:00
    技术和概念姑且不谈, 优雅和注释是必要的. 就算是我自己写的代码, 过一两个星期不读, 也会忘记啥是啥. 注释非常有必要.
    chaleaoch
        42
    chaleaoch  
       2021-05-07 17:35:42 +08:00
    如果是一个三个月的小项目,其实真无所谓.
    但是我目前正在参与一个 本来以为是三个月的,但是实际上已经开发了将近三年并且一直加功能,不知道什么时候结束的大项目.
    代码已经面目全非了,如果当初好好设计的话,....

    所以楼主 意义就在于此.
    cereschen
        43
    cereschen  
       2021-05-07 17:42:56 +08:00
    面试人家要看你的开源项目 然后你给了一个这样的能用就行的项目
    直接 game over 好嘛
    tairan2006
        44
    tairan2006  
       2021-05-07 17:48:22 +08:00   ❤️ 1
    别给自己挖坑
    shiweifu
        45
    shiweifu  
       2021-05-07 17:51:04 +08:00
    当然是为了 W
    OceanSea
        46
    OceanSea  
       2021-05-07 18:32:17 +08:00 via iPhone
    为了以后方便维护
    ukuyu
        47
    ukuyu  
       2021-05-07 18:35:52 +08:00 via iPhone
    为了提高重用性呗,交接方便
    iceheart
        48
    iceheart  
       2021-05-07 19:35:57 +08:00 via Android
    主要是给自己看,代码写久了,记性会变差。
    karloku
        49
    karloku  
       2021-05-07 19:55:47 +08:00
    人有审美需求
    有时候比较苦比较忙比较累, 没有足够的余力去满足审美追求. 但是回头有空的时候再看看, 不满足审美的东西看着就让自己生气
    Suddoo
        50
    Suddoo  
       2021-05-07 20:16:59 +08:00
    @hxndg
    - Go 没有三目运算符,那你代码还写不写了?
    - 复杂的嵌套逻辑,用三目运算符的可读性比 if else 更差吧,基本上没人能看懂了
    - 不支持函数式编程的语言你咋办,还不能写 for 循环了?
    - 整天搞这些语法糖,黑科技,意义真的不大啊
    hxndg
        51
    hxndg  
       2021-05-07 21:06:36 +08:00
    @Suddoo

    所以为了杠而杠呗,语言有限制的时候肯定会使用别的东西,具体的环境肯定是具体分析,代码可读性和优雅就不能兼得呗?

    做系统 /kernel 乃至自动机的时候我们各种黑科技语法糖、位运算,三元运算符,零长度数组我们都用,

    如果你觉得所谓的 ifelse 什么的或者用三元运算符都随意的话,你大可看看 OPENSSL 和 OPENSSH 这种中型软件,我们打 PATCH 的时候折腾里面的代码都要吐了,很多时候语法糖,黑科技和逻辑优化要么就是简化代码行数,要么就是提高代码可读性
    searene
        52
    searene  
       2021-05-07 21:21:38 +08:00
    我不同意楼上所说的取悦自己的想法。写好的代码最终还是为了自己,不是别人。一堆 if else 的后期维护成本极高,在 if else 的基础上做新需求所花的时间也会很长,谁来维护?谁来做新需求?那还不是自己。如果不管任何架构只往上堆 if else 的话,相信不出 3 个月你就没法再堆下去了,再不重构的话只能自己每天加班在这坨屎山上滚来滚去,这无疑是浪费时间且毫无意义的。
    xuanbg
        53
    xuanbg  
       2021-05-07 23:26:25 +08:00
    为了自己内心坚守的一片净土。为什么非得坚守本心不妥协呢?明明乱来也不影响结果。因为能坚守本心的人,才走得远。
    Suddoo
        54
    Suddoo  
       2021-05-07 23:29:07 +08:00
    @hxndg
    抱歉,真没心思跟你杠,我写个 if else 非要让我改成三目表达式,这种为了炫技而炫技,真的很没意思,if else 不能跑还是咋滴?
    你也可以看看 Spring 的源码也是一堆 if else,并不影响其流行程度
    还有,你说的那些黑科技,大多数并不是为了提高可读性,反而更多的是为了提高性能,牺牲可读性
    Leetcode 里 一堆 one line solution,可读性极差,代码风格非常“优雅”,但是,一般人都看不懂
    freakxx
        55
    freakxx  
       2021-05-08 01:35:05 +08:00
    @hxndg #51
    @Suddoo #54

    感觉谈的是同个方向两个角度的事情,

    Suddoo 在#33 表明的是吹毛求疵的问题,或者说,某种程度上,用某些语法糖反而会产生更“拗口”的代码;
    hxndg 在#37 表明的是,不同的用法,虽然看起来结果是一样,但实际上会产生后续迭代的问题;

    这个点上,我是赞同双方的,对于 hxndg 说的,我觉得是更有趣的一个观点,很多时候,写代码的时候,就算同一个用法,后面你再去做的时候,会发现就是少了那么一点预见性。

    后面楼层就感觉不是同一码事了。

    但就代码而言,合适的地方做合适的事,这个还是对的。
    三目也好,lambda 也好,one line 也好,用得好就是化腐朽,用得不好确实挺臭的。

    但像楼层这样没有例子,直接批评语法来说,我还是觉得不是特别妥当。

    像 unpacking 这种,能够一行搞定的事,肯定是又优雅,可读性也好(在特定语言中);
    有时简单的判断,三目一笔带过,肯定比去写个 if...else... 漂亮;
    这跟提高性能,牺牲可读性,感觉还是两码事。

    反之,本来就复杂的代码,还要夹杂在各种 if...else...做单层处理,一拉就是几十行,那还是挺丑的。
    dayeye2006199
        56
    dayeye2006199  
       2021-05-08 03:52:06 +08:00
    为啥大家觉得工程质量和钱没啥关系呢,写好写坏都一样拿钱呢?
    在一个比较正规的公司,你写的代码质量不达标,就过不去 code review 和 ci 这关,会影响你的代码合并入产品的速度,影响你的绩效。

    你对代码质量和好的工程实践没有概念,如果你做工程经理,你的团队的效率就会差,迭代的速度大幅减慢,欠一屁股的技术债直到代码无法维护。那公司怎么放心给你升职做经理呢?


    除了平时的工作,你也没法参与开源社区,不懂如何给社区贡献一些高质量代码,那怎么学习和提高自己的水平呢?

    工作大部分时候都是个团队协作的过程,保持代码质量,方便自己,也方便别人,提升团队的工作效率何乐而不为
    Nicolas4
        57
    Nicolas4  
       2021-05-08 09:10:18 +08:00
    @zifangsky 几千行...
    UIXX
        58
    UIXX  
       2021-05-08 10:02:11 +08:00
    很有意思的问题,我想不只是工程师,各行各业的人对于这类问题的答案应该是一致的:提升自身的竞争力并收获自尊(或者说自信)。

    首先我们应该反过来想,什么样的工程师才会不在意软件工程中各种所谓的规范,不去学习新的更先进的技术与概念?

    1 、低职业自尊的人。
    “我就是这样写,怎么着,反正能正常跑。”
    “你觉得不行那你来改吧。”
    “反正我写代码就是混口饭吃。”

    2 、自身的竞争力已经不在技术实现上。跟 1 有部分重叠。
    “这个你研究一下吧,我待会还有个 xx 会议要开。”
    “这次竞争上岗我十拿九稳,xx 是我的 xx 。”
    “老哥,那么卖力干嘛,我拍一次视频顶你半年的工资。”

    回到正题。社会上所有生产者的职业道德,大概都是维护本行业的社会地位(门槛)以及独立个体的竞争力。“学习新技术”及“更好的代码习惯”都是程序员群体内非常符合这一点的具体实践。如果没有这些“品质”,对于码农的社会眼光就会降低,职业待遇也会相应地变化...应该说这些行为包含一种群体的自觉。

    进一步,行业内个体竞争强调了这些“品质”。这点毋庸赘述。

    竞争的内源是生存恐惧。在资源一定的情况下,个体根本不存在“够用就好”。
    写几个 if 就可以糊弄的老板过几天就招了个代码写得又快又好的实习生替代你,你要不要多学点东西?
    如果全世界包括你只有一百个人会某种技术,哪还有这么多屁事,只因你的“生存空间”太大了。
    LemonK
        59
    LemonK  
       2021-05-08 16:29:17 +08:00
    这个问题可以类比个人笔记。我上学的时候笔记只用各种符号关键词箭头只有自己能看懂的自造语法,反正应付考试够用,也没觉得有什么问题。
    工作之后一开始笔记也是没头没尾乱写,后边过了几年再看完全看不懂了。之后就开始慢慢认真写,各种笔记方法论也用上了,再复习就很舒服,发博客或技术分享也可以直接拿来用。
    代码归根结底也是给人读的,写文章为什么要写好,写代码也是一样道理。只会造屎早晚会吃到自己造的屎,可以不用每次都写好,但起码要有能写好的能力,毕竟选了这行就要整天面对这些东西,降低一点未来吃屎的概率不是很有意义吗。
    chogath
        60
    chogath  
       2021-05-08 16:37:12 +08:00
    勿以善小而不为,勿以恶小而为之
    charlie21
        61
    charlie21  
       2021-05-08 17:19:05 +08:00
    代码优雅和写注释 这个层面是太微观了,对整体的帮助其实是很小的
    zhihu.com/question/62683012/answer/1033260941#舒服的代码和不舒服的代码,差距是怎样的
    即使满篇详细注释也不妨碍你写出烂代码
    若架构出问题,之前怎么写注释 也无济于事
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2871 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 12:27 · PVG 20:27 · LAX 04:27 · JFK 07:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.