寸锐斋

不送不迎 真君子自来去 无晴无雨 大丈夫何逍遥

方剑斌ID:cunruizhai
205701次访问,排名311好友1人,关注者8
变化是唯一不变的。
cunruizhai的文章
原创 31 篇
翻译 0 篇
转载 0 篇
评论 557 篇
寸锐斋的公告
下载最新Firefox打败微软:
最近评论
zheng_:not "Redundency",is "Redundancy"
soonqian:也别整天什么大学生怎么找怎么找的!!!
上高一的时候看着初三是小孩
上大学看着高中是小孩
那工作了又看这大学生无知
大家都在无知中慢慢变成这样
别一棒子把所有大学生打死啊
jiayajun88:当一个架构师也想过,但我想那是个漫长而艰辛的过程,我眼下就是要先做一个合格的JAVA程序员!!!!
jiyanguo_2007:不管用什么方法,能做到行业的顶级就是高手
zxh13939036040:我喜欢上面说的!嘿嘿
文章分类
收藏
    相册
    灯下黑
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 程序员的灯下黑:“逗到底”的程序员收藏

    新一篇: 程序员的灯下黑:如果你想考研究生或是研究生 | 旧一篇: 程序员的灯下黑:不要忘记你的目标

     
    二十年前读中学的时候,有一位语文老师特别促狭。有一次上作文课,上来说,“今天我要请一位同学来读一读他自己的作文。不过这次和以前不同,我要求连标点符号也要读出来。小K同学,上讲台来读吧!”
    小K是班里一位成绩较差的学生,不知道为什么被点名念作文,这通常是优秀学生的荣誉啊。难道小K写了一篇美文?
    被点名的可怜的小K慢慢地挪上了讲台,拿着自己的作文本,在手里捏来捏去,半天也没吭气。
    老师一把拿过来,“我来念吧!”
    只听到老师念了头句,“今天我的作文题目是坚持就是胜利,”说“逗号。”,又念了一句,又是“逗号。”
    开始,全体同学没听出什么意思,不过,在老师读到第十个逗号的时候,就开始有人发笑了。待到老师不停的“逗号逗号逗号”时,全面开始笑成一片。小K这篇文章,竟然是从头逗号到尾!直到文章结束,才有一个句号!
    我当时也参与了笑话小K,年纪见长,慢慢有些同情小K,觉得那位老师不该这么刻薄,让小K如此丢脸。不过这老兄的作文,未免有些太离谱。
     
    以作文而论,“逗到底”的文章大概是最糟糕的文字了。
     
    那么,什么是最糟糕的程序员呢?很不幸,如同写文章一样,有“逗到底”的程序员。更不幸的是,小K知道这“逗到底”是不好的文章,很多“逗到底”的程序员还常常自以为高明!
    什么样的代码是“逗到底”呢?
     
    实现一个功能,不分青红皂白,从头到尾一个函数写到底。你打开代码一看,奥,有一个类,有一个函数,再打开函数,天哪,长到你把鼠标的滚轮摩擦烫了都看不到底。然后他(她)还会告诉你,他(她)的模块很复杂,这是为什么改一个简单的Bug要三天的原因。因为定位到错误点得靠搜索关键字,甚至连搜索都要10秒钟呢!
    于是你告诉他(她),你的代码很糟糕。他(她)的回答是:你看,我的代码很整齐啊!
    “不行,你得重构你的代码!”
    过了几天,告诉你,好了。一看,现在有一个类,两个函数了!原先的大函数被齐腰截成两段,分别放在了原来的函数和一个新函数中。昏倒。
     
    “逗到底”的程序员还喜欢非常深的分支。有一次,有位“逗到底”先生向我展示的代码:最上面是一个for循环,里头有个if…else…,每个if从句有for循环,for循环中还有if…else………我看来一会儿,已经完全迷失了,这老兄还向我解释,“你看,排除这个条件后,进入这……”我又晕。用工具一看,竟然有12层之多。我记得大师说过,人类大脑只能立即理解三层嵌套关系,这老兄,我只能佩服啊佩服了。
     
    写出“逗到底”代码的就是“逗到底”程序员。其实就是不会程序设计的程序员。我把设计分成产品设计,系统设计和程序设计。产品设计是有产品经理完成的,描述了产品的特性,系统设计描述了系统框架,不如数据库和应用服务器的关系等,程序设计就是对代码结构的设计。我发现很奇怪的一点,声称要成为构架师的很多人特别重视前面两个设计,但很少有人关心程序设计。大部分程序员拿到需要文档后,立马开工,UI画上去,遇到什么逻辑就临时加上。所有的逻辑是平铺直叙,遇到干同样的事情的代码,也抽象成一个函数,而是直接拷贝代码。时间一长,代码就彻底“逗到底”了。谁也不敢改。
     
    好了,你,会是“逗到底”的程序员吗?
     

    发表于 @ 2007年03月05日 18:10:00|评论(loading...)|编辑

    新一篇: 程序员的灯下黑:如果你想考研究生或是研究生 | 旧一篇: 程序员的灯下黑:不要忘记你的目标

    评论

    #yyzhao21 发表于2007-03-06 10:37:42  IP: 218.249.26.*
    好文
    #frenzieddragon 发表于2007-03-06 11:55:34  IP: 218.18.52.*
    可怜那个小学生,我觉得他很有创意的,可惜这么一个天才就活生生的被扼杀了。
    #cjqpc12345 发表于2007-03-06 12:24:57  IP: 221.192.236.*
    这样来说,楼主能不能说一下怎么能避免这样的问题呢?
    #buyaowen 发表于2007-03-06 14:05:45  IP:
    to: cjqpc12345
    去看一下重构这本书
    #sea_in_yellow 发表于2007-03-06 17:43:59  IP: 221.221.145.*
    不能一概而论,
    有时候一个长函数也是必要且易懂的,
    #chammechane 发表于2007-03-06 19:55:42  IP:
    推荐Microsoft Press Code Complete Second Edition

    Code Complete, Second Edition
    By Steve McConnell
    ...............................................
    Publisher: Microsoft Press
    Pub Date: June 09, 2004
    Print ISBN: 0-7356-1967-0
    Pages: 960

    里面谈到函数的长度,大约控制在一个屏幕的范围。这样做至少有一个优点,看起来方便。:-)
    #wxt 发表于2007-03-07 00:25:15  IP: 222.64.91.*
    可怜这么有创意的小孩,就被我们劣质的教育系统扼杀了。可惜
    #cunruizhai 发表于2007-03-07 00:45:40  IP: 60.168.85.*
    to sea_in_yellow&cjqpc12345:
    超大类和超大函数是万恶之源。一般的经验认为200行是一个函数行数上限。这也是个程序员体验的问题。看一个函数,屏幕翻多了,就容易迷失。
    最基本的方法就是抽取。比如说,有一段代码是整理界面。有的程序员喜欢排列得整整齐齐对每个组件进行一次移动,并且放在上下文关系很多一个大函数里。往往这个大函数还会多次调用到几乎一样的代码。这样的代码就是可以抽取一个如Layout()函数处理。
    其次如类结构调整。特别是大的开关语句,每一个开关处理一些相似类型不同实现的值,这种代码就可以实现具有继承关系类,利用多态减少消除开关语句。我遇到一个极端例子,重构前,主函数代码5000行,重构后,主函数50行。其他的代码都到了一些类里去了。
    其他技巧,Refactoring一书说的很全。我就不在累述了。
    #kenneth_lueng 发表于2007-03-07 08:41:14  IP: 58.60.167.*
    好像开始有那么点苗头了
    要再好好地学习一下了
    #sdsdsdsghfgfgfg 发表于2007-03-07 11:25:41  IP: 202.181.121.*
    真是一篇好文章,对于程度员程度设计,真是一针见血。
    请作者,总结出避免这种现象出现的方法,以供初学者借鉴.
    强烈请求。
    #nanjingjiangb 发表于2007-03-07 13:01:45  IP: 172.16.4.*
    欢迎大家访问我的BLOG:

    http://blog.csdn.net/nanjingjiangb/
    里面有您所需要的思想和好文章
    #pdw2009 发表于2007-03-07 14:30:28  IP: 211.96.15.*
    高手................
    一个天才就这样被J了。
    记得小学时的语文课就“造句”这样的作业,有一位老兄的作业是清一色的
    ”老师叫我用XX造句“
    ”老师叫我用XX造句“
    #DVD_01 发表于2007-03-08 13:12:51  IP: 122.0.180.*
    楼主写的还不错。
    现在我也算是一名程序员吧,写代码的时候往往没有从整体考虑,都是临时发挥,经常出现代码重复,和结构混乱,代码不能复用。如我以前写了200多行的SQL存储过程,在我开始写的时候思路是很清晰的,但逻辑复杂,该存储过程只能运行在某一特定的客户,效率不错,当换一个客户,又要重新得写一个200多行的存储过程代码。感觉就比较晕,因为以前的存储过程代码结构复杂,不想再基础上修改。
    经常自己学习和别人的经验,现在我一般写东西,喜欢从整体的方面考虑,尽量减少多余的重写代码时间,提高运行效率。

    注:以上只是个人说法。
    #tangfulin 发表于2007-03-09 13:41:30  IP:
    完全是理念的分歧罢了。
    不是所有的代码都需要重构的
    #kurapika5 发表于2007-03-09 14:36:49  IP: 219.137.26.*
    创意吗?偶尔为之,作为笑料或者个人收藏可以,但是这样的作文会是好作文吗?
    #xbf321 发表于2007-03-10 15:20:36  IP: 121.19.195.*
    我也是刚做不就的程序员,说的真是一针见血阿,学习了
    #lqbbduck 发表于2007-03-10 20:30:01  IP: 218.18.150.*
    新人都有这么一个过程,主要是有没有往设计方面去考虑,建议新人可以考虑
    1,看设计模式
    2,写单元测试
    #ttch 发表于2007-03-11 16:43:51  IP:
    现在还有很多程序员在维护这方面的程序。这并不是个新鲜事。
    #chinnel 发表于2007-03-11 16:49:16  IP: 61.56.84.*
    舉一個簡例,闡述一問題。給新手程序員一個提醒。
    無聊的人又何必吹毛求庛?
    #10jqkA 发表于2007-04-30 10:51:42  IP: 169.181.251.*
    这样的事情我也见过(http://huangjien.iblog.com/post/543/119049)。
    也曾经看过一些外国程序员写的SQL语句,一个select足足有500行,做了非常多的表连接;这样做肯定让人没法看懂。难道对性能有好处?不知道有没有人能说说。
    #zhmnsw 发表于2007-05-23 13:36:42  IP: 121.29.38.*
    就事而论,不能太绝对了
    新手写复杂的逻辑代码如果一直逗到底,那就是有问题,因为他还没有能力去理解在某种情况下逗到底的好处,比如在要求效率或者其它地方。
    一件好事,如果你不能把握它,那对你来说未必就是一件好事。
    所以,不要为现实开脱,新手就是有必要有意识的去重构你的代码,等你能够把握代码时再来开脱自己比较好。
    国内程序员犯的一个最大的毛病就是盲目去追逐什么高层次的东西,但往往是眼高手低,忽略了本应该学习的能力。
    #youkebing 发表于2007-06-18 08:37:01  IP: 218.90.16.*
    逗到底的确是个不好的习惯,许多程序员却认为这个是个好习惯。也许这样的人真的不应该做程序员。
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 寸锐斋