• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yidinghe
V2EX  ›  程序员

什么样的代码一看就知道是新手?

  •  
  •   yidinghe ·
    PRO
    · Sep 16, 2018 via Android · 22083 views
    This topic created in 2972 days ago, the information mentioned may be changed or developed.

    有的代码一看就是新手写的,写这样的代码的程序员,基本上只能留在初级程序员的岗位上。这样的代码有哪些特点呢?

    1、没有格式,混乱不堪。比如缩进对不齐、语句从不换行、空格和制表符混搭等等。

    这表明作者缺乏阅读代码,包括自己代码的经验。只有长期经常阅读代码的人才会有意识的对自己的代码做格式化。

    而缺乏阅读代码经验的人必然也缺乏维护代码的经验。这种人可能经常跳槽,连自己的代码都从来不看第二遍,留下一堆的坑让别人来填。

    而缺乏维护代码经验的人也必然缺乏解决故障的经验和重构代码的经验,而这两个对程序员的工作效率来说是至关重要的。很多时候老油条看一眼就知道问题出在哪里,而新手要调试一整天。别让薪水花冤枉了。

    你可能说我太吹毛求疵,不就是排版乱一点,哪那么多道道?但实际情况真的就是这样子。

    2、不会命名,或老写错字。简单的单词都能拼错就不说了,我另外举个例子,纸张的正面不是 front 嘛,他一查字典,结果选了 positive,“积极正面”的正面,那好吧,反面你就用 negative 吧,我不,他又查字典,结果起个名字叫 reverse,这搞得完全看不懂了。

    让这种人加到项目里面来,你就恨不得手把手的帮他把代码写了(也恨不得薪水都帮他领了),一不留神就各种奇葩名字。其实 Java 早就支持 Unicode,实在不行用中文名字算了。

    3、语法高亮。这个从代码本身看不出,但可以瞄一眼作者的 IDE 是啥样。IDE 现在都可以自定义语法高亮,但是默认的情况下都只有三个颜色:关键字一个颜色,字符串一个颜色,剩下的一个颜色。

    而实际上经验丰富的开发者都会尽可能多的用颜色,来区分类、成员、方法和参数等等,这样可以提高阅读效率。比如 color-themes.com 就有很多现成的风格。

    看得舒服是次要的,最终目的是要提高阅读效率。当然除了颜色外,好的字体也很重要,这里就不多说了。总之,只有老油条才会关注这些东西,不当回事的多半是初学者。

    说了这么多,其实一句话:当新手开发效率到了一个极限想要继续提升,就必须在代码的格式、命名、视觉效果上下功夫。这是新手必须要迈过的坎。

    125 replies  •  2024-08-01 00:22:46 +08:00
    1  2  
    ❮ ❯
    lolcat
    lolcat
    Sep 16, 2018
    1
    反面不应该用 back 吗?
    Leammin
    Leammin
    Sep 16, 2018 via Android❤️9
    2
    命名是一生之敌 orz
    megachweng
    megachweng
    Sep 16, 2018 via iPhone
    3
    https://i.loli.net/2018/09/16/5b9d3bc60322d.png

    https://i.loli.net/2018/09/16/5b9d3bd314f4b.png

    https://i.loli.net/2018/09/16/5b9d3bd9d2444.png

    感受一下?就让帮忙写几个单元测试,IDE 都给你波浪浪了一行了,也不知道改一下,头皮发麻
    coffeSlider
    coffeSlider
    Sep 16, 2018 via Android❤️50
    4
    你这鄙视链属于初学水平。
    kaedea
    kaedea
    Sep 16, 2018 via Android
    5
    该加空格没加,不该加空格随便加,对代码排版没有美观要求的人。
    Kahnn
    Kahnn
    Sep 16, 2018
    6
    不喜欢颜色太多,IDEA 默认的配色就挺好的啊
    reus
    reus
    Sep 16, 2018❤️1
    7
    有些人例如 Rob Pike 是不用高亮的,虽然我也不理解,但是我知道他不是新手,他是老一辈的人。
    ETiV
    ETiV
    Sep 16, 2018❤️1
    8
    1、用 IDE 格式化代码功能能解决,一个快捷键的事儿
    2、英语水平问题也是一个考量因素…我见过把“已购买”写成 buyed 的(同时“已售出”写成了 selled )
    3、也可能因人而异,万一有新手喜欢用配色更丰富的主题呢~

    我见过的新手代码:

    - 能用循环写的代码,复制 N 多行然后一行一行的改
    - 能用 K-V 处理的逻辑,把值 push_back 进数组,然后循环数组去找到对应的 value
    yanaraika
    yanaraika
    Sep 16, 2018❤️5
    9
    新手喜欢把问题搞复杂,老手会把问题化简单
    Hardrain
    Hardrain
    Sep 16, 2018
    10
    箭头形代码
    从不用 elif 那种
    kslr
    kslr
    Sep 16, 2018
    11
    唉,有时候一个单词要琢磨半天才能精准描述含义
    3dwelcome
    3dwelcome
    Sep 16, 2018 via Android
    12
    懒代码和经验没什么必然关系,和态度有关。我发现有些人很聪明,但就是没想把代码写好,就只想快点交差干自己的事情去。
    congeec
    congeec
    Sep 16, 2018 via iPhone❤️1
    13
    @reus 他是特例。我写代码经常写错字,这时候关键字如果不是彩色就能发现错误
    inhzus
    inhzus
    Sep 16, 2018 via Android
    14
    前几天一起写项目,看了同组的代码简直崩溃。
    正常情况下这么写:
    func(){
    a();
    b();
    c();
    }
    a b c 功能没有包含关系。
    他们写的:
    func(){
    a();
    }
    a(){
    ...
    b();
    }
    b(){
    ...
    c();
    }
    帮他们 debug 了一次,idea 显示的波浪线看得我想死
    innoink
    innoink
    Sep 16, 2018 via Android❤️1
    15
    这样的文我一天能写 10 个
    hengo
    hengo
    Sep 16, 2018 via iPhone
    16
    @megachweng cancel authority watch 不会写,可以查啊,看的强迫症难受
    wuhhhh
    wuhhhh
    Sep 16, 2018 via iPhone❤️1
    17
    在开始写的时候,就已经把《阿里开发手册》看了一遍,基本上语法类的问题不大,自己也是新手,最快能看出新手的代码,看结构,看项目名,小写大写字母规定格式
    hengo
    hengo
    Sep 16, 2018 via iPhone
    18
    @megachweng authenticate
    broadliyn
    broadliyn
    Sep 16, 2018 via iPhone❤️2
    19
    lz 写了这么一大段没什么卵用的话肯定是工作上有谁惹你不快了于是上来发泄一通。
    1010011010
    1010011010
    Sep 16, 2018
    20
    宝宝宝宝宝宝树
    Phariel
    Phariel
    Sep 16, 2018 via iPhone
    21
    if (a == b) {
    return true;
    } else {
    return false;
    }

    我想揍人
    d18
    d18
    Sep 16, 2018
    22
    新手比较喜欢炫技吧,简单的问题,恨不得把自己会的东西都用上去。
    d18
    d18
    Sep 16, 2018
    23
    所谓的“给你一把锤子,看什么都是钉子”。
    FrankHB
    FrankHB
    Sep 16, 2018
    24
    反对 3。我撸了个语言,装了 Syntax Highlighting Pack 然后往里面加了自己的 tmLanguage 实现,但是 VS 就是不按我的意思识别 magic 来高亮(单独扩展名是正常的),我有啥办法。(看了下插件源码还是懵逼的,解释 tmLanguage/plist 不是插件而是 VS 自己搞定的,然而 cmake 这种直接整个 txt 名字都行,我用.txt+firstLineMatch 就不行……)
    zxq2233
    zxq2233
    Sep 16, 2018
    25
    php 是世界上最好的语言
    daigouspy
    daigouspy
    Sep 16, 2018 via Android❤️1
    26
    这不跟看字迹识人品一样吗?毫无意义的。
    loading
    loading
    Sep 16, 2018 via iPhone
    27
    color-themes. com
    这个站是哪里的?
    Android2MCU
    Android2MCU
    Sep 16, 2018 via iPhone
    28
    原来我们用记事本写代码的在楼主眼里应该是新的不能再新的新手了
    zek
    zek
    Sep 16, 2018 via Android
    29
    专注于业务逻辑吧,别整没用的,idea 配色啥的浪费时间
    loading
    loading
    Sep 16, 2018 via iPhone❤️2
    30
    楼主你的 github 能不能贴一下,我想学编程,想学习一下。
    lardud
    lardud
    Sep 16, 2018 via Android
    31
    一堆颜色一看就是新手
    zjsxwc
    zjsxwc
    Sep 16, 2018 via Android❤️2
    32
    变量名,here, there2, a, here3......





















    但这些变量名是大佬雷军先生写的!你敢说他是新手? 233333333333
    xillwill
    xillwill
    Sep 16, 2018 via iPad
    33
    谁不是新手过来的 你是在嘲讽自己的过去吗
    经验通过积累而来 经验不同于技能 这种东西是学不来的
    easylee
    easylee
    Sep 16, 2018 via Android❤️1
    34
    对配色没多大要求。
    tvallday
    tvallday
    Sep 16, 2018
    35
    @zjsxwc 二十几年前没有这么多软件工程上的要求,更讲究的是怎么合理利用硬盘和内存空间,现在时代不一样了。
    shidapi
    shidapi
    Sep 16, 2018
    36
    颜色太多太亮不觉得眼花缭乱吗?
    greatghoul
    greatghoul
    Sep 16, 2018❤️2
    37
    配色是个人喜好,连这也要和新不新手关联,只能说有些吹毛求疵了。
    alwayshere
    alwayshere
    Sep 16, 2018❤️1
    38
    if($a==true){}
    lastpass
    lastpass
    Sep 16, 2018 via Android❤️1
    39
    新手和老手的主要区别在于
    老手:我的队友都是猪,我不这样写那群猪又看不懂,要瞎改,我解释都要解释半天,严重浪费我时间。
    新手:队友是啥?维护又是啥?好吃吗?
    lastpass
    lastpass
    Sep 16, 2018 via Android
    40
    简单点说;
    你将你的队友当猪来看,你就是老手。
    你将你的队友当神仙来看,你就是新手。
    ICKelin
    ICKelin
    Sep 16, 2018
    41
    我感觉楼主说的这三点没什么好吐槽的,每个人都是从新手过来的,态度好的话很快就能修正了,再过段时间,可能就能超过楼主了。不就比别人多混多学几年嘛,给人时间就能超过你。
    Bibilli
    Bibilli
    Sep 16, 2018
    42
    新手与老手的最大却别我认为在于整个代码的架构上来看
    inframe
    inframe
    Sep 16, 2018 via Android
    43
    就看新手能多久跨过这个坎了
    quinoa42
    quinoa42
    Sep 16, 2018
    44
    这三点取决于个人风格,除了瞎取变量名我觉得还算可以接受
    要我说大量 duplicate code,一个 function 写 100 多行,chaining method call 这样的才算看着都头疼
    jsthon
    jsthon
    Sep 16, 2018
    45
    以 my 开头命名,如 myCode
    hlwjia
    hlwjia
    Sep 16, 2018❤️1
    46
    @lolcat 他的意思是,如果“正面”已经用了 positive 了,那反面就应该用 "negative"。

    这样可以保持一致性,如果你说要全改了,那当然是 front and back 了
    wolfie
    wolfie
    Sep 16, 2018❤️1
    47
    不久前自己写的代码,都要理解半天。
    dyy1997
    dyy1997
    Sep 16, 2018
    48
    switch(a)
    case 1:
    a=1;
    ...
    break
    case 2:
    a=2;
    ...
    break
    case 3:
    a=3;
    ...
    break
    icylogic
    icylogic
    Sep 16, 2018
    49
    多线程里出现 volatile …… (指 c/c++
    ooToo
    ooToo
    Sep 16, 2018❤️1
    50
    @zjsxwc Are you OK?
    Raisu
    Raisu
    Sep 16, 2018 via Android
    51
    哈哈哈,想想半年前我连 debug 都不会用被同事吐槽惨了。。。
    iwtbauh
    iwtbauh
    Sep 16, 2018 via Android
    52
    我认为一个局部变量起名叫 tmp 是没问题的
    因为我鼓励小函数,能很容易看出来这一个函数是干什么的
    loading
    loading
    Sep 16, 2018 via iPhone
    53
    《问什么样的问题一看就是新手》
    KgM4gLtF0shViDH3
    KgM4gLtF0shViDH3
    Sep 16, 2018 via iPhone
    54
    我认为不会解决问题的就是新手
    mr3x
    mr3x
    Sep 16, 2018
    55
    @dyy1997 这个可以有
    zhzer
    zhzer
    Sep 16, 2018 via Android
    56
    写很多没用的 ifelse,并且看不出来为什么没用
    vivoapex
    vivoapex
    Sep 16, 2018
    57
    @ETiV 已购买不用 buyed 那用啥? hasBuyed??
    Tyanboot
    Tyanboot
    Sep 16, 2018❤️2
    58
    @vivoapex bought 了解下? purchased 了解下?
    huclengyue
    huclengyue
    Sep 16, 2018 via Android
    59
    缩进混乱?难道是 IDE 不支持格式化吗?
    ETiV
    ETiV
    Sep 16, 2018 via iPhone
    60
    @vivoapex bought 和 sold …
    cyrbuzz
    cyrbuzz
    PRO
    Sep 16, 2018
    61
    我觉得可以告诉他查字典找那些带 n. 的词,什么 v. adj. 统统不行。
    alcarl
    alcarl
    Sep 16, 2018 via Android❤️1
    62
    能靠楼主这些看新手的都是强迫症吧。。。。。。时间长了的老油条看代码只关注解决实际问题,格式什么的只要代码逻辑不乱,有分段,不是一坨一坨的,不是一行老长的,不玩语言小技巧的业务代码,都是好代码。
    在公司没有代码规范的情况下,自我要求过严会影响效率,更不敢要求别人。
    根据业务规模,在适当的时候适度拆分就好。我现在这就有一个项目,就是读个 excel 到数据库然后加工输出一下,是变量名特别英文,结构特别规范拆分特别细,定义了一堆对象,在方法里跳啊跳啊跳的我都快神经了,小需求,简单实现反而看起来更容易。我是不赞成什么都要照框架那样弄的。。。。。。
    BingoXuan
    BingoXuan
    Sep 16, 2018
    63
    1.滥用语言特性,总会带来坑
    2.简单问题复杂解决,写的人感觉高大上,调试起来一堆 bug
    3.爆炸头式代码(一般而言是意大利面式),完全搞不清要干嘛
    4.不合理的命名,非常让人迷惑
    pabupa
    pabupa
    Sep 16, 2018❤️1
    64
    block+1
    bullettrain1433
    bullettrain1433
    Sep 16, 2018
    65
    class a class aa class test。。。。,哎,说多了真的累
    hanxiaomeng
    hanxiaomeng
    Sep 16, 2018
    66
    分支语句使用先判断模式....
    ghhardy
    ghhardy
    Sep 16, 2018 via Android
    67
    @coffeSlider 我也是觉得,会关注这种问题的人一般是新手居多,就像刚学了点功夫就像找人打架试验自己什么水平似的
    ghhardy
    ghhardy
    Sep 16, 2018 via Android
    68
    @ETiV 你这说把循环分成单独语句的,那不算新手,那叫外行吧?
    testcgd
    testcgd
    Sep 16, 2018
    69
    团队有搞 CR 和静态扫描应该就可以避免了吧,都是从新手过来的
    vivoapex
    vivoapex
    Sep 16, 2018
    70
    @ETiV fuck..
    madaosan
    madaosan
    Sep 16, 2018 via Android❤️1
    71
    自己以前写的代码。。。。
    sampeng
    sampeng
    Sep 17, 2018 via iPhone
    72
    一个函数一起就 5-6 行。我就临时从数组取个值出来,我就要用 a 啊 b 的。因为我实在想不出用个特别牛逼的单词放这。是,我是可以放下面写一行… debug 很麻烦不说,又臭又长的一句话我宁愿有个 a,b,c
    ETiV
    ETiV
    Sep 17, 2018 via iPhone
    73
    @vivoapex

    三点水加个来(涞)念什么
    三点水加个去又念什么…… :doge
    flowfire
    flowfire
    Sep 17, 2018 via iPhone
    74
    @ETiV #8 buyed 和 selled 我有时候也会这么写,原因是一大片 xxxed 变量里忽然出现一个 bought 就会觉得很难受浑身不舒服
    mingl0280
    mingl0280
    Sep 17, 2018
    75
    反对 3,太花哨的主题反而很难读好吧
    viator42
    viator42
    Sep 17, 2018 via iPhone
    76
    有经验的上来就能考虑并发可扩展性避免输入错误这样的情况,新手只是完成业务逻辑了事
    CodeMan27
    CodeMan27
    Sep 17, 2018 via iPad
    77
    现在 jetbrains 全家桶的高亮已经做得很好了,不用自己改
    lusheldon
    lusheldon
    Sep 17, 2018 via Android
    78
    其实这是一个推广贴吗?
    xxgirl2
    xxgirl2
    Sep 17, 2018
    79
    小组织没有统一风格很正常,何况有的时候老大也直接啪啪一串空格敲下去
    有的人接过来还知道 astyle 一下,有的也就那样直接上了

    当然对我来说 windows 上用 vs 必然配得五颜六色的,漂亮又省事
    linux 上 eclipse-cdt 也能五颜六色的,最近打算试试 vscode,还没调教
    Allianzcortex
    Allianzcortex
    Sep 17, 2018
    80
    @Phariel 用 return a==b 这样的一行语句么?我觉得这个写法粗糙了点但也很直观啊
    z54749412
    z54749412
    Sep 17, 2018
    81
    来一波 github 看看大佬是怎么样的老手。。。。
    Pythoner666666
    Pythoner666666
    Sep 17, 2018
    82
    其实不用这么多,看一眼变量名就知道了
    zaqmjuop
    zaqmjuop
    Sep 17, 2018
    83
    funcA(funcB(funcC(funcD(funcE()))))
    FakeLeung
    FakeLeung
    Sep 17, 2018
    84
    变量有点不同意。

    请大佬们帮我想个好一点的变量名吧。要求一眼就知道干啥的:
    商品砼管理
    限额领料
    质量安全整改通知单
    itskingname
    itskingname
    Sep 17, 2018
    85
    Python 代码:

    ```python
    a = []
    a.append('aaa')
    a.append('bbb')
    a.append('ccc')

    for i in range(len(a)):
    print(a[i])
    ```
    chenyu8674
    chenyu8674
    Sep 17, 2018
    86
    if (isReady== true) {
    ……
    } else if (!isReady) {
    ……
    } else {
    ……
    }
    YzSama
    YzSama
    Sep 17, 2018
    87
    User user = userMapper.selectById(1);

    if(user==null){
    user.setXXX();
    }

    以上亲身经历,帮同事调试一段总出错的代码... 我一度怀疑他写的代码是怎么跑的.
    enenaaa
    enenaaa
    Sep 17, 2018
    88
    @itskingname #85, 一看就是写惯 C++的。
    zhaogaz
    zhaogaz
    Sep 17, 2018
    89
    讲道理,我觉得看不出来。

    新手一般都写不出代码。

    干了五六年的人还有楼主说的毛病的人大有人在。
    bp0
    bp0
    Sep 17, 2018
    90
    反对 2,写了好些年代码了,还是纠结变量命名。
    jswh
    jswh
    Sep 17, 2018
    91
    所有逻辑写在一个函数,不会进行拆分的代码
    storypanda
    storypanda
    Sep 17, 2018 via Android
    92
    @Phariel 你指的没有缩进?
    storypanda
    storypanda
    Sep 17, 2018 via Android
    93
    @zjsxwc 大佬说什么都对,其实不应该这样。
    就和知乎普通人写一大段没几个赞,牛逼人物几个字几千赞一样。
    DnC
    DnC
    Sep 17, 2018
    94
    见过一个 2 货的代码,给他指出问题,还嘴硬不承认。
    parents->father->brother->son->sister->m_friend->school->m_class->teacher->name->first_name = "SUN";
    类似这样的;吓得我一机灵。
    DnC
    DnC
    Sep 17, 2018
    95
    还见过一个,是用 VS debug 之后修改的代码:
    前提是有个 enum{ONE, TWO, THREE,....} 这样的,
    后来有人在中间插入了一个值,变成了 enum{ONE, TWO, HELLO, THREE,...} 了,于是 bug 产生了;
    他 debug 后发现了 bug,并修改为:
    my_value = 3;
    也是吓得一机灵;然后赶紧不点名群发邮件警告。
    Mrbird
    Mrbird
    Sep 17, 2018
    96
    代码高亮这块不敢苟同
    ihavecat
    ihavecat
    Sep 17, 2018
    97
    你说命名用中文名让我想起了上次那个用表情包给 js 还是啥的命名变量的,底下全部看懵逼了
    pkoukk
    pkoukk
    Sep 17, 2018
    98
    呃...我用过的 IDE 似乎都会自动帮你解决 1、3 问题。
    至于 2..和菜不菜关系不大,即使英语水平正常,很多贼长的业务术语,也难免大家的写法不一样
    closedevice
    closedevice
    Sep 17, 2018
    99
    并不敢苟同,没到本质上.代码时写给人看,其次才是交给机器运行的.良好的代码前提是具有清晰的逻辑体系,就这个样子.
    lumnag
    lumnag
    Sep 17, 2018
    100
    这么一说都感觉我自己是老鸟了
    1  2  
    ❮ ❯
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1600 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 247ms · UTC 23:34 · PVG 07:34 · LAX 15:34 · JFK 18:34
    ♥ Do have faith in what you're doing.