程序员的“素质”是什么?

来源:互联网 发布:怎么在手机淘宝开店 编辑:程序博客网 时间:2024/04/20 03:04

在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日 9:24 PM

runmin 发表于2004-06-22 7:01 PM  
我不觉得那个可读性怎么好。
本来很简单的一个事,搞得这么复杂,还说什么可读性?
写这个帖子的人很肤浅。


重构的确很重要,某方面来说命名也属于重构一部分。

yhang 发表于2004-06-23 1:52 AM  
我在公司中要求使用第一种风格,主要是考虑到调试以及将来出错时根据日志定位出错代码方便。

bear 发表于2004-06-23 8:41 AM  
我们公司也要求第一种,不过原因却不是楼上的。
我们的项目经理是个垃圾,除了复制 粘贴 删除 (删除完了还要找你)什么都不知道,就要求我们尽量、把程序写的简单

runmin 发表于2004-06-23 9:06 AM  
为了调试?出错定位?


为什么不在开始就保证没有错误?如果从这方面讲,写的越多,出错的几率就越高。

marising 发表于2004-06-23 9:43 AM  
我觉得第二种好。如果程序非常复杂,按照第一种方式,代码太庞大了,根本无法维护。

zty 发表于2004-06-23 10:55 AM  
由此可以得出:
日本的程序员是按照行数来付报酬.中国的程序员是按照项目来付报酬.

harsh 发表于2004-06-23 1:53 PM  
一个人对事业的素质体现在他的价值上,如果他是一个自由软件者那么他的程序别人是不需要看的,他爱怎么做怎么做。但是对一个团队来说他的程序必须是可读性强的,否者怎么团队的效率是低下的,最简单的饿例子我们身边的都很多。如果为了表现一个人的才能,可以把程序写的苦涩难懂,别人想也不用想。
但在开放源代码的时代里,这样的素质能行吗。
我们要提倡的是团队精神而不是个人主义!

ykj76 发表于2004-06-23 2:34 PM  
to zty:
so sutra

fa2002 发表于2004-06-23 3:04 PM  
zty :说的太精辟了!

yeye 发表于2004-06-23 3:49 PM  
鸡素子

ThenLong 发表于2004-06-23 3:56 PM  
第一种方式好处在于后面再次引用某个值时方便

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

end;

ThenLong 发表于2004-06-23 3:57 PM  
而且不太容易会出现代码行超过80个字符的情况
总之比较爽
:)

win32 发表于2004-06-23 8:27 PM  
本文作者相信没做过大项目,只凭头脑中的"经验"说教,有误人子弟之嫌

.Text Blog 发表于2004-06-24 8:32 PM  

xushu 发表于2004-06-24 10:47 PM  
我觉得楼主讲得有道理,有的时候根本不需要如此复杂,如果仅仅为了表现自己这么做,不见得代表什么素质!

asj 发表于2004-06-25 10:41 AM  
两种都有问题啊,那个求index临时变量值的操作根本就应该封装到一个函数中去嘛,这样写一堆临时变量出来,对程序可读性没有什么帮助,因为这两个逻辑层次操作放在一起,混淆了这个过程的关注目标
我认为比较理想的代码应该这样:
dt.Rows(updateDataRowIndex()).Item(t.BindFldName) = txt

在updateDataRowIndex()里面去作那些乱七八糟的计算吧

Lanyd 发表于2004-06-25 8:51 PM  
日本猪的严重失败,知道为什么很多网站打开很慢嘛,就是因为它们放了这么多的dirty code :D
只用一次的东东还使用了那么多的临时变量,有病呀!

redguardtoo 发表于2004-06-27 8:11 PM  
原文是我原创的。

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

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

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

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


kaneboy 发表于2004-06-28 2:04 AM  
呵呵,碰巧我以前也关于这个帖子写过一篇东东:
http://blog.joycode.com/kaneboy/posts/15274.aspx

awcyy 发表于2004-06-28 11:02 PM  
我也觉得第一种写法好一些,以前觉得把代码尽可能写进一行很“酷”,于是经常写 if XX then a = x之类的语句,也经常写一个长长的"Insert into .....",一行中把所有数据库的列值连接成一个字符串,一次提交,极端时甚至1k/行。(我那时候是用vbscript写asp程序)
后来用了ide,才发现前面一种情况无法在后面的语句中加入断点,而后一种情况则经常让我无法快速知道究竟哪个值出了问题
日后,我想我会更多分行写程序的

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

重点:要方便后期维护

飞鹰 发表于2004-07-14 11:43 AM  
我比较同意透明的说法,理由如下:
http://blog.aspcool.com/tim/posts/536.aspx

微笑的撒旦 发表于2004-08-05 9:24 AM  
我不知道那是什么语言,但是就我看来,第二段代码要清晰得多。变量太多会让人烦躁,不知所云。

我觉得如果一定要赋值,第二段代码中把那个计算公式提出来就够了,容易跟踪结果。但那个公式太简单,而且只用一次,不提出来也没有什么问题。

David Lv 发表于2004-08-20 6:05 PM  
在重构一书中提出了很多这方面的建议。

注释是要有的。但是,临时变量也不能太多。

Robert Mao 发表于2004-08-27 12:31 AM  
我赞同透明思考的观点。 本来讨论技术问题,硬有人要扯上政治问题, 这种“素质”已经不是一个好程序员应该有的了!

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

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




jack 发表于2004-09-25 9:21 PM  
有一定道理。

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

但所说的程序员的习惯还是很重要的

silures 发表于2004-10-10 8:55 AM  
第二种可读性才是强的.第一种看着不仅晕,还恶心.

itpig 发表于2004-10-10 9:16 AM  
2种都有优有劣,
但我还是赞同楼主观点

villim 发表于2004-10-10 10:17 AM  
不要自识过高,本人愚钝,以为第一种方式跟简单明了.更容易形成规范,现在软件开发,能统一规范的开发,不才是软件质量的保证吗?

freeboy 发表于2004-11-10 5:49 PM  
Ping Back来自:blog.csdn.net

freeboy 发表于2004-11-10 5:52 PM  
赞同楼主
http://blog.csdn.net/freeboy20sui/archive/2004/11/10/176120.aspx

jiny 发表于2005-01-21 11:17 PM  
觉得那段日本代码没有可读性的朋友,可能是没有参与过大的工程或项目的原因。
最简单命名就能看的出一个程序员有一个怎样的素养了。
那只是几行代码而已,如果是万行几十万行呢?
你还对这种习惯嗤之以鼻么?
^_^

头太晕 发表于2005-02-21 3:17 PM  
人家小日本儿是按行数算钱的,肯定是能写上的都写上,多写一行多赚一行的钱。
这只说明一问题,太没素质了,为了多赚几日元就把程序写的那么麻烦,简直是素质低下。

呵呵 发表于2005-03-01 9:38 AM  
看具体应用了.
一般人是采用第一种方法,如果你的系统不是要求很严格,比如内存,cpu,运行时间之类的要求.否则还是必须要优化的.

hehe 发表于2005-03-01 9:59 AM  
重构的核心可以简洁地归纳为,
1. 短小的,语意集中的方法method
2. 语意完全的方法名

mslk 发表于2005-03-03 1:02 PM  
维护第一种代码,就像进了垃圾场一样!

最爱白菜 发表于2005-04-09 4:29 PM  
看着我想发火!
真是无聊!
看这样的东西真是简直浪费生命,问题是我已经进来了。
哎!!!
原创粉丝点击