• 2007-11-29

    微软开发主管的临别赠言

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

    原文:
    http://blogs.msdn.com/jaybaz_ms/archive/2007/11/09/parting-words-for-dear-friends.aspx

    InfoQ的报道:
    http://www.infoq.com/news/2007/11/criticism-from-microsoft-devlead

    InfoQ China的报道:
    http://www.infoq.com/cn/news/2007/11/criticism-from-microsoft-devlead

    有一段时间,我一直想不明白一件事,软件开发中,是算法和数据结构那些实现技能更重要,还是软件设计和编写干净代码的能力更重要。前者的代表应该是微软和Google,后者的代表应该是ThoughtWorks。公司的侧重,在这些公司的招聘过程中,体现得尤为明显。

    所以,我们经常看到一群人为了证明某一个方面的重要性,举出无数的理由试图证明另一方面不重要,这样的争论有如语言之争一样,没有任何一方可以说服另一方,结果便是一群人争论半天,回去各自做各自的事去了。实际上,甚至可以说两者都不重要,因为有为数不少的程序,是在没有太多技术难度,也深入考虑设计和架构的情况下完成的。这也是很多人抱怨自己的工作没有技术含量的原因。

    在我看来,两者都很重要。

    过分强调某一个方面,导致的结果就是另一方面的欠缺,这一点尤其容易出现在有着很强实现本领的人身上。当我们说某人很牛时,多半指的是他能实现出一些别人无法轻易实现的东西,显然,没有人愿意称一个只会写“Hello, World”的人为牛人。所以,一旦不小心被当成了牛,很容易就真的以为自己是牛了,所以,忽略了另一个方面,对于工程很重要的方面。

    有一种说法是,某人牛到写出的代码别人看不懂,这一方面是这个人实现本领过强,另一方面也说明,这个家伙着实不好合作。当然,某些算法初读起来确实令人费解,但大多数情况不是这样。我着实见过一个被周围的人当作牛的人写的代码,一份让我觉得愤慨的代码,除了实现功能之外,一无是处。在工程中,设计出良好的结构,编写出很好的代码,对后续的开发和维护都是一种重要的基础。当某人因为点灯熬油成功修复一个bug而受到大家吹捧的时候,请别忘了,多半这个bug就是因为他自己没有良好工作习惯而埋下的。

    微软开发主管的临别赠言为这种情况添加了一些注脚,微软是一个大家认为的牛人集合体,出现这种情况,只能说明,他们软件开发的另一面重视不够。

    反方向的情况似乎并不明显,没有人会因为自己有良好的设计功底而忽略了自己的实现技能,毕竟,有高超实现技能的人,才是“牛人”。

    不过,强调实现技能这点也有好处的。随着微软和Google对实现技能重视的宣传,大家越来越重视这些基础的东西,这让很多人,尤其是还没有明确自己努力方向的学生们看到了一丝曙光,因为这至少不会让他们一无是处。

    我一直喜欢程序设计是一种艺术的说法,所谓艺术,必然会有一些美的东西在里面。无论是实现了一个精巧的算法,还是搭建出一个宏伟的架构,这些无不是体现程序设计之美的地方。想要体会程序设计之美,那就势必要两手抓,且争取两手都要硬。
    分享到:

    历史上的今天:

    引用地址:

    评论

  • 这是我看过的唯一一篇没有错别字、表意清晰的帖子……论坛上的好多人,写东西都是自说自话,别字连篇,也不管别人看起来是否懂,就好像某些程序“牛人”。
  • 我是今天才注册这个用户的 主要人物就是准备把你的日志都看上一遍
  • See how to replace the following macro code with function

    #define CHECK_ATM(atomiccall, expected) \
    result = atomiccall; \
    if (result != expected) {\
    printf("FAIL: atomic %s returned %d, expected %d\n", #atomiccall, result, expected); \
    }

    Note: The atomiccall maybe is any function in a library whihc has maybe thousands of such functions.
  • 一个追求细节的完美,另一个则是整体的把握,侧重点不同,也许只是公司文化的一种体现吧 ~~~
  • MS, Google的面试都是写个小程序,基本没法考察写clean code的能力。
    回复yawl说:
    ThoughtWorks的招聘流程中,会有一个写代码的环节,写的是一个相对完整的小程序,所以,可以考察一个人写clean code的能力。
    2007-11-30 09:47:17