什么才是软件开发的葵花宝典?

什么才是软件开发的葵花宝典?
最新跟帖
tracy-he

tracy-he

让我们先从一些现象出发。我们的前提是,软件开发是一项智力密集型劳动。对于智力密集型劳动,我们观察到的现象是,个体的表现差异很大,团队的表现差异很大,组织的表现差异很大,国家的表现差异很大。  这不象体力占主要的劳动,象百米王跑百米的速度也仅比我快50%。但在棋类运动中,一个高手可以车轮战数位低手,而且毫无例外地将他们一一击败!

这些智力运动员表现出的特点是,计算精确而且速度快。  其行为很象东方不败。  虽然关于葵花宝典的传说很多,但最准确的描述只有一个字\"快\"。东方不败已经快到了吓人的地步。就象卡斯帕罗夫已快到了深蓝的地步。

有一则关于物理学家玻尔的轶事,有一次玻尔在普林斯顿大学听两个年青教授演讲他们的工作成果。  期间玻尔突然发言说,如果照你们的研究算下去,会得到一个很有意思的推论。  结果两个年青教授回去计算了两天,果然得出了同样的结论。玻尔是如何做到这样快的?

在软件开发中,我们同样注意到这样一种高手,他们可以每天写出一千行左右的高品质代码。  他们可以运用已有的一些软件包,迅速完成一个新的产品。他们可以在很短的时间内,学会一项新的程序语言或是新技术。  他们表现出一种神奇的速度。

在武侠小说中,所有的高手都有一些凡人不能企及的表现。  象张无忌学太极,用龙爪手击败龙爪手名家;乔峰用太祖长拳击败天下英雄;姑苏慕容以其人之道还治其人之身,令狐冲一剑剌瞎十几双眼睛等等。我认为,之所以他们能做到这样,关键是在于他们快。

快并不意味着不准或品质差。    快与品质并不矛盾。

高手的快,其实包含着很高的品质在其中。如果你因为高手的快,就质疑其品质,那就相当于在问:东方不败出手那么快,会不会刺不准?东方不败并不满足于刺死对手,他会在对手身上刺朵花。  他把杀人变成了艺术。准确来说,他真正的兴趣不在杀人,而在于艺术。

退一步说,就算东方不败第一击有点偏差,他稍作修正后,马上跟上的第二第三击,也会击中他想击中的地方。  在武功差的对手剑还没拨出来的时候,他已杀死对方并刺上了一朵花。  

所以真正的软件高手,他并不满足于他的代码能有效地工作了,他认为编程是艺术,并醉心于其中。在低手能写出一个版本的时间里,他已经写出了第十版。其品质当然不可同日而语。就象一个九段棋手,在给定的时间里,他能计算十种可能,并将每种可能计算到100手之后,从中选择一种最有利的下法。    低手岂有苟全的机会?

高手写软件总是不停地在重构(refactoring)。高手喜欢迭代式开发。高手说,增量就是打补丁,迭代就是推倒重来。对于软件这种东西,写一遍它可能OK(做到这一点也不容易),写十遍就是一个伟大的产品,再多写一遍它就更伟大些。  

高手快的诀窍在于他很熟悉各种东西。  高手看书很快,因为每一本新书里,值得他好好看的新技术只有一两章的内容。他能迅速看完,并准确领会这本书的中心思想和价值。而对于一个新手,每句话都是新的,他都需要去理解,每一段例子,他都需要去试。  

很少看到一种100%全新的技术或理论。就象Java language specification里说的,Java没有使用任何新技术,用的都是业界久经考验的技术。  对于高手来说,那些技术都是他所熟悉的。  自然,很快他就从一个C++高手变成了Java高手。如果一个编程新手学Java,学两年也不如一个高手学两个月的。高手学新东西快。

高手写代码速度快。统计结果说,人均每人月的有效代码速度大概是300至400行。  但那是业界平均生产效率。  对于高手来说,这个数字太低了。每天写300至400行是完全有可能的。因为在写代码时,所有知识都已具备,已经没有任何需要他多花时间的事情了。他甚至很少需要Debug。  

高手重用代码的能力很强,熟悉新的API的速度很快。
jackweung

jackweung

  • 0
    经验
  • 0
    粉丝
  • 0
    关注
微信公众号 微信客服号 APP下载 返回顶部
顾文姬微信公众号

微信扫描关注

顾文姬微信客服号

微信扫描加好友

顾文姬app下载

扫描下载