英雄的另一面- -| 回首页 | 2005年索引 | - -“盛世”危言

代码.可读性.效率- -

                                      

刚刚在网上看到一个帖子,它给出两段宣称分别由日本和中国程序员写的代码片断,用以说明两国程序员的不同素质。


代码如下:

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

从代码中可以看得出来,前者的可读性更强,后者的代码更少,执行效率更高。发贴者想用这个例子说明,日本人更讲究纪律,而中国人更加"聪明"。这个问题引起了很多人的争论,我也想凑一下热闹,谈谈自己对这个问题的看法。

大家都知道,代码由人来编写维护,由机器来执行。所以它总是牵扯到问题的两个方面:可读性与运行时效率。这两者在某种程度上是矛盾的。

在早期,机器资源非常有限,所以评判一个优秀程序员的标准是,谁的代码编译后size更小,运行时性能更高。即使在今天,低端嵌入式领域在很大程度上仍然如此。

但对于当代的绝大多数非嵌入式领域而言,机器资源已经不是关键问题,而系统的规模却比以前庞大复杂的多。对于复杂的系统,维护问题显得更加重要。所以,当今行业内对于代码的要求更加偏重于良好的可读性。

对于这个问题的认识,大师们总是先行一步,Dijkstra在1972图灵奖颁奖典礼上就说过:"优秀的程序员很清楚自己的能力是有限的,所以他对待编程任务的态度是完全谦卑的,特别是,他们会象逃避瘟疫那样逃避 ‘聪明的技巧'"。Martin Fowler在他的经典著作《重构》中提到,根据局部性原理,一个系统80%的时间运行在20%的代码上,所以只有一小部分的代码才会面临性能问题,而对于所有的程序,可维护性才是最重要的。对于那些面临性能的问题的代码,重构理论的建议也是,同样要以可维护为目标来编写,然后通过测试来找到真正影响性能的部分,并修改它。换句话说,除非有必要,否则,可维护性就是首要因素。

回到上面的两段代码,前者可读性更强,而可读性是可维护性的一项指标,所以前者更加符合现代代码编写方法的要求。

但是,我个人觉得两段代码都太极端了。"过犹不及"。其实完全可以在不损失可读性的前提下让代码更有效率。我不知道上面代码使用的语言是什么(或许是VB?),Anyway,请允许我冒昧的写出自己的实现。

  Dim updateDataRowIndex As Integer 'comment
  updateDataRowIndex =
           .CurrentPageIndex * .PageSize
           + e.Item.ItemIndex
  dt.Rows(updateDataRowIndex).Item(t.BindFldName) = txt

- 作者: 上帝没发笑 2005年02月10日, 星期四 19:20 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=699600

回复

- 评论人:simplu

Fri Feb 25 09:57:59 CST 2005  作者邮箱 

赫赫
老实说
japan的那段代码我倒是没太看懂

评论内容: