透明思考@CSDN

思考着的程序员,程序员的思考

用户操作
[即时聊天] [发私信] [加为好友]
透明@CSDNID:gigix
956822次访问,排名34,好友0人,关注者21人。
gigix的文章
原创 361 篇
翻译 1 篇
转载 3 篇
评论 1816 篇
最近评论
sap99:www.sap99.com/,SAP99资料多多

SAP免费资料下载
http://www.sap99.com

有很多的学习资料,推荐一下,
shendl:public static AuthorizationService getInstance()

{

if(null == instance){

instance = new AuthorizationService();

}

return instanc……
lishali12345:你真的需要一直那些所谓的大师来摆弄吗?
我只是一个简单的读者而已,你总是拿一些所谓的名人大家的话来盖人,一个目的无非是想增加你自己说话的分量,其实你自己的话就压根没什么分量,基于对自己的不自信才会导致你在所有的文章中,开头以及结尾经常借大家之口来表达你要意淫的某些观点。
实在不忍心那些大家,经常就从你口之中说出来啊!
carry1002:你好,我是猎头公司carry,我们服务的对象主要是世界500强企业,现在有thougthtworks公司的职位机会,TW是敏捷方法领域的领头羊,有兴趣的朋友请和我联系,我的msn:carry.1@hotmail.com
zdonking:很好,感谢gigix前辈的经验分享。
文章分类
收藏
    相册
    我的图片
    测试
    Arrays.asList("Rod", "Jane", "Freddy");(RSS)
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 程序员的“素质”是什么?收藏

    新一篇: 谁谋杀了Wrox? | 旧一篇: 成就渔者

    在CSDN看到一个很有趣的帖子(http://www.csdn.net/develop/article/28/28005.shtm),里面说同一个功能,中、日两国程序员写出的代码天差地别:

    JAPAN:
      Dim gridItemIndex As Integer 'comment
      Dim currentPageIndex As Integer 'comment
      Dim pageSize As Integer 'comment

      gridItemIndex = e.Item.ItemIndex
      currentPageIndex = meisaiIchiran.CurrentPageIndex
      pageSize = meisaiIchiran.PageSize

      Dim updateDataRowIndex As Integer 'comment
      updateDataRowIndex = (currentPageIndex * pageSize) + gridItemIndex
      dt.Rows(updateDataRowIndex).Item(t.BindFldName) = txt

    CHINA:
      dt.Rows(.CurrentPageIndex * .PageSize + e.Item.ItemIndex).Item(t.BindFldName) = txt

    这段代码以前在软工版也见到过,有不少人认为两段代码折射出程序员的素质。一种看法是,日本同行写的代码更规范,可读性更强,因此显得比较有素质;另一种看法是,中国同行的代码更简练,废话更少,因此显得比较有素质。

    程序员的素质,这是实实在在的东西,但不是从这两段代码中体现。也许你思维比较灵活,思路比较清晰,脑子转得比较快,对程序的感觉比较敏锐,那你也许更喜欢中国同行那段代码;也许你像我一样,脑子比较笨,想问题容易迷糊,需要多几个临时变量才能搞清楚状况,那你也许更喜欢日本同行那段代码。没关系,哪种风格都可以。我们不难猜到,这两段代码是同一个函数的两种实现方式。作为项目经理,我说,无所谓,你喜欢哪种风格就用哪种风格。只要你素质良好,用哪种风格都不妨碍你成为优秀的程序员。因为,素质并不在这两种风格之中。

    那么,素质在哪里?恰好就在这两段代码之外。放这段代码的函数,你给它起了一个怎样的函数名?这个名字能够让别人一眼看懂它的作用吗?这个函数有没有单元测试?函数的功能、出错情况和边界值在单元测试里都能体现出来吗?这才是程序员的素质所在。只要你给每个函数起的名字都能一目了然地看懂,只要你的每个函数都有完备的单元测试,那你就具有程序员最基本的素质。至于这个函数里面的代码,你喜欢怎么实现都可以——或许我应该再加上“重构”这项素质?

    面向对象理论说“针对接口编程”,同样的,程序员的素质也体现在接口上。如果到了别人来看你的实现代码,你作为程序员的素质就已经遭到质疑了。还是先在函数名、单元测试这些地方多下下功夫吧。

    发表于 @ 2004年05月22日 21:24:00|评论(loading...)|编辑

    新一篇: 谁谋杀了Wrox? | 旧一篇: 成就渔者

    评论

    #marising 发表于2004-06-23 09:43:00  IP: 202.102.185.*
    我觉得第二种好。如果程序非常复杂,按照第一种方式,代码太庞大了,根本无法维护。
    #ykj76 发表于2004-06-23 14:34:00  IP: 219.140.86.*
    to zty:
    so sutra
    #yhang 发表于2004-06-23 01:52:00  IP: 219.239.227.*
    我在公司中要求使用第一种风格,主要是考虑到调试以及将来出错时根据日志定位出错代码方便。
    #fa2002 发表于2004-06-23 15:04:00  IP: 203.92.163.*
    zty :说的太精辟了!
    #bear 发表于2004-06-23 08:41:00  IP: 221.0.90.*
    我们公司也要求第一种,不过原因却不是楼上的。
    我们的项目经理是个垃圾,除了复制 粘贴 删除 (删除完了还要找你)什么都不知道,就要求我们尽量、把程序写的简单
    #runmin 发表于2004-06-23 09:06:00  IP: 210.83.202.*
    为了调试?出错定位?


    为什么不在开始就保证没有错误?如果从这方面讲,写的越多,出错的几率就越高。
    #yeye 发表于2004-06-23 15:49:00  IP: 211.162.183.*
    鸡素子
    #zty 发表于2004-06-23 10:55:00  IP: 61.173.114.*
    由此可以得出:
    日本的程序员是按照行数来付报酬.中国的程序员是按照项目来付报酬.
    #ThenLong 发表于2004-06-23 15:56:00  IP: 218.2.127.*
    第一种方式好处在于后面再次引用某个值时方便

    不然每次都是z诸如ADataSet.FieldByName('UserName').AsString
    很不好
    所以都用
    with ADataSet do
    begin
    strUserName :=FieldByName('UserName').AsString;
    strUserID :=FieldByName('UserID').AsString;
    ...
    ...
    ...

    end;
    #ThenLong 发表于2004-06-23 15:57:00  IP: 218.2.127.*
    而且不太容易会出现代码行超过80个字符的情况
    总之比较爽
    :)
    #runmin 发表于2004-06-22 19:01:00  IP: 210.83.202.*
    我不觉得那个可读性怎么好。
    本来很简单的一个事,搞得这么复杂,还说什么可读性?
    写这个帖子的人很肤浅。


    重构的确很重要,某方面来说命名也属于重构一部分。
    #win32 发表于2004-06-23 20:27:00  IP: 61.187.54.*
    本文作者相信没做过大项目,只凭头脑中的"经验"说教,有误人子弟之嫌
    #harsh 发表于2004-06-23 13:53:00  IP: 219.149.46.*
    一个人对事业的素质体现在他的价值上,如果他是一个自由软件者那么他的程序别人是不需要看的,他爱怎么做怎么做。但是对一个团队来说他的程序必须是可读性强的,否者怎么团队的效率是低下的,最简单的饿例子我们身边的都很多。如果为了表现一个人的才能,可以把程序写的苦涩难懂,别人想也不用想。
    但在开放源代码的时代里,这样的素质能行吗。
    我们要提倡的是团队精神而不是个人主义!
    #xushu 发表于2004-06-24 22:47:00  IP: 221.228.16.*
    我觉得楼主讲得有道理,有的时候根本不需要如此复杂,如果仅仅为了表现自己这么做,不见得代表什么素质!
    #asj 发表于2004-06-25 10:41:00  IP: 211.155.226.*
    两种都有问题啊,那个求index临时变量值的操作根本就应该封装到一个函数中去嘛,这样写一堆临时变量出来,对程序可读性没有什么帮助,因为这两个逻辑层次操作放在一起,混淆了这个过程的关注目标
    我认为比较理想的代码应该这样:
    dt.Rows(updateDataRowIndex()).Item(t.BindFldName) = txt

    在updateDataRowIndex()里面去作那些乱七八糟的计算吧
    #kaneboy 发表于2004-06-28 02:04:00  IP: 218.18.43.*
    呵呵,碰巧我以前也关于这个帖子写过一篇东东:
    http://blog.joycode.com/kaneboy/posts/15274.aspx
    #Lanyd 发表于2004-06-25 20:51:00  IP: 219.133.154.*
    日本猪的严重失败,知道为什么很多网站打开很慢嘛,就是因为它们放了这么多的dirty code :D
    只用一次的东东还使用了那么多的临时变量,有病呀!
    #redguardtoo 发表于2004-06-27 20:11:00  IP: 218.79.245.*
    原文是我原创的。

    我之所以写这篇文章,就是因为为了批评某些初级程序员对软件工程,编码风格一知半解的状态。

    一些初级程序员片面地认为注释多,临时变量多,还有使用复杂的命名法就是体现了软件工程,体现了程序员的素质。实际上差的远了。

    两段代码来自一个真实的项目,我就是那个中国程序员。我大多数时候使用C语言开发医疗仪器上的嵌入式操作系统,或者图像处理软件,系统代码行数一般在5万行到20万行之间,一般都是技术骨干或者项目经理的角色,应该算有大系统的开发经验了吧。

    我和欧美程序员,日本程序员都合作过,对国外程序员还有点了解。好的程序员在那里都是一样的。相信我,写出如上代码的那个日本程序员没有入门。他的代码根本不应该放到大型系统中。

    #Builderman 发表于2004-06-29 12:09:00  IP: 61.142.114.*
    上面的两种方法在不同的情况下有各不好处的:
    如果我在一个函数中需要多次用到一个变量值时,
    我们就应该把这个值用一个变量存起来,避免重复获取.
    否则的话,可以直接使用.

    重点:要方便后期维护
    #awcyy 发表于2004-06-28 23:02:00  IP: 218.24.187.*
    我也觉得第一种写法好一些,以前觉得把代码尽可能写进一行很“酷”,于是经常写 if XX then a = x之类的语句,也经常写一个长长的"Insert into .....",一行中把所有数据库的列值连接成一个字符串,一次提交,极端时甚至1k/行。(我那时候是用vbscript写asp程序)
    后来用了ide,才发现前面一种情况无法在后面的语句中加入断点,而后一种情况则经常让我无法快速知道究竟哪个值出了问题
    日后,我想我会更多分行写程序的
    #飞鹰 发表于2004-07-14 11:43:00  IP: 61.185.224.*
    我比较同意透明的说法,理由如下:
    http://blog.aspcool.com/tim/posts/536.aspx
    #微笑的撒旦 发表于2004-08-05 09:24:00  IP: 218.4.98.*
    我不知道那是什么语言,但是就我看来,第二段代码要清晰得多。变量太多会让人烦躁,不知所云。

    我觉得如果一定要赋值,第二段代码中把那个计算公式提出来就够了,容易跟踪结果。但那个公式太简单,而且只用一次,不提出来也没有什么问题。
    #David Lv 发表于2004-08-20 18:05:00  IP: 220.173.127.*
    在重构一书中提出了很多这方面的建议。

    注释是要有的。但是,临时变量也不能太多。
    #Robert Mao 发表于2004-08-27 00:31:00  IP: 218.1.103.*
    我赞同透明思考的观点。 本来讨论技术问题,硬有人要扯上政治问题, 这种“素质”已经不是一个好程序员应该有的了!

    代码“小”和代码“精炼”并不一定等同; 代码的可读性非常重要,这对调试、维护都很有帮助; 另外, “小”的源代码未必能产生高效率的目标码。

    那些卖弄第二类代码的程序员在我看来只是水平和认识还没有够。



    #jack 发表于2004-09-25 21:21:00  IP: 218.1.136.*
    有一定道理。

    大型程序讲求合作。这一段代码其实说明不了太多问题。第二种写法最好有一定注释。

    但所说的程序员的习惯还是很重要的
    #silures 发表于2004-10-10 08:55:00  IP: 61.168.55.*
    第二种可读性才是强的.第一种看着不仅晕,还恶心.
    #itpig 发表于2004-10-10 09:16:00  IP: 218.28.4.*
    2种都有优有劣,
    但我还是赞同楼主观点
    #villim 发表于2004-10-10 10:17:00  IP: 61.157.95.*
    不要自识过高,本人愚钝,以为第一种方式跟简单明了.更容易形成规范,现在软件开发,能统一规范的开发,不才是软件质量的保证吗?
    #freeboy 发表于2004-11-10 17:52:00  IP: 218.11.8.*
    赞同楼主
    http://blog.csdn.net/freeboy20sui/archive/2004/11/10/176120.aspx
    #jiny 发表于2005-01-21 23:17:00  IP: 211.87.237.*
    觉得那段日本代码没有可读性的朋友,可能是没有参与过大的工程或项目的原因。
    最简单命名就能看的出一个程序员有一个怎样的素养了。
    那只是几行代码而已,如果是万行几十万行呢?
    你还对这种习惯嗤之以鼻么?
    ^_^
    #头太晕 发表于2005-02-21 15:17:00  IP: 220.249.44.*
    人家小日本儿是按行数算钱的,肯定是能写上的都写上,多写一行多赚一行的钱。
    这只说明一问题,太没素质了,为了多赚几日元就把程序写的那么麻烦,简直是素质低下。
    #呵呵 发表于2005-03-01 09:38:00  IP: 218.104.235.*
    看具体应用了.
    一般人是采用第一种方法,如果你的系统不是要求很严格,比如内存,cpu,运行时间之类的要求.否则还是必须要优化的.
    #hehe 发表于2005-03-01 09:59:00  IP: 218.4.149.*
    重构的核心可以简洁地归纳为,
    1. 短小的,语意集中的方法method
    2. 语意完全的方法名
    #mslk 发表于2005-03-03 13:02:00  IP: 61.185.194.*
    维护第一种代码,就像进了垃圾场一样!
    #最爱白菜 发表于2005-04-09 16:29:00  IP: 221.213.29.*
    看着我想发火!
    真是无聊!
    看这样的东西真是简直浪费生命,问题是我已经进来了。
    哎!!!
    #我很无聊 发表于2005-05-23 11:19:00  IP: 61.186.252.*
    可以想像,楼主的实际的工作经验究竟在何处,如果素质体现在函数名以及测试单元上,那也许那些只有高中水平的印度阿三严格按照CMM5编写的代码更能体现出最高的素质,严重BS楼主的水平!
    #蛙蛙王子 发表于2005-06-28 10:50:00  IP: 61.186.252.*
    第一种好,可读性,可维护性都比第二种强,不过有些太繁琐了,VB代码本来就繁琐,在简练和复杂之间折中一下就好了
    #Thesus 发表于2005-08-21 20:16:00  IP: 211.100.4.*
    我也觉得第一种比较好
    可读性在团队中太重要了
    毕竟代码不是你自己一个人看的
    写得再简练好,别人不能读懂又有什么用
    #Gavin 发表于2005-09-09 08:34:00  IP: 211.100.21.*
    我认为程序员的素质体现出来的时一种专业精神。

    第一种方法给人的感觉是更加规范,有一种受过专业训练的感觉,更可取。
    #yanjun885 发表于2005-09-10 12:08:00  IP: 211.100.21.*
    简洁,高效和健壮一直是高素质程序员的追求
    #福福 发表于2005-09-10 16:37:00  IP: 211.100.21.*
    我觉得单从这两段程序看不出什么,具体还要实际,如果那些变量需要经常用用第一种比较好,而第二种在那些东西只用一次的时候很好,而且我觉得还是第二种可读性高,我一眼就能看出他这个语句的作用,而第一种最后一句才是关键,其他的没必要
    #baodi_z 发表于2005-09-13 21:55:00  IP: 211.100.21.*
    我从来不把自己定位为程序员
    #jisen 发表于2005-09-16 16:06:00  IP: 211.100.21.*
    我是程序员,但我还没有入门!路漫漫其修远兮,吾将上下尔求所!
    #lumingming 发表于2005-10-26 18:57:00  IP: 211.100.21.*
    这两段代码感觉跟要讨论的素质关系不是很大,作者后面的见解,部分还是认同的,如"函数名看一眼就大体明白这函数的功能,在使用时稳不稳定"。在看了很多的朋友评论中,也有很认同的观点,"一个团队来说他的程序必须是可读性强的,否者怎么团队的效率是低下的"。
    #DD 发表于2006-03-21 11:03:00  IP: 219.136.9.*
    DDD
    #ww 发表于2006-05-04 17:24:00  IP: 61.141.173.*
    介于第1种和第2种之间比较好
    #pxpd 发表于2006-08-18 10:43:00  IP: 202.114.100.*
    我喜欢第二种风格!
    发表评论  


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