1. 聚能聊>
  2. 话题详情

22%的故障因代码违规而起,你的代码合规了吗?

image

在美剧《硅谷》中,一对程序员男女朋友甚至为了空格与TAB大打出手。分手的理由就是自己多年代码习惯生的茧,客观上没有对错之分,只是不愿意为了团队的习惯而去迁就自己。

众所周知,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全。试想如果没有限速,没有红绿灯,没有规定靠右行驶,谁还敢上路行驶。

同理,对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的方式一起做事,降低故障率,提升协作效率。阿里巴巴集团故障数据分析曾指出:故障之中22%是由于违背代码规约造成的故障。

码了这么多年的Java,你合规么?
你是否曾因Java代码规范版本纷杂而无所适从?
你是否曾因团队代码风格迥异而协同困难?
你是否正在review一些原本可以避免的故障?
你是否无法确定自己的代码足够健壮?

《阿里巴巴开发手册》文档版本经历了业界栉风沐雨的洗礼,形成了一道独特的风景,她的扫描软件即将在杭州云栖大会全球开源,从此轻松码代码,轻松合规矩,敬请期待。

今儿我们就来聊一聊,那些年,那些事,那些代码:

说说那些年因为代码不规范自己整出的坑?

你被不规范代码坑的最惨的一次是什么?

【Java简史】
Kotlin真的会取代JAVA吗?
Java 9 已在路上,程序员们都准备好了吗?
Java开发者们,那些年我们一起踩过的坑
Java开发者们,一起来聊聊大家的开发规约吧
程序员你怎么学Java?自学 vs. 培训班
作为一名合格的JAVA程序员需要点亮那些技能树?

参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    淘公仔 x 1

  • 奖品二

    聆听专属T恤衫 x 1

  • 奖品三

    虾米VIP月卡 x 3

279个回答

1

易水寒666

说说那些年因为代码不规范自己整出的坑?
还记得早些年犯过的低级错误有:
1、少些一个“=”,把判断写成赋值了。从此以后,判断一定这么写:0 == a,而不是a == 0。
2、变量名不规范,局部变量名和全局变量名一样了,导致后来定位问题好久才发现。。。

你被不规范代码坑的最惨的一次是什么?
已经记不得了,应该没有导致现网严重问题的。

北方的郎 回复

好像这个坑很多人都踩过啊😄

易水寒666 回复

初学者易犯低级错误,汗颜...

北方的郎 回复

呵呵,这个错误我也犯过啊。从类似VB之类的语言转C++的时候特别容易犯。关键是编译不报错,找起来及其痛苦。

孤尽 回复

所幸Java对于if(a=0)这种写法是编译出错的。

评论
5

jackyliu 已获得聆听专属T恤衫 复制链接去分享

1.自己整出来的坑,某个函数两个返回值,自己偷懒,就用了Pair这种数据结构,后来回顾代码,pair.getLeft(),这都是什么玩意儿?头痛啊
2.谈谈被坑吧,我接手了不少其它人的代码,重构了许多,真是一把辛酸泪,说几个奇葩的代码写法你们看看。
a.传递数据不用对象,用Map,其中key还是随手写的magic string,然后读数据的地方到处是Person p = (Person)data.get("person"),天坑啊,没法查找代码的read和write,intellij这样的神器对着这样的代码也黯然伤神了,没法重构,我小心翼翼地重构,最后上线还是出了一些bug;
b.不管什么业务,不管有用没用,只要是java代码,必然先写个interface,再写个实现,这样的代码我不止在一个项目里面见到过,很多人都不考虑interface是解决什么问题,在什么场景下使用的;
c.代码文件名或者数据库表名乱用大小写,不同的操作系统,不同的文件系统,有些是大小写敏感的,有些是大小写不敏感的,这样的问题也遇到几次了。无规矩不成方圆,还是需要约束的。
d.炫技式编程,明明就是一个switch case,非要写成Enum的各种实现;明明一个函数调用就行了,非要用异步化,导致调试复杂;或者在不必要的地方,用AOP,导致处理器里面只能用Object a = args[0]这种写法,后期修改代码很容易出错,Java强类型编译查错的功能就被弱化了。

送个T恤好不?

小白小万 回复

a、b 都遇到过

besthc 回复

遇到过a.b

kavi38 回复

d说的,个人持保留意见。

凯歌丶 回复

遇到过

biang2012 回复

去我的任务查看进展情况,目标达成即可领奖

1214189500944638 回复

b 简直了,太多了 我现在都头疼了,望着这些汪洋大海般的代码疯了

1885925621482329 回复

最烦d. 当年接手的python项目,大量多层的decorator,直接感觉脑子不够用了

孤尽 回复

很好的观点。关于a,这种写法真是小心义义,指不定还抛出ClassCastException. 关于b, 接口是了解系统或者模块的特征。万事万物皆要有适度。 c的话,以《阿里巴巴Java开发手册》中有明确的规定。 d, 我觉得有些人的确是故意写得让人生涩不懂,比如某人经常写可变参数接口,看得想打人。

评论
1

笨笨的粽子妞 已获得虾米VIP月卡 复制链接去分享

说说那些年因为代码不规范自己整出的坑?
和团队合作的时候,有人用拼音命名,有人用英文单词命名,我用拼音缩写或者是英文单词的缩写,然后,跟他们进行讨论的时候,我还要专门整理一份缩写对照表,不然每个人都要问我一遍,那个hhht、hy是什么意思……

再就是曾经因为长时间写了一段时间的R,用箭头用惯了,所以在写Python的时候,把=写成了<-,然后自己傻傻看了一上午没觉得有问题,为啥还报错呢,╮(╯▽╰)╭,智商已下线,让我静静……

再就是Python很看重缩进,以前都是用Tab缩进,不知道那天抽什么风,觉得用空格咔咔咔的摁着很爽,就把Tab换成了空格键。结果在调试的时候各路报错,才发现好多都是缩进少缩了一个,但是你能想象到那一个少写的缩进,我要盯着屏幕瞅多久才能发现吗?就差把脸贴到屏幕上,把研究黏在代码上了。

哎,说多了都是泪,我继续去改bug了……

你被不规范代码坑的最惨的一次是什么?
train_21r_tosh_todc_rfFS_and_5r_9nf_tos_tocos_kbest200_norm_0823,大家猜猜看这是什么!
这是我的定义的变量,/(ㄒoㄒ)/~~。当时是为了参加一个比赛,因为要测试各种算法的效果和调参,自己就灵机一动,想出了个这样的命名方式,当时真心觉得自己太厉害了。然后,然后,然后,当我发现满屏幕都是这些的时候,你知道我内心多受伤吗!!!
自己挖的坑,把自己埋里面也要填平……

以后请叫我“坑王”,(捂脸

孤尽 回复

《阿里巴巴Java开发手册》明确规定了不能用拼音的方式。关于命名,我只能说呵呵。

osswhatde 回复

看了你这个命名真想把你的脸按在键盘上摩擦一万遍

评论
1

shawn.ss 已获得虾米VIP月卡 复制链接去分享

说说那些年因为代码不规范自己整出的坑?
接手一个redis做数据源的项目,糙快猛干出满世界的各种常量魔术字符串,部分字符串出现在了好几个java文件,而且加上各种拼接操作,功能干完了,很爽。
后来一个月,要升级优化需求,接着搞,这些常亮字符串怎么用的?分别代表什么意思?怎么拼接的?Only God Knows,怎么解决?加班。
这种OGK的事情经历一次加班之后,就不会再干了,所有的常亮字符串,包内引用进包里的Constants.java,项目里引用,进xxxx.xxx.com.common.Constants.java,声明成public static final,标上注释,代码里拒绝魔幻字符串。
你被不规范代码坑的最惨的一次是什么?
说一个印象最深的吧:
事务管理,用了spring jdbc template 的transactionManage.startTransaction()方法,做了try和catch,try块里最后做了transactionManage.commit(),catch块里做了transactionManage.rollback(),很完美吧
结果上线运行一阵就接到投诉,说注册成功了,进去app了,结果再操作就提示用户不存在,去数据库里找,真的不在了。
ok,先省略掉当时懵逼惊慌加各种绝望的调试过程(其中包括给rds工作组提工单撕逼rds的持久化问题)
简单说结论,再连续加班72小时之后,发现上面那段代码里,有某个马鹿写的return语句。。。。容我缓一下情绪,当时万匹草泥马奔驰在整个星球表面的情景实在太壮观。。。。
由于中间return,所以commit没有走,rollback没有走,偏偏这个该出错代码又被某个白痴外面防护住了。。。。然后留了一个set @session.autocommit=0在当前的数据库链接里,之后就是上面的奇葩的问题。
现在终于可以云淡风轻的聊这个事情了,不容易,之后的transaction.rollback()和commit()我都弄在finally块里面

孤尽 回复

【强制】事务场景中,抛出异常被catch后,如果需要回滚,一定要手动回滚事务。
阿里巴巴Java开发手册中也说到了。

评论
1

北方的郎 已获得虾米VIP月卡 复制链接去分享

说说那些年因为代码不规范自己整出的坑?
当年VB刚转VC++,一个地方用“=”而不是“==”判断是否相等,搞得自己后来花了2天找这个bug
你被不规范代码坑的最惨的一次是什么?
花了1个月把一个离职哥们的代码全部重写。在这之前已经搞了2个礼拜,最后得出这代码没救了的结论。

无神 回复

无处不在。。

204200987036896061 回复

是啊,最近比较闲啊。

评论
0

null1!il 复制链接去分享

坑一般都是接旧代码修改和旧代码重构,我印象最深的至今难以忘怀:
问题描述是:页面有个css文件,明明html代码里面写了,但是审查元素就是没有。
原因是:居然页面的小角落里面有一个js脚本把这个css文件标签remove了。
蜜汁代码逻辑,浪费生命

yeohwah 回复

我就服你

孤尽 回复

JS脚本参与页面渲染,的确是神坑

评论
2

吾同树 复制链接去分享

不知道什么时候起,总是强迫自己敲空格键

秦-蓝染 回复

我也有,感觉是强迫症啊! 哈 哈 ;-) (逃

评论
0

镜无双 复制链接去分享

如何把设计模式思想代入代码里

孤尽 回复

以后,我会在阿里云大学讲一个设计模式体系的课程,会深入浅出讲解如何与代码、设计、架构、业务结合起来。

评论
0

1053003446246120 复制链接去分享

Kotlin真的会取代JAVA吗?
Java 9 已在路上,程序员们都准备好了吗?
Java开发者们,那些年我们一起踩过的坑
Java开发者们,一起来聊聊大家的开发规约吧
程序员你怎么学Java?自学 vs. 培训班
作为一名合格的JAVA程序员需要点亮那些技能树?

孤尽 回复

Java的生态决定了Java的强势。Java10 更加期待。

评论
0

1821703381268025 复制链接去分享

数据库系统结构还是不错的,但是对于初学的人,作用上还是不够到位。

孤尽 回复

什么 意思?

评论
0

1627483623322770 复制链接去分享

微软老师傅告诉我,变量名和方法名不怕长,一定要表达清楚

孤尽 回复

《阿里巴巴Java开发手册》也是这么说的。

评论
0

1619802934309163 复制链接去分享

我有强迫症,一直沿用阿里的开发手册作为行业标准,代码容不得一点不规范,代码里有一行警告⚠️都不能容忍,所以写出来的代码基本上很少出现bug,所以我觉得要成长一个优秀的程序员需要具备以下几个特质:
1、代码结耦合
2、代码的复用
3、不能因为省事偷懒
4、我好一点强迫症
最后总结:一个优秀的程序员一定是一个懂得如何偷懒的人

孤尽 回复

给你点赞,最新的版本是1.2.0,你可以私信我,我是作者,可以有深入的沟通,给你点赞。

评论
0

榴莲砸不疼 复制链接去分享

码了这么多年的Java,你合规么?

现在差不多合了

你是否曾因Java代码规范版本纷杂而无所适从?

没有,因为没有代码规范

你是否曾因团队代码风格迥异而协同困难?

何止困难,简直不能协同

你是否正在review一些原本可以避免的故障?

已经不review了,review一遍要吐血三升,扛不住

你是否无法确定自己的代码足够健壮?

可以,有了《阿里巴巴Java开发手册》,完全可以确定了!!

讲真,这玩意刚出来第一版就转发研发所有人员看了,大部分还是很合理的,已经推荐为公司的代码规范标准了

为啥markdown语法没效果?

孤尽 回复

现在最新的版本是1.2.0了,今年9月19日会出最后一个PDF版本。

评论
1

realboredjack 复制链接去分享

曾经应为大小写搞错,找了2个人一起看看了30分钟解决
低级错误有木有
说起都是泪啊

0

1250301641455294 复制链接去分享

这个怎么才能过啊,小白迷茫中,我聊过啦😊

温柔的太阳 回复

我和你一样

评论
1

巴洛克上校 复制链接去分享

刚开始的写代码的时候瞎起名,结果导致一处用错变量,害得我找了一天,还有一次是css也是瞎起名导致后期维护搞得我是头昏眼花,最坑人的应该属中英文的标点,最大的坑,而且让我多次被坑,看代码没问题啊,怎么早也找不到问题好几百行一个看了好久终于发现原来是标点用了中文的,崩溃!!不过现在长记性了这种错误很少在出现了!

0

丰盛的云 复制链接去分享

新人报道,谢谢😜

0

绝版货 复制链接去分享

为了团队的习惯而去迁就自己。
众所周知,交通法规表面上限制行车权,实际上是保障公众安全。如果没有限速,没有红绿灯,没有规定靠右行驶,上路行驶发生事件可想而知。
同理,对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,只是限制过度个性化,以一种普遍认可的方式一起做事,降低故障率,提升协作效率。阿里巴巴集团故障数据分析曾指出:故障之中22%是由于违背代码规约造成的故障。
码了这么多年的Java,你合规么?
你是否曾因Java代码规范版本纷杂而无所适从?
你是否曾因团队代码风格迥异而协同困难?
你是否正在review一些原本可以避免的故障?
你是否无法确定自己的代码足够健壮?
《阿里巴巴开发手册》文档版本经历了业界栉风沐雨的洗礼,形成了一道独特的风景!!

0

bennyshao 复制链接去分享

mark

0

巨石巨硬 复制链接去分享

违个屁龟~~~写个代码都能联系到政治洗脑!!!!

13