
有的代码一看就是新手写的,写这样的代码的程序员,基本上只能留在初级程序员的岗位上。这样的代码有哪些特点呢?
1、没有格式,混乱不堪。比如缩进对不齐、语句从不换行、空格和制表符混搭等等。
这表明作者缺乏阅读代码,包括自己代码的经验。只有长期经常阅读代码的人才会有意识的对自己的代码做格式化。
而缺乏阅读代码经验的人必然也缺乏维护代码的经验。这种人可能经常跳槽,连自己的代码都从来不看第二遍,留下一堆的坑让别人来填。
而缺乏维护代码经验的人也必然缺乏解决故障的经验和重构代码的经验,而这两个对程序员的工作效率来说是至关重要的。很多时候老油条看一眼就知道问题出在哪里,而新手要调试一整天。别让薪水花冤枉了。
你可能说我太吹毛求疵,不就是排版乱一点,哪那么多道道?但实际情况真的就是这样子。
2、不会命名,或老写错字。简单的单词都能拼错就不说了,我另外举个例子,纸张的正面不是 front 嘛,他一查字典,结果选了 positive,“积极正面”的正面,那好吧,反面你就用 negative 吧,我不,他又查字典,结果起个名字叫 reverse,这搞得完全看不懂了。
让这种人加到项目里面来,你就恨不得手把手的帮他把代码写了(也恨不得薪水都帮他领了),一不留神就各种奇葩名字。其实 Java 早就支持 Unicode,实在不行用中文名字算了。
3、语法高亮。这个从代码本身看不出,但可以瞄一眼作者的 IDE 是啥样。IDE 现在都可以自定义语法高亮,但是默认的情况下都只有三个颜色:关键字一个颜色,字符串一个颜色,剩下的一个颜色。
而实际上经验丰富的开发者都会尽可能多的用颜色,来区分类、成员、方法和参数等等,这样可以提高阅读效率。比如 color-themes.com 就有很多现成的风格。
看得舒服是次要的,最终目的是要提高阅读效率。当然除了颜色外,好的字体也很重要,这里就不多说了。总之,只有老油条才会关注这些东西,不当回事的多半是初学者。
说了这么多,其实一句话:当新手开发效率到了一个极限想要继续提升,就必须在代码的格式、命名、视觉效果上下功夫。这是新手必须要迈过的坎。
1 lolcat 2018-09-16 00:53:58 +08:00 反面不应该用 back 吗? |
2 Leammin 2018-09-16 01:01:04 +08:00 via Android 命名是一生之敌 orz |
3 megachweng 2018-09-16 01:08:17 +08:00 via iPhone 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 都给你波浪浪了一行了,也不知道改一下,头皮发麻 |
4 coffeSlider 2018-09-16 01:09:57 +08:00 via Android 你这鄙视链属于初学水平。 |
5 kaedea 2018-09-16 01:15:29 +08:00 via Android 该加空格没加,不该加空格随便加,对代码排版没有美观要求的人。 |
6 Kahnn 2018-09-16 01:19:52 +08:00 不喜欢颜色太多,IDEA 默认的配色就挺好的啊 |
7 reus 2018-09-16 01:23:16 +08:00 有些人例如 Rob Pike 是不用高亮的,虽然我也不理解,但是我知道他不是新手,他是老一辈的人。 |
8 ETiV 2018-09-16 01:31:18 +08:00 1、用 IDE 格式化代码功能能解决,一个快捷键的事儿 2、英语水平问题也是一个考量因素…我见过把“已购买”写成 buyed 的(同时“已售出”写成了 selled ) 3、也可能因人而异,万一有新手喜欢用配色更丰富的主题呢~ 我见过的新手代码: - 能用循环写的代码,复制 N 多行然后一行一行的改 - 能用 K-V 处理的逻辑,把值 push_back 进数组,然后循环数组去找到对应的 value |
9 yanaraika 2018-09-16 01:32:28 +08:00 新手喜欢把问题搞复杂,老手会把问题化简单 |
10 Hardrain 2018-09-16 01:34:42 +08:00 箭头形代码 从不用 elif 那种 |
11 kslr 2018-09-16 01:38:09 +08:00 唉,有时候一个单词要琢磨半天才能精准描述含义 |
12 3dwelcome 2018-09-16 01:43:54 +08:00 via Android 懒代码和经验没什么必然关系,和态度有关。我发现有些人很聪明,但就是没想把代码写好,就只想快点交差干自己的事情去。 |
14 inhzus 2018-09-16 01:44:57 +08:00 via Android 前几天一起写项目,看了同组的代码简直崩溃。 正常情况下这么写: func(){ a(); b(); c(); } a b c 功能没有包含关系。 他们写的: func(){ a(); } a(){ ... b(); } b(){ ... c(); } 帮他们 debug 了一次,idea 显示的波浪线看得我想死 |
15 innoink 2018-09-16 01:47:00 +08:00 via Android 这样的文我一天能写 10 个 |
16 hengo 2018-09-16 01:52:16 +08:00 via iPhone @megachweng cancel authority watch 不会写,可以查啊,看的强迫症难受 |
17 wuhhhh 2018-09-16 01:57:33 +08:00 via iPhone 在开始写的时候,就已经把《阿里开发手册》看了一遍,基本上语法类的问题不大,自己也是新手,最快能看出新手的代码,看结构,看项目名,小写大写字母规定格式 |
18 hengo 2018-09-16 01:57:46 +08:00 via iPhone @megachweng authenticate |
19 broadliyn 2018-09-16 02:51:29 +08:00 via iPhone lz 写了这么一大段没什么卵用的话肯定是工作上有谁惹你不快了于是上来发泄一通。 |
20 1010011010 2018-09-16 02:58:07 +08:00 宝宝宝宝宝宝树 |
21 Phariel 2018-09-16 03:46:54 +08:00 via iPhone if (a == b) { return true; } else { return false; } 我想揍人 |
22 d18 2018-09-16 03:57:00 +08:00 新手比较喜欢炫技吧,简单的问题,恨不得把自己会的东西都用上去。 |
23 d18 2018-09-16 03:57:51 +08:00 所谓的“给你一把锤子,看什么都是钉子”。 |
24 FrankHB 2018-09-16 06:04:07 +08:00 反对 3。我撸了个语言,装了 Syntax Highlighting Pack 然后往里面加了自己的 tmLanguage 实现,但是 VS 就是不按我的意思识别 magic 来高亮(单独扩展名是正常的),我有啥办法。(看了下插件源码还是懵逼的,解释 tmLanguage/plist 不是插件而是 VS 自己搞定的,然而 cmake 这种直接整个 txt 名字都行,我用.txt+firstLineMatch 就不行……) |
25 zxq2233 2018-09-16 06:53:46 +08:00 php 是世界上最好的语言 |
26 daigouspy 2018-09-16 07:11:02 +08:00 via Android 这不跟看字迹识人品一样吗?毫无意义的。 |
27 loading 2018-09-16 07:20:02 +08:00 via iPhone color-themes. com 这个站是哪里的? |
28 Android2MCU 2018-09-16 07:30:15 +08:00 via iPhone 原来我们用记事本写代码的在楼主眼里应该是新的不能再新的新手了 |
29 zek 2018-09-16 07:35:07 +08:00 via Android 专注于业务逻辑吧,别整没用的,idea 配色啥的浪费时间 |
30 loading 2018-09-16 07:42:50 +08:00 via iPhone 楼主你的 github 能不能贴一下,我想学编程,想学习一下。 |
31 lardud 2018-09-16 08:22:13 +08:00 via Android 一堆颜色一看就是新手 |
32 zjsxwc 2018-09-16 08:27:42 +08:00 via Android 变量名,here, there2, a, here3...... 但这些变量名是大佬雷军先生写的!你敢说他是新手? 233333333333 |
33 xillwill 2018-09-16 08:57:07 +08:00 via iPad 谁不是新手过来的 你是在嘲讽自己的过去吗 经验通过积累而来 经验不同于技能 这种东西是学不来的 |
34 easylee 2018-09-16 08:57:36 +08:00 via Android 对配色没多大要求。 |
36 shidapi 2018-09-16 09:14:22 +08:00 颜色太多太亮不觉得眼花缭乱吗? |
37 greatghoul 2018-09-16 09:25:13 +08:00 配色是个人喜好,连这也要和新不新手关联,只能说有些吹毛求疵了。 |
38 alwayshere 2018-09-16 09:48:02 +08:00 if($a==true){} |
39 lastpass 2018-09-16 09:59:17 +08:00 via Android 新手和老手的主要区别在于 老手:我的队友都是猪,我不这样写那群猪又看不懂,要瞎改,我解释都要解释半天,严重浪费我时间。 新手:队友是啥?维护又是啥?好吃吗? |
40 lastpass 2018-09-16 10:01:11 +08:00 via Android 简单点说; 你将你的队友当猪来看,你就是老手。 你将你的队友当神仙来看,你就是新手。 |
41 ICKelin 2018-09-16 10:13:40 +08:00 我感觉楼主说的这三点没什么好吐槽的,每个人都是从新手过来的,态度好的话很快就能修正了,再过段时间,可能就能超过楼主了。不就比别人多混多学几年嘛,给人时间就能超过你。 |
42 Bibilli 2018-09-16 10:40:49 +08:00 新手与老手的最大却别我认为在于整个代码的架构上来看 |
43 inframe 2018-09-16 10:46:07 +08:00 via Android 就看新手能多久跨过这个坎了 |
44 quinoa42 2018-09-16 10:50:58 +08:00 这三点取决于个人风格,除了瞎取变量名我觉得还算可以接受 要我说大量 duplicate code,一个 function 写 100 多行,chaining method call 这样的才算看着都头疼 |
45 jsthon 2018-09-16 11:10:20 +08:00 以 my 开头命名,如 myCode |
46 hlwjia PRO |
47 wolfie 2018-09-16 11:15:53 +08:00 不久前自己写的代码,都要理解半天。 |
48 div class="sep3"> dyy1997 2018-09-16 11:24:00 +08:00 switch(a) case 1: a=1; ... break case 2: a=2; ... break case 3: a=3; ... break |
49 icylogic 2018-09-16 11:25:55 +08:00 多线程里出现 volatile …… (指 c/c++ |
51 Raisu 2018-09-16 13:07:12 +08:00 via Android 哈哈哈,想想半年前我连 debug 都不会用被同事吐槽惨了。。。 |
52 iwtbauh 2018-09-16 13:13:04 +08:00 via Android 我认为一个局部变量起名叫 tmp 是没问题的 因为我鼓励小函数,能很容易看出来这一个函数是干什么的 |
53 loading 2018-09-16 13:14:44 +08:00 via iPhone 《问什么样的问题一看就是新手》 |
54 KgM4gLtF0shViDH3 2018-09-16 13:31:33 +08:00 via iPhone 我认为不会解决问题的就是新手 |
56 zhzer 2018-09-16 13:58:31 +08:00 via Android 写很多没用的 ifelse,并且看不出来为什么没用 |
59 huclengyue 2018-09-16 16:02:02 +08:00 via Android 缩进混乱?难道是 IDE 不支持格式化吗? |
61 cyrbuzz 2018-09-16 16:10:24 +08:00 我觉得可以告诉他查字典找那些带 n. 的词,什么 v. adj. 统统不行。 |
62 alcarl 2018-09-16 16:26:35 +08:00 via Android 能靠楼主这些看新手的都是强迫症吧。。。。。。时间长了的老油条看代码只关注解决实际问题,格式什么的只要代码逻辑不乱,有分段,不是一坨一坨的,不是一行老长的,不玩语言小技巧的业务代码,都是好代码。 在公司没有代码规范的情况下,自我要求过严会影响效率,更不敢要求别人。 根据业务规模,在适当的时候适度拆分就好。我现在这就有一个项目,就是读个 excel 到数据库然后加工输出一下,是变量名特别英文,结构特别规范拆分特别细,定义了一堆对象,在方法里跳啊跳啊跳的我都快神经了,小需求,简单实现反而看起来更容易。我是不赞成什么都要照框架那样弄的。。。。。。 |
63 BingoXuan 2018-09-16 16:49:06 +08:00 1.滥用语言特性,总会带来坑 2.简单问题复杂解决,写的人感觉高大上,调试起来一堆 bug 3.爆炸头式代码(一般而言是意大利面式),完全搞不清要干嘛 4.不合理的命名,非常让人迷惑 |
64 pabupa 2018-09-16 17:59:24 +08:00 block+1 |
65 bullettrain1433 2018-09-16 21:06:18 +08:00 class a class aa class test。。。。,哎,说多了真的累 |
66 hanxiaomeng 2018-09-16 21:13:15 +08:00 分支语句使用先判断模式.... |
67 ghhardy 2018-09-16 21:42:12 +08:00 via Android @coffeSlider 我也是觉得,会关注这种问题的人一般是新手居多,就像刚学了点功夫就像找人打架试验自己什么水平似的 |
69 testcgd 2018-09-16 21:51:39 +08:00 团队有搞 CR 和静态扫描应该就可以避免了吧,都是从新手过来的 |
70 vivoapex 2018-09-16 22:27:35 +08:00 @< href="/member/ETiV">ETiV fuck.. |
71 madaosan 2018-09-16 23:52:19 +08:00 via Android 自己以前写的代码。。。。 |
72 sampeng 2018-09-17 00:13:05 +08:00 via iPhone 一个函数一起就 5-6 行。我就临时从数组取个值出来,我就要用 a 啊 b 的。因为我实在想不出用个特别牛逼的单词放这。是,我是可以放下面写一行… debug 很麻烦不说,又臭又长的一句话我宁愿有个 a,b,c |
74 flowfire 2018-09-17 02:40:32 +08:00 via iPhone @ETiV #8 buyed 和 selled 我有时候也会这么写,原因是一大片 xxxed 变量里忽然出现一个 bought 就会觉得很难受浑身不舒服 |
75 mingl0280 2018-09-17 04:30:59 +08:00 反对 3,太花哨的主题反而很难读好吧 |
76 viator42 2018-09-17 06:40:32 +08:00 via iPhone 有经验的上来就能考虑并发可扩展性避免输入错误这样的情况,新手只是完成业务逻辑了事 |
77 CodeMan27 2018-09-17 06:58:04 +08:00 via iPad 现在 jetbrains 全家桶的高亮已经做得很好了,不用自己改 |
78 lusheldon 2018-09-17 08:13:23 +08:00 via Android 其实这是一个推广贴吗? |
79 xxgirl2 2018-09-17 08:23:00 +08:00 小组织没有统一风格很正常,何况有的时候老大也直接啪啪一串空格敲下去 有的人接过来还知道 astyle 一下,有的也就那样直接上了 当然对我来说 windows 上用 vs 必然配得五颜六色的,漂亮又省事 linux 上 eclipse-cdt 也能五颜六色的,最近打算试试 vscode,还没调教 |
80 Allianzcortex 2018-09-17 08:46:45 +08:00 @Phariel 用 return a==b 这样的一行语句么?我觉得这个写法粗糙了点但也很直观啊 |
81 z54749412 2018-09-17 08:49:44 +08:00 来一波 github 看看大佬是怎么样的老手。。。。 |
82 Pythoner666666 2018-09-17 08:57:06 +08:00 其实不用这么多,看一眼变量名就知道了 |
83 zaqmjuop 2018-09-17 09:09:44 +08:00 funcA(funcB(funcC(funcD(funcE())))) |
84 FakeLeung 2018-09-17 09:10:24 +08:00 变量有点不同意。 请大佬们帮我想个好一点的变量名吧。要求一眼就知道干啥的: 商品砼管理 限额领料 质量安全整改通知单 |
85 itskingname 2018-09-17 09:46:13 +08:00 Python 代码: ```python a = [] a.append('aaa') a.append('bbb') a.append('ccc') for i in range(len(a)): print(a[i]) ``` |
86 chenyu8674 2018-09-17 10:16:28 +08:00 if (isReady== true) { …… } else if (!isReady) { …… } else { …… } |
87 YzSama 2018-09-17 10:35:23 +08:00 User user = userMapper.selectById(1); if(user==null){ user.setXXX(); } 以上亲身经历,帮同事调试一段总出错的代码... 我一度怀疑他写的代码是怎么跑的. |
88 enenaaa 2018-09-17 10:52:20 +08:00 @itskingname #85, 一看就是写惯 C++的。 |
89 zhaogaz 2018-09-17 11:03:33 +08:00 讲道理,我觉得看不出来。 新手一般都写不出代码。 干了五六年的人还有楼主说的毛病的人大有人在。 |
90 bp0 2018-09-17 11:17:34 +08:00 反对 2,写了好些年代码了,还是纠结变量命名。 |
91 jswh 2018-09-17 11:19:46 +08:00 所有逻辑写在一个函数,不会进行拆分的代码 |
92 storypanda 2018-09-17 11:23:38 +08:00 via Android @Phariel 你指的没有缩进? |
93 storypanda 2018-09-17 11:25:12 +08:00 via Android @zjsxwc 大佬说什么都对,其实不应该这样。 就和知乎普通人写一大段没几个赞,牛逼人物几个字几千赞一样。 |
94 DnC 2018-09-17 11:40:19 +08:00 见过一个 2 货的代码,给他指出问题,还嘴硬不承认。 parents->father->brother->son->sister->m_friend->school->m_class->teacher->name->first_name = "SUN"; 类似这样的;吓得我一机灵。 |
95 DnC 2018-09-17 11:42:55 +08:00 还见过一个,是用 VS debug 之后修改的代码: 前提是有个 enum{ONE, TWO, THREE,....} 这样的, 后来有人在中间插入了一个值,变成了 enum{ONE, TWO, HELLO, THREE,...} 了,于是 bug 产生了; 他 debug 后发现了 bug,并修改为: my_value = 3; 也是吓得一机灵;然后赶紧不点名群发邮件警告。 |
96 Mrbird 2018-09-17 11:43:06 +08:00 代码高亮这块不敢苟同 |
97 ihavecat 2018-09-17 11:50:39 +08:00 你说命名用中文名让我想起了上次那个用表情包给 js 还是啥的命名变量的,底下全部看懵逼了 |
98 pkoukk 2018-09-17 12:01:24 +08:00 呃...我用过的 IDE 似乎都会自动帮你解决 1、3 问题。 至于 2..和菜不菜关系不大,即使英语水平正常,很多贼长的业务术语,也难免大家的写法不一样 |
99 closedevice 2018-09-17 12:31:16 +08:00 并不敢苟同,没到本质上.代码时写给人看,其次才是交给机器运行的.良好的代码前提是具有清晰的逻辑体系,就这个样子. |
100 lumnag 2018-09-17 13:07:38 +08:00 这么一说都感觉我自己是老鸟了 |