`
sgwood
  • 浏览: 119973 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

[转帖]说一说编程恶习

阅读更多

       最近在做一个汽车销售系统的改善工作, 这个系统已经运行两年了, 两年来,客户不断的提出新需求, 系统也在不断的改来改去。这次轮到我来改它了。想想 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 吧。经常见到有些人,为查一个方法的调用,搜来搜去的。真正的高手是工作效率最高的人,不是用最简单工具的人。
一些补充:
       有些人提到用EDITPLUS的效率其实也很高, 这点我也承认. 但我想说明一下, 我所见到的用EDITPLUS那个人, 根本没有发挥出editplus应有的效率和功能. 在他的手里editplus只是一个多了颜色区分的记事本. 编译程序还是用javac , 也不会用ANT, 发布程序还是手工拷贝. 号称四年经验的程序员, 刚到公司时用了一天时间重装好电脑后, 写了一个打印hello world的程序测试环境. 结果不写static void main方法, 直接就要用java去运行. 运行不成功还说系统配置有问题, 需要再重装. 每次帮他调试程序, 想查一个方法的调用, 一个文件一个文件的搜, 看得我这个急........... 我的希望是不管用什么工具, 要让这个工具在自己的手里发挥出最大的作用来, 如果用editplus非常纯熟的话, 我也会很佩服那个人的, 而且会虚心的向他学习使用技巧 可他把时间全耽误在这上了, 这样的工作效率, 加班都是活该的。
       今天就写这么多, 大家还遇到过什么样的编程恶习,欢迎补充。 
       大家不要总是抱怨什么工资太少,工作量太大。工作效率这玩意儿是要经验来做基础,这没错,经验少也没事。咱平时写程序的时候多上点心,多对自己的代码思考一下,多动动脑子。自然就能总结出最好的工作经验了,工作效率自然就提高了。也别总是说什么 STRUTS 不好, HIBERNATE 太慢,不屑去用它。人家的程序能在全世界流行,自然有他的过人之处。多读读他的代码,学习一下他到底好在哪里,如何才能把这些优点应用到自己的代码上。这才是最重要的。 也许咱们写不出什么高超的代码技巧,写不出什么华丽的算法,但如果能在一些习惯,细节上做到精益求精,那也对得起自己的代码了。 写出上面这些代码的人,如果你的工资真的很少,那我只能惋惜的说一句:你的工资是可怜了点,但看您写的这代码,连这点工资都不应该给你!!

分享到:
评论
1 楼 jinzhonghua 2007-09-18  
顶一个,写得很对

相关推荐

    [转帖]世界编程大赛第一名写的程序

    标题和描述中的“世界编程大赛第一名写的程序”这一知识点,实际上指向了计算机科学与编程竞赛领域的一个重要概念:即在高水平的编程比赛中,优胜者所编写的代码往往蕴含着高级算法、数据结构以及编程技巧。...

    论坛转帖工具.rar

    总的来说,"论坛转帖工具"是一个简化用户在不同论坛间迁移帖子内容的应用,基于HTML构建,易于使用且可能具备一定的自动化和适应性,以满足跨论坛的信息共享需求。在使用时,用户应注意遵守各个论坛的使用条款,尊重...

    VxWorks 编程的几个误区(转帖)

    对于初学者来说,在学习和使用过程中可能会遇到一些常见的误区和疑惑。本文旨在澄清这些误区,并提供正确的理解和实践方法。 #### 二、常见误区及解答 ##### 2.1 误区一:认为VxWorks是单任务系统 **误区描述**:...

    UBB论坛转帖圣手.exe

    UBB论坛转帖圣手.exeUBB论坛转帖圣手.exe

    编辑人员转帖去水印工具

    本篇文章将详细探讨“编辑人员转帖去水印工具”,并介绍如何使用名为Teorex Inpaint的1.0.0.2版本的软件来实现这一目标。 首先,我们要理解什么是水印。水印通常是指在图像或视频中添加的半透明标记,它可以是文字...

    贴吧转帖工具

    【贴吧转帖工具】是一种专为百度贴吧用户设计的便捷工具,主要用于提高用户在贴吧中的互动效率。通过这款工具,用户可以实现一键转帖和一键8经验签到的功能,极大地简化了传统操作流程,节省了用户的时间,提升了...

    discuz X2转帖工具、采集工具

    1. 社区营销:对于企业或个人来说,使用转帖工具可以帮助推广产品或服务,提升品牌知名度。 2. 信息聚合:对于新闻资讯类论坛,可以通过采集功能快速收集并分享最新信息,提升论坛的新闻价值。 3. 数据分析:通过...

    遍历网页的一段Delphi代码(转帖)

    根据给定的信息,本文将对一段用于遍历网页的 Delphi 代码进行解析与说明,以便读者能够深入了解其工作...理解这段代码的工作原理不仅有助于提升编程技能,还能帮助开发者更好地利用 Delphi 进行 Web 自动化项目开发。

    转帖工具插件 for PHPwind 7.5 正式版.rar

    总的来说,"转帖工具插件 for PHPwind 7.5 正式版" 提供了一个高效且用户友好的解决方案,帮助管理者优化论坛内容的组织和管理,同时降低了操作复杂度,提升了用户体验。正确理解和使用这款插件,能有效提升 PHPwind...

    转帖经典---JAVA设计模式

    这些模式为程序员提供了一种标准化的方式,以便在面向对象编程中有效地组织和构建代码,提高代码的可读性、可维护性和复用性。在Java中,设计模式分为三类:创建型模式、结构型模式和行为型模式。 创建型模式关注于...

    一键转帖功能插件 for 帝国CMS v1.0.rar

    标签 "程序插件-ecms插件" 显示了这个压缩包是针对帝国CMS的程序插件,属于网站开发和运维领域,对于那些希望提升网站互动性和分享性的用户来说,这是一个非常实用的工具。 总结一下,"一键转帖功能插件 for 帝国...

    Html2UBBMaxcj_Softii论坛专用转帖工具

    HTML2UBBMaxcj 是一款专为Softii论坛设计的转帖工具,它主要用于将HTML格式的帖子内容转换成UBB代码,以便在论坛中更好地显示和分享。UBB(Universal BBCode)是一种轻量级的标记语言,常用于网络论坛,与HTML类似,...

    【转帖】Flex 开发入门

    总的来说,Flex开发入门涉及到了编程语言、开发工具、源代码管理和项目构建等多个方面。通过深入学习ActionScript和MXML,掌握Flex SDK和IDE的使用,以及理解Flex的应用场景,你将能够创建出功能丰富的RIA。在实践...

    [转帖] 用C# Generator解决Hanoi塔问题

    【标题】:“用C# Generator解决Hanoi塔问题”揭示了如何使用C#编程语言来构建一个自动化生成器,以高效地处理经典的汉诺塔问题。汉诺塔问题是一个著名的递归问题,它涉及到将一组盘子从一根柱子移动到另一根柱子,...

    【转帖】4412嵌入式开发板学习笔记(一)

    标题《【转帖】4412嵌入式开发板学习笔记(一)》和描述《新手在进行开发学习前,建议先看01-迅为电子开发板入门视频。对开发板和开发环境有一定的了解后,不要盲目接线开机。以下是个人的一点经验,和大家分享一下...

    DSP学习进阶[转帖] 很实用,大家分享.doc

    这一阶段的学习内容不仅限于C语言和汇编混合编程,还将涉及TI的实时操作系统DSP/BIOS以及更高级的编程框架如RF3。DSP5000系列的性能介于高与低之间,因此其开发难度适中,适合于进一步深化对DSP编程的理解和实践。 ...

    用PHP批量生成图片缩略图——活跃论坛转帖

    在PHP编程中,批量生成图片缩略图是一个常见的需求,特别是在构建论坛或社交媒体平台时,为了提高用户体验,通常需要对用户上传的图片进行自动化处理,生成预览版本,即缩略图。本教程将深入探讨如何使用PHP实现这一...

    (转帖)4x4x4立体led显示程序

    【标题】:“4x4x4立体LED显示程序”是一个基于...这个项目对于学习嵌入式系统、硬件控制和图形编程的开发者来说,是一个很好的实践平台。通过这个程序,可以深入理解如何将软件与硬件相结合,实现动态的视觉效果。

    转帖PLCDCSFCS三大控制系统的特点和差异.doc

    PLC 是一种基于微处理器的可编程逻辑控制器,主要用于工业过程控制和自动化领域。其特点是: * 从开关量控制发展到顺序控制、运送处理,是从下往上的。 * 连续 PID 控制等多功能,PID 在中断站中。 * 可用一台 PC ...

Global site tag (gtag.js) - Google Analytics