Thinking in XiaoQiang
世人皆有悲哀,只有你不明白
posts - 56,comments - 150,trackbacks - 0

         最近在做一个汽车销售系统的改善工作, 这个系统已经运行两年了, 两年来, 客户不断的提出新需求, 系统也在不断的改来改去。 这次轮到我来改它了。   想想 N 年前初学编程的时候, 书上, 网上, 杂志上不断的在说, 要养成良好的编程习惯。 然后还给出了 N 长的一大篇文章来介绍一些编程规范。 我这个人是很懒的, 大概的看了一下就过去了。 没有特意的记什么。 好在我这个人也不是特别的懒, 对自己的工作也是很上心。 编程的时候尽可能做到更好。 性能功能能考虑到的都要做到最好。   慢慢的也养成了一些编程的习惯,   时间长了, 下意识的就去遵守一些模式,模范之类的东西了。
        
有了这些习惯, 再看这次修改的系统, 真的是生可忍熟不可忍了。   这次我也不说什么编程规范了, 我就说说这些编程恶习

        
一,   程序没有注释
      
注释 !! 注释 !!! 如果只是打印了一个 HELLO WORLD 您不注释那也就算了, 如果是只有一两百行的小功能类您不注释, 那我也忍了, 可是 3000 多行一个类的业务逻辑代码, 您老人家还不注释 !!!   TM 让我怎么去改代码,   一点业务逻辑的说明都没有, 我改代码的时候,得一边用 DEBUG 调试, 一边替他加注释。 然后才能进行自己的工作。 几千行的一个类,   一行注释都没有, TM 就不觉得颜色单调了点吗 ?

      
二,   不遵守基本的编程约定
      
变量名大小写混乱, 明明是变量, 非要完全大写, 要不就大写开头。 要不就是方法名全是大写, 最牛 B 的一个方法是用中文做方法名, 你丫这时候想起打中文来了, 累不累呀。

       还有人用拼音做变量名方法名,就算您英文不好,稍微查一下金山词霸行不行,现在百度和 GOOGLE 都有翻译功能,稍微查一下英文,也当是学英语了行不行? 您实在太忙的话,不查也就算了,拼音就拼音吧,好赖也算是中国话的。 可是您就别用拼音简写了,英文简写还认不出来呢, 您还用拼音的开头字母当变量名, 那我 TM 上哪儿猜去呀!

 

       三, 不明就里的代码

       系统中经常会出现这样的代码,尤其是在 controller 里居多:

       // some code

       If(flag .equals(“submit”)){

       model.getInfo();

}else{

       model.getInfo();

}

我没写错, if else 调用的方法完全一样,大家也放心,我仔细的看过调用的代码,调用的方法里,也没有根据其它情况来改变他的运行路线。我就不明白为什么要做这个 if 判断了。担心会有什么特殊的业务逻辑, 所以也不赶随便去改他。 猜了半天,感觉最理想的答案是写代码的人,担心以后会有新的逻辑分支, 所以在这里用 if 预留了一个位置, 以后改的时候方便。

数日之后有幸遇见了当初写这代码的老兄,问过之后立刻晕倒,原来是这个代码是参照别的模块的样子写的,别的模块在这里都有 N 个程序分支,通过 if 来判断后决定调用哪个 model 里的方法。但他这个模块很简单,没有什么分支,就是调用那一个方法,但他写代码时,看别人的模块在这里都进行 if 判断了,所以觉得自己也应该判断一下,于是就出现了上面这样的代码。

 

四, 面向过程式的编程方法

遇到过好几次 2000 多行的方法,所有业务逻辑,一气呵成,就用了一个方法搞定。如果是简单的逻辑也就算了, 可是几千行的代码全放在一个方法里,一个类里有无数的重复代码。 这回到好,重构那本书没白看, 现在有了实践的机会了。

难道您自己调试的时候就不觉得麻烦吗? 我在这里不想讨论什么面向过程还是面向对象,也别和我说什么方法多了也不一定就是面向对象的思想。 平时对自己写的代码多上点心, 大家都是在这行干了几年的人了,把代码写的漂亮点有什么不好。

 

五, 代码缩进混乱

我们公司有规定,改代码的时候,不许修改原有代码的格式。 不管他多乱,也不许改。 我不明白这是为什么,也许是检查代码的人,要用文件比较工具吧。

但这下苦坏我了, 代码的格式那叫一个乱。 有顶着行头写的, 有向后空了 N 格的,大概是写代码的人, 为了方便自己找到正在调试的那段代码,所以把代码的缩进变得和其它代码与众不同吧。 那您调试完了到是重新排一下版呀, 这真的不累~~, 现在的 IDE 工具都有自动排版代码的功能, 一个快捷键就搞定了,稍微勤快一点行吗??

BT 的一段代码是缩进居然出了屏幕!!! 你吃饱了撑的呀, 没事缩那么远干吗, 我根据后台输出找了半天也没找到那段代码在哪儿, 原来是因为缩进的太远了,不在屏幕范围之内, 向右拉了半天滚动条才找到。 你丫是不是写着代码睡着了? 脸正好砸在 TAB 键上。

 

六, 多余的后台输出

好几个循环嵌套在一起~~~ 也行, 就算是因为业务逻辑需要,没别的办法也将就了。 好几个循环嵌套在一起查数据库, 咱们最好还是开动一下脑筋, 看看有什么更好的办法。如果还是没别的办法, 那也凑合了。 可这种情况您就别在后台输出 SQL 语句啦, 每次一执行程序,成百上千个 SQL 语句在后台输出, 查数据库才用了一两秒,结果输出这些 SQL 就用了半分钟。 您自己就没觉出程序慢在哪里吗? 您调试程序的时候输出一下也就算了, 提交到正式运行的环境时,就麻烦您,劳您大驾~~ 把那些输出注释掉吧,实在不行留几个重要的输出就行了。 让这种代码影响系统性能~~ 也太冤了吧。

 

七, 打肿脸充胖子

我也不知道这条算不算恶习,也许不算,在有些人眼里还是好事。但也要看具体情况,经常有些人写代码不喜欢用 IDE ,只用 EDITPLUS 这类工具。按常理说,初学者都应该尽量用这些编辑器写代码,对加深学习印象有好处。也有人说高手不屑于用那些 IDE ,我少见多怪, 这种绝顶高手我没见过。

但咱平时工作的时候,要的是效率,您不是那种高手就乖乖的用 IDE 吧。经常见到有些人,为查一个方法的调用,搜来搜去的。真正的高手是工作效率最高的人,不是用最简单工具的人。


//20061019 start
        一些补充: 

有些人提到用EDITPLUS的效率其实也很高, 这点我也承认. 但我想说明一下, 我所见到的用EDITPLUS那个人, 根本没有发挥出editplus应有的效率和功能. 在他的手里editplus只是一个多了颜色区分的记事本. 编译程序还是用javac , 也不会用ANT, 发布程序还是手工拷贝. 号称四年经验的程序员, 刚到公司时用了一天时间重装好电脑后, 写了一个打印hello world的程序测试环境. 结果不写static void main方法, 直接就要用java去运行. 运行不成功还说系统配置有问题, 需要再重装.  每次帮他调试程序, 想查一个方法的调用, 一个文件一个文件的搜, 看得我这个急...........     我的希望是不管用什么工具, 要让这个工具在自己的手里发挥出最大的作用来, 如果用editplus非常纯熟的话, 我也会很佩服那个人的, 而且会虚心的向他学习使用技巧

可他把时间全耽误在这上了, 这样的工作效率, 加班都是活该的
//20061019 end



    今天就写这么多,
大家还遇到过什么样的编程恶习,欢迎补充。

大家不要总是抱怨什么工资太少,工作量太大。工作效率这玩意儿是要经验来做基础,这没错,经验少也没事。咱平时写程序的时候多上点心,多对自己的代码思考一下,多动动脑子。自然就能总结出最好的工作经验了,工作效率自然就提高了。

也别总是说什么 STRUTS 不好, HIBERNATE 太慢,不屑去用它。人家的程序能在全世界流行,自然有他的过人之处。多读读他的代码,学习一下他到底好在哪里,如何才能把这些优点应用到自己的代码上。这才是最重要的。

 也许咱们写不出什么高超的代码技巧,写不出什么华丽的算法,但如果能在一些习惯,细节上做到精益求精,那也对得起自己的代码了。


    写出上面这些代码的人,如果你的工资真的很少,那我只能惋惜的说一句:你的工资是可怜了点,但看您写的这代码,连这点工资都不应该给你!!

posted on 2006-10-16 23:27 小强 阅读(5567) 评论(45)  编辑  收藏 所属分类: 技术相关

FeedBack:
# re: 说一说编程恶习
2006-10-16 23:48 | 马嘉楠
没有注释的代码确实太痛苦了
如果你对业务逻辑再不是很熟悉,那就是相当的痛苦了


用拼音做变量名也不是新鲜事了,
最近碰到一个,数据库的字段名字就用拼音简写,
都气吐血了,哎  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 00:05 | kangxm
严重理解!!!

k他!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 07:17 | xiaosilent
最不能容忍的就是前两点了:没有注释和不遵守规范。

不过你公司也够变态的。明知道代码风格有问题,还不让改...  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 07:47 | fengzl
我们公司更狠,人家其他公司给我们作的内部管理平台人家都放弃维护了(为什么?写的那个叫垃圾!要啥没啥~连数据库视图都不给标出来,运行数据库和文档有严重差异)
丢给我让我改东改西,活活累死  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 08:57 | 捕风
我之前也有幸遇到这样的代码。
N个页面都是2000~3000行代码,鲜有注释,缩进混乱,数据库字段和程序变量全是拼音简写,不明就里的代码(他100行我就能用10行以内替换)。
严重吐血!!!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 09:09 | hi
第三条,笑死我了  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 09:09 | itvincent
那个缩进超出屏幕经典!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 09:46 | 水流年似
饼干啊! 看来你是真的 很郁闷啊 !写了那么多! 我没什么好说的!支持下代码规范吧 呵呵!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 09:56 | Qutr
看了一和二的最后一句我直接喷了。
楼主很幽默阿  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 10:08 | 双面
代码缩进混乱也就忍了,咱用IDE格式化一下,也勉强可以看得过去,注释没有也就没有啦,最TMD郁闷的是直接COPY以前或别人的的类来改,您老人家把业务逻辑改了,方法里的代码也改了,就不能顺手把人家写过注释也改下吗?不想改?删掉也可以啊!!这样的注释比没有还可怕。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 10:21 | greco
其它的规范没什么异议,只是想说注释的问题。忘了在哪本书上的哪位大师说过,如果在一段代码(50行左右)中出现2次注释,那说明你该重构了。看不清业务逻辑说明,这些业务逻辑很混乱,是堆砌出来的成果。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 11:46 | 曲静波
如果一个类拥有2000行的代码已经是不合理的啦。应该重构。至于代码缩进是IDE format的功能。注释问题,是该写的,而且每个方法都要写成javadoc的形式。中文名的问题,也可以理解。如果用中文做类名反编译过来应是乱码~~~  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 12:36 | yuyu123
这只是在class文件里面吧,还好调点,我现在改的jsp被<%%>包围着几千行的java代码,再加几百行零散分布的<script>和没有缩进的HTML,无语啊!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 13:29 | 万金油
第一经常范.....  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 19:15 | 布衣郎
没有规矩,不成方圆,好的代码是让所有人都看得懂的,而最差的代码只能给机器看了。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 20:32 | 卡卡西
数日之后有幸遇见了当初写这代码的老兄,问过之后立刻晕倒,原来是这个代码是参照别的模块的样子写的,别的模块在这里都有 N 个程序分支,通过 if 来判断后决定调用哪个 model 里的方法。但他这个模块很简单,没有什么分支,就是调用那一个方法,但他写代码时,看别人的模块在这里都进行 if 判断了,所以觉得自己也应该判断一下,于是就出现了上面这样的代码。
————————————————————————————————————————————————
狂倒狂倒狂倒狂倒狂倒狂倒狂倒狂倒狂倒狂倒狂倒。。。。。。。。。。。。。
狂汗狂汗狂汗狂汗狂汗狂汗狂汗狂汗狂汗狂汗狂汗狂汗。。。。。。。。。。。
狂晕狂晕狂晕狂晕狂晕狂晕狂晕狂晕狂晕狂晕狂晕狂晕狂晕。。。。。。。。

最后无言!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 22:16 | lagoon
汗!!
半路出家,没有一点软件工程的思想啊  回复  更多评论
  
# re: 说一说编程恶习
2006-10-17 22:25 | Java小白
NB,支持一个!  回复  更多评论
  
# re: 说一说编程恶习
2006-10-18 13:17 | Lionheart
更恶心的是,Html标记都用Java的字符串组装起来,然后用一个Out.pringln(String),搞到页面上去,基本上是这样的,我们的业务逻辑是在Jsp里面写的,我们的显示代码是在Java类里面包装的,晕阿

strRtn = "<td colspan=8><table width='100%' border='0' cellspacing='0' cellpadding='1'><tr>";
strRtn += "<td align='center' valign='center' class='list_td_bar' ></td>";
strRtn += "<td align='center' valign='center' class='list_td_bar' colspan='2' >[[ 0^workflow^workflow.wf_leavebill.AcceptNumber^ ]] </td>";
strRtn += "<td align='center' valign='center' class='list_td_bar' colspan='2' >[[ 0^workflow^workflow.wf_leavebill.AcceptDate^ ]] </td>";
strRtn += "<td align='center' valign='center' class='list_td_bar' colspan='4' >[[ 0^workflow^workflow.wf_leavebill.CurrentStatus^ ]] </td></tr>";
  回复  更多评论
  
# re: 说一说编程恶习
2006-10-18 14:40 | 123bingbing
增开7群,号码 30440732
8群 30756649
9群 30178567
10群 28694497

我们的qq群:15096318 学习程序的都可以来
  回复  更多评论
  
# re: 说一说编程恶习
2006-10-18 15:59 | 小强
@Lionheart


Lionheart真是说到我心里了, 我刚刚又遇到了这样一个代码, 整个模块没有JSP, 所有的JSP,HTML, 连JS代码都是在servlet里Out.pringln(String)的...........天啊, 神啊救救我吧............... 我们工程布署不规范, 哪怕是改个普通的工具类都要重启才行.重启的可是weblogic呀, ..........累死人不偿命啊  回复  更多评论
  
# re: 说一说编程恶习
2006-10-19 16:05 | teak
我的同事,写了个3000行的jsp页面,重构后600行。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-19 16:52 | hyifeng
哈哈,笑死我了。

我和博主一样辛苦,
我曾接手一个统计项目,在不了解业务逻辑的情况下,啃所有的代码。
代码没有任何注释。
不一样的是,我看的是C++,应该比看Java更悲惨。

变量名是一大堆英文缩写,很多名称都是非常相似的。

看这些代码我也是搜索,上下翻飞。
有时候调试也派不上什么用场,因为到处都有计算和集合操作,
没有明白逻辑的情况下,跟踪也不会知道他在干什么。
一边看一边做标记,然后假想......

唯一好比较好的是,代码还算规范。
  回复  更多评论
  
# re: 说一说编程恶习
2006-10-22 10:35 | LifeFree
恩,我经常接触到这样的代码,从刚写代码的新人到写过超过十年代码的系统架构师,都多少存在这样的问题,原因很多。
基本上要依靠写程序的人的自律,和脑子里时时有自己要写出好的代码的这根弦。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-23 12:57 | alex[匿名]
我们的业务逻辑是在Jsp里面写的,我们的显示代码是在Java类里面包装的
--------------
感觉这个最彪悍  回复  更多评论
  
# re: 说一说编程恶习
2006-10-30 10:28 | nada
楼主幽默!!有针对性,写的好  回复  更多评论
  
# re: 说一说编程恶习
2006-10-30 15:26 | darkmagi
比起神州数码的易飞ERP, 这些只能是小巫见大巫
易飞ERP, 所有的表, 全部用编号,最变态的一个表, 物品基本信息表, 400多个字段, 字段名MB001--MB422, 天哪, 随便写点什么东西都要查N久的表, 真是没有最丑陋, 只有更丑陋
  回复  更多评论
  
# re: 说一说编程恶习
2006-10-30 21:33 | suntower
楼上的,这就是您见怪了洒。
人家是故意这么做的,好让您不好修改。这样就可以拿过去让他们帮您改了,好收钱。
我见过一个php程序,函数名全是64位编码的。
就是function R34527348357r65r62389543928549($var879854296)这样的,这是故意加密的了。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-31 13:36 | Samuel Cai
to 小强
关于五,没错,一般都是用版本控制软件来让代码,如果你做了什么功能,可以通过比较来看你的修改。
因此,你可以分两步提交,第一是只修正缩进,记得注释说没有改动代码。第二才是添加你的功能,这样别的人就可以很方便的看出你做了什么改动。  回复  更多评论
  
# re: 说一说编程恶习
2006-10-31 16:48 | hotleave
呵呵,其他的还都没有犯过,只是经常用拼音做变量或函数名,因为咱的E文不行。开了一个IDE后,再开金山词霸机器又太卡了。
至于中文变量名,既然支持,用一下也无防,还清楚明了呢。我不反对用中文变量名,虽说我没有用过。^-^  回复  更多评论
  
# re: 说一说编程恶习
2006-11-01 10:44 | 闵毓
文笔不错,说的都是经典,强力支持。  回复  更多评论
  
# re: 说一说编程恶习
2007-01-14 14:15 | Alex
有点意思,尤其是这句"你丫是不是写着代码睡着了? 脸正好砸在 TAB 键上。"

搂主的脾气特投我,有机会聊聊
  回复  更多评论
  
# re: 说一说编程恶习
2007-03-21 11:07 | lendo
强烈地支持,再简单的方法也要坚持写注释,这样形成习惯,到了业务复杂的时候就能体现他的价值了  回复  更多评论
  
# re: 说一说编程恶习
2007-03-22 07:34 | chorsg
理解!
我公司做的项目当初老总招了几个中专生,另人不解的中专生里面还有原来是学医的,前段时间改他们的代码真想砸电脑。  回复  更多评论
  
# re: 说一说编程恶习
2007-05-09 23:02 | 监听器
楼主幽默!!有针对性,写的好。  回复  更多评论
  
# re: 说一说编程恶习
2008-01-04 22:35 | talentluo
"你丫是不是写着代码睡着了? 脸正好砸在 TAB 键上。"
这句太逗了。。。  回复  更多评论
  
# re: 说一说编程恶习
2008-01-10 17:19 | iu
trstyyufvguiljvj; fgxerajuy6 jmyhfi kuyfi67edjhgc gdi76io8y9 uyhfol mhjfui6yrfi67rorf kuyr9ibn g 7t08 8typt7sgfhg i8g fi  回复  更多评论
  
# re: 说一说编程恶习
2008-05-19 11:15 | xushaoo
其实没必要去怨责那些人,你也许说,你在修改的时候麻烦,但是也许你修改的时间还抵不上别人开发的时间,别人可能两星期出个项目,国内哪有你说的那种好情况,给你写注释什么的,没时间~~~~  回复  更多评论
  
# re: 说一说编程恶习[未登录]
2009-05-08 17:04 | feng
对我们程序员来说,时间就是生命啊,这些恶习其实就是在浪费我们的时间  回复  更多评论
  
# re: 说一说编程恶习
2009-05-15 22:25 | C.Kevin
狂笑....  回复  更多评论
  
# re: 说一说编程恶习
2009-09-22 02:32 | xjay
汗。我还见过数据库表直接用字母a,b,c,d...字段用a1,a2,a3...的呢,更强悍。  回复  更多评论
  
# re: 说一说编程恶习
2009-09-28 13:26 |
没办法啊,我刚刚开始工作,就遇到了老兄说的这个问题,看他的代码就像看天书一样,头疼啊@捕风
  回复  更多评论
  
# re: 说一说编程恶习
2010-01-21 11:19 | 乐疯了
举个例子 我同事写的 TJQuery 方法名。我看了半天都不知道是啥 后来看了整套过程 才发现原来是 统计查询。我日  回复  更多评论
  
# re: 说一说编程恶习[未登录]
2010-08-16 14:07 | snowolf
@马嘉楠
有天晚上,我为了这种问题,重构了一遍数据库!  回复  更多评论
  
# re: 说一说编程恶习
2014-08-05 10:10 | mino
支持,恶习与效率。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: