Freigeben über


在微软开发软件的几个重要专业

过去几个月,我先后在中国数家知名大学举行了讲座,并会见了多位致力于数据平台研究的学术领头人和学生。我还在一些业界会议上发言,与用户、合作伙伴、分析师和其他同行会面。这些会议涉及了多个议题,例如,日新月异的科技发展趋势,异地分布式软件开发,以及亚洲的蓬勃发展。但有一个议题似乎得到了最大的关注——微软是如何组织和进行产品开发的?我想这很自然,微软是全球最成功的软件公司之一,而亚洲软件行业正经历其自身的飞速发展,因此业内人士迫切地希望了解我们过去20多年的经验也就在情理之中了。

“微软是如何组织和进行产品开发”其实是一个很大的题目。在微软内部我们有一个卓越软件工程团队,主要为员工提供为期数日的课程,内容涉及微软软件开发方法概述、工程系统、组织架构、最佳实施办法,以及用以保证产品质量、可靠性及安全性的内部工具和技术等等。这并不意味着我们的体系已经十全十美,但我们的确积累了很多知识和经验可以与大家分享。实际上,我们也在以适当的方式与全球(包括亚洲)同行分享这些成功。

因为这是一个大题目,我想在这篇文章里着重介绍我们工程系统中的一个方面,即我们研发团队的核心专业和每个专业在产品开发中所扮演的角色。因为我相信微软在这一方面的做法不同于我们的同行(即使在美国也是如此),尤其在中国,目前业界还没有充分理解这些核心专业及其所扮演的角色。

微软的工程体系一直由三个核心专业组成:开发(Development)、测试(Test)和项目管理(Program Management),英文简称分别为Dev、Test和PM。在此,我将以另一个顺序作简单介绍:

PM

提及软件专业时,大多数人都马上想到Dev。但是对我来说,一切则从项目管理开始。在微软,PM意味着很多事情,对我而言,这个角色主要意味两件事:

  1. 了解用户的需求,并将其转换为用于开发的功能说明(Functional Specification)。这是一切的开始,如果我们无法理解用户,我们就不能开发出合适的产品。
  2. 协调Dev和Test,将最初的功能说明转变成真正的产品。

我发现很多人,特别是在中国,一听到PM就认为这是Project Management。事实上,这仅是PM工作的一部分(上述第2点)。PM真正的技能在于倾听用户并从他们的角度理解问题,然后设计出解决问题的方案。这并不意味着简单地为用户提供他们所需要的,而是在真正理解需求后设计最好的解决方案,即使这是连用户自己都从未想到的解决方案。常言道,如果我们一味地遵循用户的要求而只是去找寻一匹更快的马匹,那么汽车永远也不会诞生。

Dev

三个专业中,Dev可能总是人们知道得最多的。他们负责实际设计和开发软件产品。Dev 的主要工作是实现PM制定的功能说明。在系统级的、关键任务级的软件世界里,这个实现应该极为可靠、安全、 便于管理、 可以扩展和高性能。Dev的设计和功能实现应经得起时间的考验,并在未来版本中得到重用。

Test

外界对微软测试工程师存在许多误解,内部有时也存在这个问题。多年前我刚进入微软时,我(愉快而)惊奇地发现在微软Tester的人数几乎和Developer同样多。在我之前服务的公司,测试人员要少很多(当然产品的质量会相对薄弱),因此在微软工作了一段时间后,我才真正了解测试专业的本质。在微软,我们何时可以发布产品并不取决于我们何时完成产品的设计和实现,而是取决于我们何时能完成产品测试。因为我们所发布的每个产品,尤其是系统类型的软件,必须通过一个极高的质量标准。测试专业的确是一个非常复杂的领域,一个Test必须花好几年时间才能掌握悟我们所应用的测试种类——单元测试、功能测试、集成测试、压力和远距测试、性能测试、安全性测试,以及本地化测试等。我们在测试中运且用的一整套工具和技术的复杂性令人印象深刻——自动测试套件,自动测试生成工具,自动检测故障分析工具,自动安全模糊测试和基于状态机的测试。 

以上三个核心工程专业就像一张3条腿的凳子——一个也不能少,并且需要一个合适的工程组织保持其平衡。没有一方可以凌驾于其他任何一方,否则这个组织就无法与客户需求保持一致,或者无法在产品质量上下足功夫。这 3个专业类似政府部门间的制衡机制,这套机制确保了我们能理解客户需要,设计高品质产品,同时每个发布的产品都在各方面满足顾客的期望。 

这里需要强调的是,我们一直在招募这三个领域最优秀的人才,他们的招聘条件同样严格,只是每个领域的技能和关注方面有所差异。PM通常热衷与客户一起构思应该设计什么样的产品,然后与Dev和Test同事协作完成所需要的产品。Dev对设计高品质软件更富有激情——产品应是革新的、简单的、可靠的、安全的、可扩展的、高性能的并能经受起时间考验。Test则爱好,在我们向客户发布产品前,竭尽所能找寻出软件中所存在的所有问题和漏洞。

我们的面试官有一项非常重要任务,就是找出应聘人员的才能和激情所在,然后引导他们向那个方向发展。当然,在个人职业生涯中激情和才华可能发生改变,员工个人也可能因为从事的工作领域不同而有所改变——我本人就曾是从Dev转为PM。这是很自然的,我们实际上也鼓励这种做法以构建更好的队伍。

其他领域

除了以上三个历来被视为微软“核心”的专业,另外几个专业也变得日益重要。例如,使产品使用更自然、直观的用户体验专家(User Experience,简称UX)。良好的用户使用体验能让人爱上一件产品,反之则甚至可以让用户不愿去触碰它。用户体验无疑对为终端用户设计的产品至关重要,同时对我们的开发人员、 I T专业人士以及信息工作者而言也是如此。

当我们进入“软件+服务”的时代,各种与构架、开发和运行极大型基础设施的领域变得越来越重要。需要重申的是,这些曾经只存在MSN和Live 等网络产品开发过程的专业,现在对所有产品组都变得日益关键,因为他们正逐步将产品融入这个“软件+服务”的新模式。

很多应聘人员问我在微软什么样的角色更适合他们,以及如何发展他们的职业。我能想到的最好建议是在他们真正热衷的一个技术或角色上下功夫。正如我刚才说过,我们对所有专业同等对待,一个均衡的组织需要在各个领域上都有突出人才。尽管不同专业需要不同专业技能和爱好的人才,但所有专业都存在创新和有所作为的机会。所有领域都提供了技术晋升和管理晋升的阶梯。事实上,如果你留意微软高层管理人员会发现他们中有从各种领域脱颖而出的 —— 他们的共同点是热爱他们所从事的工作。

我希望本次讨论对那些对此感兴趣的人有帮助,如果你有问题请随时在这篇文章之后留言。

下次再聊 -- 再见!

Prakash (孙博凯)

 

* 您可以阅读本文在Prakash个人博客上的英文原文或者在微软服务器与开发工具事业部博客上的中文原始翻译