微软工程院需要什么样的人?

时间:2021-08-20 01:30:28
 

微软工程院需要什么样的人?

 《程序员》

 

 

 

  最近,一篇报道微软亚洲工程院招聘不到合适的开发人员的新闻引起了很大反响。报道发到网上后,很多人认为这是微软傲慢的表现。事实上,恰逢记者也在采访现场,除了此篇新闻的作者过度粉饰数字之外,其大众媒体的定位也决定了其无法深入报道张宏江院长更为看重的原因所在。

  作为新成立的微软亚洲工程院,已有十多个新项目和产品开发列入日程,短短的一段时间便需将人员扩充为百人之多。张宏江说:“过去的五个月中,我们管理人员用了大部分时间在人员招聘上,我们希望吸引更多的优秀软件人才加盟。”

  与此同时,位于南京的趋势中国研发中心在招聘中也遇到了挑战。从上海开往南京的火车上,趋势的CTO陈怡芬同意南京研发中心的研发人员数目扩充一倍,面对这样一个机遇,研发中心的负责人陆剑峰既兴奋又忐忑不安,因为要短时间内招到如此多优秀的人才,面临的压力也不小。为此,他还专门从总部请来了几位研发高级副总裁和全球产品部用户界面总监Amy Ma来鼓气和传授经验。

  对此,很多人耿耿于怀:中国如此多的开发人员,难道就选不出区区几十人吗?

  当然,这些国际性的大公司对人员的挑剔是重要的因素,因为他们都遵循“宁缺毋滥”的原则。然而,当我们了解了这些企业的需求之后,你会发现,其实很多人并不是栽在了网上四处流传的号称可以考察智商的“微软面试题”上,而是很多显而易见的基础知识让他们被拒之门外。静下心来,仔细的分析一下,或许可以为自己的明天找到更好的弥补之路。

  基础知识要扎实,会编程和懂编程差距甚远

?

  衡量一下,你能把用C#编程和懂C#编程区分开吗?

  事实上,能写C代码和真正写一段C程序有相当的差别,这并不是说程序员所写的代码有错误或者不能运行,而是程序整体的架构就不对。软件设计工程师应该知道他写了某段程序对缓存的需求有多高,对CPU和GPU要求是怎样,这些都应该是在他写程序的时候大脑中非常清晰的。如果对整个系统的了解不透彻,就无法回答面试中的很多问题。张宏江说:“很多人只是将语言纯粹当作一个工具来使用,而产品开发所需要的素质远不止于此。”

  现在的高校在讲授计算机课程的时候太分散,没有按照系统的知识传递给学生,因此教学中需要把这些课程结合在一起,学计算机也应该像学数学一样,一环扣一环,把整个体系搞清楚,把软件开发当作一门学问,而不是当作一种工具来学。当然,用培养科学家的方法培养工程师也会有问题,有些人会朝做虚的方向发展,他会蔑视内存管理这些东西。张宏江说:“我在微软看到很多大师,这些人厉害之处在于他们对系统的理解,所以写出的程序才能这么漂亮。”所以,张宏江建议现在的学生应当系统地学习计算机课程,并通过理解将各种内容融会贯通起来,甚至可以通过项目的形式来实践书本中的零散知识。

  加强软件工程的思想

?

  提起软件工程,不同的人大脑中会有不同的想法。而对于研发中心这种以产品开发为中心的机构来说,软件工程并不只是CMM类的学术词汇和质量体系认证,而是软件工程化的开发流程。也就是说,软件设计人员需要了解如何把软件需求变成一个软件功能,如何把功能再分解成模块,以及评估每个模块的开发所需要的时间和优先级。他需要很清楚,哪些功能是必需的——没有这个功能就无法称之为一个产品;而哪些特性是比较吸引用户的;哪些在时间紧迫的情况下是必须要放弃的。

  趋势科技工程与信息部全球执行副总裁梁国屏表示,在全球的研发体系中有专门的管理流程。一个想法要首先变成一份市场需求文档,要评估整个市场份额和趋势所占的比例,产品规格说明书也要确定,项目经理做项目计划,产品设计计划,测试计划,产品开发完成后还要做评估。而在这整个过程中,编码时间只是占据项目时间的1/6左右。

  张宏江说:“如今的产品开发都是很大的工程,不可能是一个人对整个程序了如指掌,所以应该以软件工程的理念去做。每个软件设计的人员不但知道自己需要做什么,还需要了解自己在整个软件开发流程中起着什么作用,如何与其他同事配合工作,共同解决问题。适时的把“架构师”的概念融入整个流程。”

  培养团队合作意识

?

  在面试过程中,面试官会有意试探其对周围事物和人的评价,从中可以看出此人的团队合作意识。微软亚洲研究院在初期招聘时曾经遇到这样一件事情,有一个公司的上下级同时来应聘,在双方互不知晓的情况下,面试官分别请他们对对方进行一番评价。结果上司大骂了一顿员工,员工也大骂了一顿老板。最终上司被否决了,员工被录用,之所以录用这个员工也是因为急需人才。但后来,这个员工在与团队其他人员合作上出现了问题也离职了。

  对于刚从学校毕业的学生,这方面的意识也比较薄弱。一些软件开发高手在学校就做了很多单机软件,但更多表现的是个人英雄主义,而在公司,一定要和其他人合作,研发中心很看重其个性是否过强到无法与其他人合作。比如,看到自己设计的东西,别人给一个建议,就认为别人是给他挑刺,这无疑增大的合作的难度。陆剑峰说:“学生要进公司,需要加强自己的团队合作精神。趋势即将推出的百万程序大赛要求必须3-5名学生组队参加也是因为这种原因。”

  需要强调的是,过度的自信也可能造成团队合作能力的下降,陆剑峰介绍,曾经有几个软件工程硕士毕业后到研发中心,自己非常自信。做项目的时候,虽然看到一些工作很难,很多东西自己还在学,但并没有和经理谈,最后没有做下来,造成了工作的拖延,这也是缺乏团队合作能力的体现。

  团队合作也包含着对沟通能力的要求。尤其是对于跨国企业的软件研发中心,多地域的合作开发并不少见。南京趋势就曾经和美国的研发中心联合开发某个产品,由于时差的关系,双方可以轮流开发,顺利的情况下缩短一倍的开发时间,但最关键的是沟通,如果有一个问题没有沟通好,可能某方反而会浪费一天的时间。

  优秀的项目管理经理和测试工程师难寻觅

?

  在这些研发中心的招聘中,很多职位的空缺并不在于开发工程师,而是在于项目管理经理和测试工程师。

  由于国内规范的产品开发公司很少,能够胜任项目管理经理的人屈指可数。对开发人员来说,管人并不难,但中国的开发人员更习惯于接受上级的领导,而对于并不具有人事权的项目管理经理来说,能够管理起一个开发团队就不是一件容易的事情了。目前微软亚洲工程院的项目管理经理多为从美国微软总部回来的经验丰富的华人担任。

  测试人员的缺乏也令很多研发中心无奈。在中国,软件测试经理这样的人几乎可以忽略不计。而且对于程序员来说,大家还没有完全接受软件测试的工作,一般就是认为测试就是按照一定的流程进行操作找错误而已,其实这只是一个测试执行的过程,真正的测试工程师是要能够设计出各种各样的测试工具,并使用这些工具对所开发的软件进行测试。“微软工程院的测试人员面对的是绝对有趣也非常有挑战性的工作。”张宏江说。

  事实上,很多大公司都在找测试工程师,如果开发工程师能够很成功的转型,未来的发展也非常有前途。趋势中国研发中心的代理测试部经理以前曾做开发部经理,他表示,做开发做到最后会有很多重复性的工作,学到的内容无非是更多的API或者网络协议,而做测试,没有什么固定的东西和流程可以遵循,可供发展的空间更大。测试一段程序,如果没有一定的开发功力,找问题会非常困难。为此,趋势中国研发中心还和南京大学软件学院进行合作,将自己的经验做成教材,开设了软件测试的专业。

  抓住机遇 提高素质

  其实这个事情我们应当放在一个大的背景下来看,随着全球产业一体化的发展,给中国的软件产业带来了越来越的机会,高级软件人才的需求越来越大。同时,国内研发中心也将越来越多,微软对产品开发的投入自然无需多讲。陆剑峰也说:“研发在趋势公司的地位很高,公司的CEO张明正自己就说对工程师很宠,我们每年几百万美元的研发费用很少被砍的。”

  放眼望去,中国软件产业要发展,必须要在软件产品开发方面走的更好,而这就需要大量适应产品开发的程序员。不仅中国的软件公司在扩招,同时,一些跨国软件企业不断的在中国设立软件研发中心,甚至包括一些印度来华的软件企业,这对中国的软件开发人员来说不啻于一个好机会,但真的把握住这样的机会,重视提高这些企业所看重的某些素质,这无论对自身还是整个中国软件产业都是非常有益的。

  微软亚洲工程院称自己最需要的三类人才

?

  软件设计工程师

  微软的软件开发流程与其它软件公司并无太大不同:需求分析-设计-实现(编程)-测试-发布。但微软更强调人员的合作和成长。微软要求软件设计工程师的基本技能出众并善于学习,沟通能力、协调能力出类拔萃,还要求他们“具备‘架构’的概念”,能适时用 “架构师”的角色去了解整个流程,从而主动发现问题并协同解决问题。

  软件测试工程师

  “给你一台冰箱,你将如何测试它?”

  这是微软亚洲工程院招收测试工程师时的一道题目。遵循两条不同的思路,此问题可以有两个答案:一是检验冰箱的外观有否破损,门能否打开,冷冻室、冷藏室的实测温度是否符合标称,温控装置能否正常发挥作用,灯光装置是否正常……二是为冰箱设定最低温度并使之持续运行,记录其所能正常运转的最长周期,接入电源并在不同电压下观察冰箱的稳定情况,切断电源并检查冰箱的保鲜时间……只有同时答出这两个答案的应聘者才能通过这一关的考验。微软亚洲工程院需要那种对软件产品测试工作情有独钟,能独力编制测试计划与相应工具,并能与产品部门的同事密切配合、高效沟通的软件测试工程师,他们能透彻地理解微软产品,并可以完成产品开发、测试两部分的工作。

  Program Manager

  有别于其它软件公司的Project Manager负责制,在微软的软件开发过程中,由Program Manager分配资源、控制进度、管理流程。应聘者不仅要技术过硬,还要有很好的情商,如亲和的性格、极强的协调和沟通能力、能迅速把握用户需求、深谙项目的分析、设计与进程管理,对于新技术和产品有着超乎寻常的敏锐嗅觉并能迅速深入其中等等。