听微软大牛们谈“怎样成为优秀的工程师”

这天正午,上海紫竹园晴空万里,微软服务器与开发工具事业部(STB)正在会议室进行一个午餐谈话,主题是“怎样成为优秀的工程师”。听众是来自各个部门的员工,大部分是年轻面孔。面对听众的是主持人和四位“大牛”,其中有三位是经理,一位是资深的个人贡献者(Individual Contributor,IC)。他们相同的是都有很强的技术背景,深谙什么是优秀的工程师。我们SQL Server中国研发中心的总经理孙博凯(Prakash Sundaresan)也落座其中。主持人先后问了数个问题请大牛们谈论,我将这些谈论记录下来,和大家分享: 个人故事 在回顾多年个人职业发展历程时,每位大牛似乎都有一条“线索”指引着他们。博凯说,当时他在开发组长(dev lead)的职位上,通常下一步会朝经理职位发展。而他却问自己:“我还需要什么经验?”他发现自己还缺少与客户打交道的经验;而开发一个优秀产品,不深入了解客户怎么行呢?于是他转而进入客户部门锻炼了一年。可以看到,博凯很早就知道他想要成为什么,即技术的全面手。另外三位大牛的职业线索也很清晰:那位IC想成为“Hard core(技术牛人)”; 另两位经理的分别是“快乐”和“为机遇做好准备”。这些线索一直引导他们的行为和选择。我想,这些线索殊途同归,都使他们做出了优秀的产品,并使他们成为今天的大牛。我不禁问自己:我的线索是什么? 应对挑战 博凯以前就强调,唯一不变的是改变本身。这在金融危机背景下的今天尤为适用。他说,人人都知道,工程师的成功秘诀是“成为专家”。可是“在什么方面”成为专家呢? 具体的领域知识天天在变,今天的技术也许会是明日黄花。因此,应在“成为专家”方面成为专家(be an expert on being an expert)!——看来,这种隐性的能力才是以不变应万变的秘诀啊! Individual Contributor (IC)与经理之间的切换 IC是微软内与经理平行的另一职业类别,不管理人而专注技术。众所周知,微软对IC的重视无出其右。IC与经理这两条职业路径都可以上升到最顶端,并可在中途相互交叉。有不少人在IC与经理之间来回穿梭,四位大牛中就有这样的例子。他们不约而同地认为:(1) IC与经理在微软同等被重视(we value both equally),(2)IC与经理的经验互相补充,并且(3)两种职位都需要有激情。针对中国官本位文化对经理的偏好,博凯幽默地引了一句笑话: “Management is overhead(管理是额外开销)”。呵呵,可以看出他们对优秀IC的求贤若渴,这也许也反映出一个优秀的IC是如何之难得吧。 校园入职者(Campus Hire)面临的挑战 微软有大量员工从应届毕业生中招聘而来,因此主持人提出了这个问题。我记得STB总经理谢恩伟在Campus Hire入职时讲过,Campus Hire的优势是“一张白纸好画最美的图画”。然而,在座的大牛们也发现一些Campus Hire欠缺的地方。一个是批判性思维(critical thinking),在互相诘难中共同成长。当有人诘难甚至质疑你的工作内容时,应该想的是“谢谢你,你是想让它更好。”此外,博凯提到,美国和印度的Campus Hire在自由形式讨论(free form discussion)中比中国的Campus Hire更积极些,发言更多。他还说了一句直译过来是《大话西游》台词的话:“你不说我怎么知道呢?”显然,此时大家在很有诚意地看着他。 可见性(Visibility) 可见性主要是指让上级看到自己做的工作。对此,大牛们认为,一般来说工作都是可见的,因为主要矛盾总是被上级意识到的,而我们在工作中自然应首先解决主要问题。看来,毛主席教导我们要“抓主要矛盾”真是无往而不胜啊。一位大牛说,一个“非常常见的错误”是排错工作的优先级。如何知道此时最应该干哪件事呢?他的建议是,与上级的交互与沟通是非常重要的。 出国培训的作用 一般,新员工入职后都会去美国培训一段时间。当问及这段经历的作用时,大牛们说,出国交流把我们曝光在不同的思考方式面前,使思想更开放(open)。他们说,以前微软仅在美国时,还没有什么国际交流,而现在我们则幸运得多,中国的工作环境中也有不少老外。他们还说,相比于是否与老外交流,更重要的问题是“从谁身上学习”。在公司文化中,20%的学习来自学习他人。每个新员工入职时会被安排一个“师兄”,此外还有长期跟踪的“导师组”等等。在这里,只要想学,总能博采众人之长,为我所用。 工作/生活平衡与工作效率 社会上都说“搞IT很辛苦”。怎样才能平衡工作与生活呢?一位大牛说,首先,“平衡”没有绝对标准,与个人幸福感受相关。有人觉得每周工作40小时是平衡的,有人却乐意工作更多。为了认识自己的偏好,他建议我们列一个“工作/生活平衡清单”,分析一下哪些情况会让自己快乐,哪些情况反之。显然,我不能承受每天加班之重,但也不能承受不上班之空虚。由于微软的评价体系是结果导向(result oriented),“不在乎你花了多少时间”,因此,工作效率尤为重要,效率高的人工作时间少,也就在工作/生活平衡中更有主动权。对于如何提高工作效率,博凯提出一条“三件事”方法:每天只记住三件小事,每年只完成三件大事即可。呵,依旧是“抓主要矛盾”。是啊,记得我以前每天花多少时间处理各种琐事,而主要任务却被耽搁。后来只集中抓主要任务,才发现很多琐事其实可以推后,等等再做。 人际关系 公司有几种人际关系:与同事的当然最重要,同时还有与上级的,与“师兄”和“导师”的,与位于国外的团队成员的,等等。我们公司这些关系已经纯得不能再纯了。博凯提出一个“品牌(brand)”概念:一个公司有一个品牌,同样地,我们每个人也有一个品牌。我们应该在职业之初就想好,自己想成为哪种品牌。换言之,希望别人怎样看自己?他们首先想到的是“善于合作的”,抑或“值得信赖的”,等等。博凯说,今后的漫长生涯中,我们可能更换工作或职位,但品牌会一直伴随着自己。 这几位大牛的品牌都是响当当的,因此他们的观点值得我好好回味。这些谈话对我的自我反省和职业规划提供了有益的指导,也希望对读者你有用 :) 软件工程师杨珂

1

现在可以下载MSXML4.0 SP3了

今天,我们很荣幸地宣布MSXML4.0 Service Pack 3 (SP3)可以在微软下载中心下载了! MSXML4.0 SP3支持多种语言。MSXML4.0 SP3修复了许多安全缺陷并提高了软件的可靠性,可以完全取代以前的MSXML4.0、MSXML4.0 SP1和MSXML4.0 SP2。 MSXML4.0大约是九年前发布的,不过早已被MSXML6.0取代,MSXML4.0的存在仅仅是为了更安全地支持遗留系统。目前没有任何在MSXML4.0 SP3中添加新功能的计划。同时,对MSXML4.0 SP2的支持将会在2009年11月结束。 我们强烈建议MSXML4.0的用户尽早迁移到MSXML6.0平台上。MSXML6.0拥有许多新功能,在性能以及安全性上也更胜一筹。此外,MSXML6.0更接近W3C规范,与System.XML的兼容性也更好。请参考Upgrading to MSXML6.0以了解MSXML4.0 和MSXML6.0之间的差异以及迁移时需要注意的事项。 注意:如果你安装过MSXML4.0 SP3 BETA,请务必在安装MSXML4.0 SP3正式版之前先行卸载MSXML4.0 SP3 BETA。对于安装了MSXML4.0 SP3 BETA的Windows Vista和Windows Server 2008的用户,请阅读发行说明。

1

微软为开发人员提供的成长环境

时间过得飞快,不知不觉来到SQL Server中国研发中心(SQL CRD)已半年多了。简单地记录一下自己的感想吧,免得再过些日子就全忘了 J 这半年来,作为一个SDE,我感触最深的就是微软为一个开发人员成长所提供的优越环境,包括世界级的项目机会、丰富的技术资源,以及大量的培训交流。 来微软之前,我和很多人一样,担心从事的会是一些边缘性的工作,无法接触到核心技术。事实证明我的担心完全是多余的,我们和Redmond总部的开发组在同一个平台上工作,共同应对各种各样的技术挑战。例如,我们组开发的产品是SQL Server Integration Service (SSIS),它是一个ETL工具,用于数据的抽取、转换和加载。当面临数据仓库的海量数据环境时,其核心引擎的性能至关重要。在这一点上,遇到的问题、可能的算法改进等,都是在整个组内讨论解决方法的,如果你的算法能有效提高性能,就会被采纳。考虑到微软产品的巨大影响力,你的每一个改进都将影响世界各地的亿万用户,这种成就感是难以名状的。 除了共同改进产品外,中国团队也独立负责一些组件,例如我们SSIS上海小组正忙于SAP BI Connector组件的研发。我们需要全面负责该组件所有的事项,从设计、开发、测试、文档到发布,我们上海小组都需要全面负责、协调各方面的资源。在SSIS下一个版本中,更是计划将核心引擎的很大部分放到中国来开发。在这种世界级、平台级的核心软件开发过程中,开发人员可以接触到最先进的技术,迅速地成长起来。 微软紧密的全球化协作开发也提供了难得的项目学习体验。由于工作需要,我们经常会在即时通信工具Office Communicator上和Redmond总部的开发人员探讨一些问题,然后发现这些问题涉及到其它组,于是又和印度的开发组交流。随后又收到另一个国家的微软顾问的信,希望你帮忙解答产品相关的问题。这不得不让人感叹,软件和互联网真的已经把地球变成了平的。在这种紧密的全球化协作开发中,一个技术人员的语言能力、沟通技巧、技术阅历都会得到迅速的提高。 除了这些世界级、国际化的项目机会外,微软内部丰富的技术资源更是开发人员成长的宝典。作为全球软件行业的旗舰,微软几十年来开发出众多影响深远的经典软件。这些软件研发过程中的经验教训经过一代代的积累,形成了微软内部的异常丰富的技术资源,包括大量的文档、流程和工具。打开SQL Server部门内部的服务器,各种各样的概念、流程和工具软件令人眼花缭乱。以至于我经常感叹,即使想把SQL Server部门内部应用的软件过程和工具等基本掌握,就是个令人望而生畏的任务,更不用提还有那么多其它的产品部门了。当软件工程课本上枯燥的理论化为日常工作中一个个真实的流程、工具时,一个初学者也会迅速成长为一个专业的软件工程师。 最后,微软为员工提供了丰富的培训交流,包括各种讲座、课程和人员交流计划。例如,目前SQL CRD上海就和Redmond有一个双向的交流学习项目。一个称为“丝绸之路”计划,它资助中国的开发人员去Redmond学习工作。另一个则称为“马可波罗”计划,它是反过来资助Redmond的人员到中国来工作一段时间。我在去年入职后,经过短暂的一段熟悉时间后,即受“丝绸之路”计划资助,派往Redmond和总部人员一起工作六周左右。到现在为止,我们SQLCRD BI组的正式员工几乎都被派出学习了一段时间。无论是在技术还是交流上,我们都从这些经历中获益匪浅。 丁晓宁

4

微软的员工培训

白驹过隙,在org:\\stb\sql\dp\xml工作已经半年多了,感受良多。最深刻的体会,莫过于微软提供的极其丰富的员工培训资源。作为IT企业中的常青树,微软自然积累了丰富的经验,在员工培训方面,更是有独到之处。 或许你曾经在面试中被问到职业规划是什么。对于一个刚毕业的学生而言,这应该是个很难回答的问题,因为很少有学校在毕业前开设职业培训课程,媒体上的资料也相对匮乏。而在微软,定制自己的职业规划却是每年必须完成的工作。微软不但提供了完整的在线教程,还提供了相应的软件来辅助完成这项任务。这是一个相当不错的机会,可以在新年(财年)伊始静下心来思考自己近期以及长期的发展。资深的经理还会根据每个人的特长和兴趣爱好加以引导,并且在一年中的某几个时间点进行评审并进行辅导。良好的开端是成功的一半,有了这份自己定制的规划,一步一个脚印,实现自己的梦想也不仅仅是梦想了。 说到微软内部教学网站,那实是值得大书特书。数以千记的在线互动教程,覆盖了软件开发的方方面面,而且汇集了微软多年以来的经验。对于新员工,还有专门的热身教程,帮助你更快地融入公司的文化之中。 作为一家历史悠久的软件公司,软件资源自然异常丰富,最重要的是,员工可以在第一时间拿到最新产品的安装包,接触最新鲜的技术。微软内部有一种eat your own dog food的文化,鼓励员工使用公司正在开发中的软件,以期在客户发现问题之前找到并解决问题,提高软件质量。比如Vista SP1 RTM版本编译下线的当天我就升级了自己的操作系统,一方面可以与最新的产品一亲芳泽,另一方面还可以提高工作系统的稳定性。幸运的是,由于Vista SP1出于安全考虑开始只接受严格合法的路径,导致我们产品的测试程序由于使用了不规范路径的测试案例运行失败。由于问题发现得早,所以很容易追根溯源,就这样简单地修复了这个测试bug。积极主动,总会有回报。 课堂讲课也是微软员工培训中非常重要的一个环节。人所共知,微软雷德蒙总部藏龙卧虎,中国很多的开发者都是读着他们写的书成长起来的。如果能与他们面对面地交流,技术提高必然更加迅速。微软为员工提供了这样的机会。几乎每个月都有著名技术作家、微软杰出工程师、著名软件咨询师举办的讲座,针对某个领域进行深入的技术分析探讨,或者讲述自己事业发展的体会与心得。由于课堂有限(微软的讲课大多数都是小课堂举行,与国内高校动辄几百人共聚一堂听一个老师讲课大不相同),这样的讲座在哪里都是一票难求,在总部听一堂热门的讲课需要排队几个月也不是什么新鲜事。由于微软对中国非常重视,John Robbins(Debugging Applications系列的作者)、David Solomon(Microsoft Windows Internals的作者)等大师们的都到中国来开过培训课程,微软的新员工实在是非常幸运的。 此外,微软内部非常强调mentoring,即新员工都可以找一个资深员工作为自己的导师。即使他在雷德蒙总部,也可以通过公司电话或者视频会议保持密切联络。这种言传身教,可以说是花钱也很难买到的。与此同时,经理也会定期与员工进行一对一的短会,解惑答疑,帮助员工保持着轻松与快乐的心情学习与工作。 总之,微软为员工的自我增值与提升积累并提供了丰富的资源。只要你想努力学习,没有不够用的资源,只有不够花的时间 🙂 张琪

1

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

过去几个月,我先后在中国数家知名大学举行了讲座,并会见了多位致力于数据平台研究的学术领头人和学生。我还在一些业界会议上发言,与用户、合作伙伴、分析师和其他同行会面。这些会议涉及了多个议题,例如,日新月异的科技发展趋势,异地分布式软件开发,以及亚洲的蓬勃发展。但有一个议题似乎得到了最大的关注——微软是如何组织和进行产品开发的?我想这很自然,微软是全球最成功的软件公司之一,而亚洲软件行业正经历其自身的飞速发展,因此业内人士迫切地希望了解我们过去20多年的经验也就在情理之中了。 “微软是如何组织和进行产品开发”其实是一个很大的题目。在微软内部我们有一个卓越软件工程团队,主要为员工提供为期数日的课程,内容涉及微软软件开发方法概述、工程系统、组织架构、最佳实施办法,以及用以保证产品质量、可靠性及安全性的内部工具和技术等等。这并不意味着我们的体系已经十全十美,但我们的确积累了很多知识和经验可以与大家分享。实际上,我们也在以适当的方式与全球(包括亚洲)同行分享这些成功。 因为这是一个大题目,我想在这篇文章里着重介绍我们工程系统中的一个方面,即我们研发团队的核心专业和每个专业在产品开发中所扮演的角色。因为我相信微软在这一方面的做法不同于我们的同行(即使在美国也是如此),尤其在中国,目前业界还没有充分理解这些核心专业及其所扮演的角色。 微软的工程体系一直由三个核心专业组成:开发(Development)、测试(Test)和项目管理(Program Management),英文简称分别为Dev、Test和PM。在此,我将以另一个顺序作简单介绍: PM 提及软件专业时,大多数人都马上想到Dev。但是对我来说,一切则从项目管理开始。在微软,PM意味着很多事情,对我而言,这个角色主要意味两件事: 了解用户的需求,并将其转换为用于开发的功能说明(Functional Specification)。这是一切的开始,如果我们无法理解用户,我们就不能开发出合适的产品。 协调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个人博客上的英文原文或者在微软服务器与开发工具事业部博客上的中文原始翻译。