在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
这段代码以前在软工版也见到过,有不少人认为两段代码折射出程序员的素质。一种看法是,日本同行写的代码更规范,可读性更强,因此显得比较有素质;另一种看法是,中国同行的代码更简练,废话更少,因此显得比较有素质。
程序员的素质,这是实实在在的东西,但不是从这两段代码中体现。也许你思维比较灵活,思路比较清晰,脑子转得比较快,对程序的感觉比较敏锐,那你也许更喜欢中国同行那段代码;也许你像我一样,脑子比较笨,想问题容易迷糊,需要多几个临时变量才能搞清楚状况,那你也许更喜欢日本同行那段代码。没关系,哪种风格都可以。我们不难猜到,这两段代码是同一个函数的两种实现方式。作为项目经理,我说,无所谓,你喜欢哪种风格就用哪种风格。只要你素质良好,用哪种风格都不妨碍你成为优秀的程序员。因为,素质并不在这两种风格之中。
那么,素质在哪里?恰好就在这两段代码之外。放这段代码的函数,你给它起了一个怎样的函数名?这个名字能够让别人一眼看懂它的作用吗?这个函数有没有单元测试?函数的功能、出错情况和边界值在单元测试里都能体现出来吗?这才是程序员的素质所在。只要你给每个函数起的名字都能一目了然地看懂,只要你的每个函数都有完备的单元测试,那你就具有程序员最基本的素质。至于这个函数里面的代码,你喜欢怎么实现都可以——或许我应该再加上“重构”这项素质?
面向对象理论说“针对接口编程”,同样的,程序员的素质也体现在接口上。如果到了别人来看你的实现代码,你作为程序员的素质就已经遭到质疑了。还是先在函数名、单元测试这些地方多下下功夫吧。