• 2006-02-25

    循序渐进

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/1980665.html

    癖,为什么是病字旁,因为它是一种病。一旦达到癖的境界,就成病了,比如洁癖。谁都喜欢干净,但如果眼里完全容不下一丝一毫的灰尘,那就是洁癖。程序员都喜欢漂亮的代码,也期望自己编写的代码可以“相当的”漂亮,但如果因此容不下代码中的瑕疵,恐怕也只有用癖形容了,没错,这也是病。

    什么是漂亮的代码?这简直是与“什么是美女”一样,不同的人有不同的标准。我的标准首先是看着舒服,我是说代码。看着舒服包括的内容也不少,比如代码布局是否合理,变量名是否有意义,函数是否足够短小精悍等等,简而言之,符合自己组织的编码规范。外在美只是给人的最直接印象,内在美才是成为美女的关键,不,是漂亮的代码。一个优雅的设计会让美自然流露,了解一些软件的设计会让人有拍案叫绝的冲动。最近开始的高性能程序设计之旅,让我开始把性能也列入了内在美的行列,相信时间之后就该是空间了。但所有这一切的前提是,为一个有价值的软件正确的编码,否则,就像让我们为某些国家奇异民族的美女打分一样,完全不同的审美标准。

    直到工作的第三年头上,我才写出了让自己能够接受的代码,前后的一段时间,我就有点代码洁癖,每次看到自己代码不舒服,第一反应就是修改。不过,就是那段经历才让我的编码质量不断提高。

    在《体验破窗户》中,我曾提到过换部门后的一些工作经历。那段时间,我被领导教育,因为当时的工作重点在于开发可行的算法,很多实验代码最终可能会被抛弃,所以,我那种字斟句酌的编程方式是没有必要的。事实上,我们确实抛弃了很多实验代码。不过,那段时间产出的代码质量则着实不敢让人恭维。年前,我们Matlab的代移植到了C上,几乎原封不动,由于移植大多是由不同的人完成,其结果是代码质量进一步下降。但关键是,我们已经有了一个指标和性能都能让人接受的应用。

    近来我在做一个部分的设计,因为我们的研究已经进入了另外的一个阶段,原来那种不分青红皂白的工作方式已经完成了它的历史使命。为了更好的进行后续研究,更好的提升我们应用的性能,设计是一条必经之路,设计的结果自然是代码质量的提升。即便有破窗户,也会被限制在一定范围之内。

    看到这里你或许会想,如果一开始就认真设计、高质量编码,不会更好吗?道理是这样的,但实际上,做不到。因为我们的项目属于研究性质,去年的时候,我们根本不知道做一年会是个什么样子,与那些技术风险相对不高的项目相比,有太多不可预知性。可以说这么说,那时候,我们对怎么做完全没有概念,更不用说设计了,所以,当时很难做出恰当的设计。再有,编写高质量代码是需要时间的,而那个时候,我们最为缺少的就是时间,有着大量的实验等着我们,我们要做的就是找到一个可行的路。

    任何进步都是一步一步的,软件更是这样,于是我们看到软件版本不断升级。一步到位是一种不切实际的期望。所有进步的关键是迈出第一步,《DOOM启示录》为我们讲述了John Romero的离子风暴是怎样不断的提升高标准,最终倒置产品的失败。正面的例子是Google Talk——现阶段我最爱的IM工具,第一版的Google Talk简单得“令人发指”,是Googler不知道怎样开发功能强大的IM工具吗?即便不知道,也可以参考MSN、ICQ甚至QQ。但强大的功能,意味着时间,所以,有了最初的Google Talk。

    不同的阶段有不同的目标,就应该有不同的做事方式。一步一步来,循序渐进,急不得!

    分享到:

    历史上的今天:

    引用地址:

    评论

  • 我很喜欢看你的写的文章,虽然我是门外汉,今天也用了1天的时间把你的文章从头到尾读了一遍,还看的不亦乐乎:),说实话,接触过一些技术人员,有孤傲的,有胆怯的,有不食人间烟火的,但很少能看到像你“德智体美劳”全面发展的,呵呵,怎么说呢,也许是技术人员的工作性质决定了他比较封闭的性格吧,有一段时间和技术人员打交道,双方不知所云,搞得我头大,觉得他们都是天外来客,呵呵。今天看来还是能有所沟通。所以,拿你当标杆了,希望技术人员整体素质能有个好的提升,不止是在技术方面,像沟通能力,协作能力,创新能力都得得以提升,我这个做人力资源的就好做多了,祝你工作顺心,多写些好的文章:)
  • 写的不错..

    非常同意对研究性质的东西最好是不要采取先仔细设计的方式,因为那个时候根本就没法做设计的,否则根本就不叫研究性质了...

    不过在这种时候对整个团队的成员是有要求的,我觉得就是要掌握足够的TDD/OO/重构,这样才会让设计慢慢的开始越来越完善,越来越显现出来,否则就真的会变成没有设计了...

    其实按照XP来讲,这个过程就是spike过程了,spike过程本就不需要详细的设计...