最近在做一个汽车销售系统的改善工作, 这个系统已经运行两年了, 两年来, 客户不断的提出新需求, 系统也在不断的改来改去。 这次轮到我来改它了。  想想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吧。经常见到有些人,为查一个方法的调用,搜来搜去的。真正的高手是工作效率最高的人,不是用最简单工具的人。今天就写这么多, 大家还遇到过什么样的编程恶习,欢迎补充。
大家不要总是抱怨什么工资太少,工作量太大。工作效率这玩意儿是要经验来做基础,这没错,经验少也没事。咱平时写程序的时候多上点心,多对自己的代码思考一下,多动动脑子。自然就能总结出最好的工作经验了,工作效率自然就提高了。
也别总是说什么STRUTS不好,HIBERNATE太慢,不屑去用它。人家的程序能在全世界流行,自然有他的过人之处。多读读他的代码,学习一下他到底好在哪里,如何才能把这些优点应用到自己的代码上。这才是最重要的。
写出上面这些代码的人,如果你的工资真的很少,那我只能惋惜的说一句:你的工资是可怜了点,但看您写的这代码,连这点工资都不应该给你!!

解决方案 »

  1.   

    >> 最BT的一段代码是缩进居然出了屏幕!!!
    太强了!
      

  2.   

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

  3.   

    最BT的一段代码是缩进居然出了屏幕!!! 你吃饱了撑的呀, 没事缩那么远干吗, 我根据后台输出找了半天也没找到那段代码在哪儿, 原来是因为缩进的太远了,不在屏幕范围之内, 向右拉了半天滚动条才找到。 你丫是不是写着代码睡着了? 脸正好砸在TAB键上。
    ━━━━━━━━━━━━━━━━━━━━━
    这句话太可笑了,居然还有这样的人哇
    前几天看一个初学者的代码,是JSP文件里的<table><tr><td>的,大家应该知道的
    这位朋友用得太好了,真佩服,几十层的<tr><td><table>一大堆,不过这位严格遵循规范
    每一层都有缩进,靠近里边的层,需要移动滚动条才能看到━━━━━━━━━━━━━━━━━━━━━
    If(flag .equals(“submit”)){
    model.getInfo();
    }else{
    model.getInfo();
    }
    ━━━━━━━━━━
    if 语句没有用就不说了,应该把字符串放在前边(避免异常),这是编程的良好习惯哈
    ( "submit".equals(flag) )
      

  4.   

    多看 c++ gotchas 一书。
      

  5.   

    我刚刚又遇到了这样一个代码, 整个模块没有JSP, 所有的JSP,HTML, 连JS代码都是在servlet里Out.pringln(String)的...........天啊, 神啊救救我吧............... 我们工程布署不规范, 哪怕是改个普通的工具类都要重启才行.重启的可是weblogic呀,我只是想改一个JS代码呀 ..........累死人不偿命啊
      

  6.   

    深有体会,我都修改别人代码好久了,前人都是所谓的高手,留下的代码没有什么注释,代码也编写得不规范,和散文比较相似,我都要cao TNND 了。不过现在基本全部重新写完了,前人的功能我都实现了,不过代码基本全给丫废了,自己写的,整齐规范而且注释全。
      

  7.   

    种种问题是程序员的惹得祸?
    谁不想把程序写好,但是,你的老大天天让你快,什么什么问题n天搞定,从来不关怎么做,你也许加个通宵班才能做完。
    还有关于缩进,现在ide都可以自动format,你可以format成自己喜欢的格式,难道这还成问题么,又不是用写字板编程。
      

  8.   

    我维护的这个项目是四年前的,
    现在还在卖,里面的代码可想而知.LZ说的那些问题,我这里基本上有,
    我是新来的,有什么问题也不大好问,
    有些人压根没有把我放在心上,
    也不知道高傲什么.我们有个TableBean几K行,没有注释的.
    把数据查出来,一个打印方法就把
    所有的东西全输出来了,
    public void printReport(JspWriter writer)
    一口气全输出来,
    这个表格还有排序的功能,厉害
      

  9.   

    to:zzhzzh204553(真的好想你) 
    呵呵你不是说我吧,怎么跟我写的东西一样啊,呵呵,不光成列排序,还有很多可扩展的功能!
    to:楼主
    在很多方面用editplus比用ide效率要高,当然只是我个人认为啊!
      

  10.   

    补充:我用的是 asp.net 。没有注意看分类。
      

  11.   

    哈哈!!! 我真的感谢..今天能看到这篇文章!!! 太好了.. ... 
       我大三了..  楼主说的那些行为 除了IDE外 别的自己感觉良好!!! 
       我在学习的时候经常看的是Sun 的 源码!!! 你可别说 真管用 !! 自然而然 的在写程序的时候就想 加注释 多态 异常 继承 封装 那些最最基础的概念 也都是在看源码+实践慢慢体会的!!!   谢谢楼主写的这篇文章!!  !!!
      

  12.   

    最怕的是客户不断让你加一些“小功能”,或者“稍微”改一下。原来的逻辑很可能就被彻底破坏打乱
    我TMD身有同感!!!!!!!!!!!!!!!!!!!!!!!!!
      

  13.   

    有些人提到用EDITPLUS的效率其实也很高, 这点我也承认. 但我想说明一下, 我所见到的用EDITPLUS那个人, 根本没有发挥出editplus应有的效率和功能. 在他的手里editplus只是一个多了颜色区分的记事本. 编译程序还是用javac , 也不会用ANT, 发布程序还是手工拷贝. 号称四年经验的程序员, 刚到公司时用了一天时间重装好电脑后, 写了一个打印hello world的程序测试环境. 结果不写static void main方法, 直接就要用java去运行. 运行不成功还说系统配置有问题, 需要再重装.  每次帮他调试程序, 想查一个方法的调用, 一个文件一个文件的搜, 看得我这个急...........时间全耽误在这上了, 这样的工作效率, 加班都是活该的
      

  14.   

    一个项目启动之前的准备实在是不能就这么:省了也罢,国内开发行业的诸多不规范,原因有很多,有一部分是客户不懂软件工程,急于早点看到系统面庞,还有一部分原因是开发承接公司的管理水平不足,特别是小公司,根本谈不上软件工程管理,只求速度不求质量。
      编程人员的习惯、经验、水平不尽相同,关键是需要管理上去统一去要求才能避免这些情况的出现。代码写成这样实在不是Codinger的单方责任。想办法提高一下管理水平才是根本的。
      

  15.   

    同情楼主。每个方法最好控制在20行。注释应该有,但不要求多,而要求恰当。最理想的注释是代码本身。因为要达到代码和注释总是保持统一比较困难。对于代码的格式既然知道用IDE可以格式化,那为啥你不亲自格式化一下?有一点不同意楼主,汉语拼音并非一无是处,当业务范畴内的专业名词过多,并且很难翻译的时候,就应该用汉语拼音,总比靠自己的想象编出一个蹩脚的短语来的好。起码大家都能看懂。一个事物是否可用并不在于它是否流行,合适的就是最好的。提醒初学者,我从来不建议从jdk+记事本+jdkdoc开始学习java。当我们吃苹果的时候我们不会关心苹果的复杂的内在结构,我们只需知道它的颜色和味道。当我们用IDE可以写出一手漂亮的程序后再去学习jdk,虚拟机的本质,一点都不晚。所以提醒某些人,不要在误导初学者了,因为那种方法根本不符合人类认识这个世界的过程。
      

  16.   

    我们公司有规定,改代码的时候,不许修改原有代码的格式。 不管他多乱,也不许改。 我不明白这是为什么,也许是检查代码的人,要用文件比较工具吧。 
    --------------------------------------------
    我也想用IDE自己格式化一下代码, 但是公司不让, 我没办法啊. 
    可是写代码的人完全可以自己格式化一下再提交到公司的代码库里.
    多为他人着想一下.其实大家可以看到,我举的这些例子, 并不需要太多的工作经验,甚至不需要什么高深的技术和专业知识. 
    我觉得出现这些问题的根本,更多原因是程序员工作不认真, 太懒,不爱动脑子造成的.
      

  17.   

    敬仰楼主,学习ing
    我们公司有代码规范,就是没有人做...
      

  18.   

    >> 最BT的一段代码是缩进居然出了屏幕!!!
    太强了!
      

  19.   

    未免太短了点
    我想200之内还是可以接受的
    ==========================
    偶觉得200行当然太长,在17吋CRT显示屏上,1024×768,看完一个函数要翻7屏!如果为了能承上启下,每次只翻半屏,那就要翻近15次。谁受得了?如果接手过别人的代码,就知道那种感觉比自杀还难受。实际上20行左右是合适的,不仅从逻辑上,也从物理上保证了不用翻屏就可以让一个函数从头到尾尽收眼底,这对后期维护代码的人来说是很重要的。另外,20行逻辑上也不是小数目,不要仅仅从直观上上感觉20仿佛是个小数字,对于Java这种库功能非常丰富的语言,20行不少了。举个小例子:编一个求解二元一次方程的程序,要考虑复数根的情况,不求输出很漂亮的话,连输入带输出整个程序应该也不会超过50行。
      

  20.   

    顶你一下
    有没有人能传一份公司关于代码的规定给我啊   [email protected] 先谢谢了
      

  21.   

    有同感,楼主,俺的开发经理就是这样,公用方法的源代码全是汉语拼音的开头,每个方法代码量很大,没有什么所谓的面向对象的概念,一堆的参数和if,else,而且要的参数有汉语拼音的所写,有英语,也有拼音和英语凑一块的,人家从来不进行判断空操作,每次调用他的公用犯法出错,我都得去一个个找,看看那个参数传错了,如果没传错,人家还让我帮他找错误,!现在弄的我精神都要崩溃了。不过没办法,人家是研究生,又是开发经理,只能忍受了!
      

  22.   

    >> 最BT的一段代码是缩进居然出了屏幕!!!
    还好楼组没有把它当作空行直接删掉。
      

  23.   

    qhdream() 
    ========
    估计是新手写的吧.
    文笔还不纯熟呀,风格还没形成.
    哈哈~~~
     
    楼主辛苦了,是不是觉得还不如自己写一遍好呢.呵呵
    -------------------------------------------------------------
    不同意,基本上垃圾程序都是一些“有经验”的老程序员写的,
    然后还误导新手
      

  24.   

    别人的代码拿过来都会放到JBuilder2005里按一下Shift+Alt+K再看。
      

  25.   

    想請問一下struts 和hibernate 好不好用, 慢不慢, 和source code 有沒有beautify 有什麼關係?
    說實在的struts 和hibernate 也沒寫得多簡而有力.
      

  26.   

    回复人:steedhorse(晨星) ( 一星(中级)) 信誉:110  2006-10-19 13:03:32  得分:0
    ?  未免太短了点
    我想200之内还是可以接受的
    ==========================
    偶觉得200行当然太长,在17吋CRT显示屏上,1024×768,看完一个函数要翻7屏!如果为了能承上启下,每次只翻半屏,那就要翻近15次。谁受得了?如果接手过别人的代码,就知道那种感觉比自杀还难受。实际上20行左右是合适的,不仅从逻辑上,也从物理上保证了不用翻屏就可以让一个函数从头到尾尽收眼底,这对后期维护代码的人来说是很重要的。另外,20行逻辑上也不是小数目,不要仅仅从直观上上感觉20仿佛是个小数字,对于Java这种库功能非常丰富的语言,20行不少了。举个小例子:编一个求解二元一次方程的程序,要考虑复数根的情况,不求输出很漂亮的话,连输入带输出整个程序应该也不会超过50行。
    =======================================================================
    20行?一般情况下,空行+注释应该会超过一半吧?
      

  27.   

    写得不错代码风格是应该注意的问题。偶前段时间在csdn上看到一个peter的nthcode的信息,后来邮件联系,要求做一个两数相加的程序。我初看起来,觉得这问题容易,不就是两个数相加吗?后来仔细研究题目,才知道并非易事。一:他没有说是正数,或是负数;二:数是带小数位的;三:数带有指定的基数(如普通的阿拉伯数字是以10为基的);四:数的大小没有限制,也就是说可以是非常巨大的数。虽然规模也不算大,但这个问题足足花了我三天的时间来解决,基本没有写什么注释,算法也没有时间去优化,代码也没有重构。要是对大数算法有兴趣的,我可以把代码发出来
      

  28.   

    我同意楼主说的大部分,但对使用汉语拼音上我觉得并不是一无实处,毕竟我们日常用的最多的还是中文,我以前在一个公司干(还是大公司)的时候,所有的表结构名称全部是中文,例如手机号码,全部这样sjhm,证件号码zjhm,我刚开始看的很郁闷,这什么意思,后来慢慢熟悉了,一看就知道什么意思,修改起程序到感觉用中文真的还不错,不过,这家公司代码注释确实太少了,几千行的存储过程既不注释也不对其,害的我刚开始改程序都得用Ultraedit对齐!!!
      

  29.   

    最BT的一段代码是缩进居然出了屏幕!!! 你吃饱了撑的呀, 没事缩那么远干吗, 我根据后台输出找了半天也没找到那段代码在哪儿, 原来是因为缩进的太远了,不在屏幕范围之内, 向右拉了半天滚动条才找到。 你丫是不是写着代码睡着了? 脸正好砸在TAB键上。-------------------------------
    笑死俺了.....; ┏━━━━━━━┓
    ┏┫    |||┣┓   ┏┓
    ┗┫━━ ┃ ━━┣┛   ┣┫
     ┃ ━━━━━ ┃  ┏┳┫┣┳┓
     ┗━━━┳━━━┛  ┃    ┃
       ┗▇▇▇━━━━━┻━━━━┛
        ┛ ┗