写在前面
进击的叻叻是小灰的一位朋友,本文整理了他今年9月返校进行校友职场经验分享的内容,从职业选择、职业发展、工作体验和职业认知四个方面,分享自己微软八年职业生涯的经历和感悟。
这篇文章是对当时校友职场经验分享会内容的精炼和补充,一来更符合书面表达,二来适合更广泛的人群。
后文中的“我”不是小灰,而指这位朋友。
简要自我介绍
我本硕就读于北邮,研究生毕业于网络技术研究院交换与智能控制研究中心。毕业后一直工作于微软STCA(互联网亚洲工程院),先后从事Bing、Cortana和Microsoft Search产品相关研发工作,目前在MSAI部门任高级软件工程师。
Microsoft Search, Assistant and Intelligence (MSAI) brings together multiple areas of research to innovate in the products that millions of people use everyday. We power features in Outlook, Teams, Word, Sharepoint, Bing, Windows and others.
https://www.microsoft.com/en-us/research/group/msai/


不了解系统的职业能力模型,不做职业生涯规划,我们的职业发展真的会受到阻碍吗?
幸运的是,通常这不怎么影响我们的职业发展,尤其在职业早期(前5年)。
这些年来IT行业仍然在不断快速发展,产品、商业模式和技术的不断演进给我们带来了足够多的挑战,迫使我们不断提高自己的技术能力和职业能力,以取得更有业务影响力的绩效,推动我们职业生涯道路上的前行。
哪怕只关注当下,走好一步再看下一步,只要保持砥砺前行,也能拥有良好的职业发展。也许选择加入大厂在这方面有较大的优势,因为总有经理(manager)甚至导师(mentor)能给出一些经验性的建议和指导。

初级工程师,作为团队或项目的萌新成员,基本职责是良好地执行交代的具体设计与实现任务,或者能够如期完成可独立设计及实现的业务功能。 中级工程师,作为团队或项目的骨干成员,需要有能力端到端(从头到尾地)地主导涉及多人协作的业务功能的交付。 高级工程师,作为团队或项目的专家,需要有能力端到端负责特定业务领域的项目交付,良好地完成跨团队及团队内的协作。 主管/高级专家,则负责更高层次的业务领域或产品的研发,影响的团队规模更大。 ……
判断力:能够有效地界定问题,辨别关键问题、利益相关人和结果;能够构建并应用与工作相关的知识库;能够确信地做决策。 结果导向:能够坚持追求积极的结果,用有效的方法解决问题;能够履行承诺并寻求更具挑战性的工作;能够为他人的行为、决定和目标承担责任。 影响力:能够有效地沟通和搭建人际网;能够倾听他人的想法,关注和承认不同的观点,以尊重的方式与他人沟通;能够成功地说服和影响他人; 协作:能够推动团队、部门或跨组织边界的团队合作;能够整合资源,共同努力实现团队、部门以及公司的目标。 适应力:能够表现出好奇心并积极地探索各种选择;能够快速有效地响应需求和环境的变化,在不明朗的场景下有效地发挥作用;能够在压力下保持着有建设性的态度。 时间管理:能够在有限的工作时间里有效地完成更多高优先级的任务。
组织领导力:能够在团队和组织内创建清晰的目标,确认彼此有一致的理解,定义行动计划;能够激发团队和组织成员的活力、乐观心态和创造力,创造良好的环境,促成团队的成长;能够帮助团队和组织交付成功,推动人们喜爱的创新,寻求解决方案不设置边界,坚持不懈地追寻正确的结果。 技术卓越:能够展示技术深度、解决问题的能力,适应能力和好奇心;能够将持续学习应用于技术挑战中;能够积极寻求新的、困难的挑战,去测试和应用新的技术成果。 端到端创新:能够结合客户关注、创新和端到端思维,交付具备产品完整性的创新成果;能够坚持使用系统或工具来产生可行的想法;能够裂解产品或服务生命周期,主动管理风险,并对现有风险管理流程提出改进建议。 客户关注:能够预见客户需求,主动满足并超越客户期望;能够认识到客户想要解决的问题,并创造或促进产品和服务的创造,以满足客户的需求。 计划、组织及管理:能够为单独的项目和程序的实施创建并推动计划能够通过有效的沟通、度量、组织和领导力,推动项目相关利益人之间的协调一致。 高管成熟度:能够在压力下有效地管理自我和人际关系;能够进行规模化的领导,并通过他人推动领导力议程;能够在不同的场景适宜地应用不同的管理方法。
产品和技术的设计及实现:能够构建正确的产品和服务以满足客户预期的价值和必需的商业目标;能够数据驱动地洞察需求并结合对全局商业目标的理解去做出决策;能够开发高质量的代码,满足技术需求,并满足期望的ROI(投资回报率),比如扩展性、全球性交付和在分布式系统、监控、可服务性、调试和维护上的实现;;能够运用技术上的软件研发技能去鉴别问题和倡导产品或服务设计的改善。 卓有成效的团队:能够在团队环境中采取建设性的行动, 以提高整个团队的效率、影响力和士气;能够主动跨越团队、产品、服务或平台边界工作, 以共享信息和技术, 并确保对等团队目标保持一致;能够在适当的情况下构建团队;能够辅导他人, 主动向他人寻求辅导。 质量工程生命周期:创作和验证高效的(低时延,高吞吐),稳定的,安全的,可维护的,可扩展的,高性能的,经过良好测试的和可复用的代码以实现产品或服务的客户和业务目标。构建正确的测试和工具去验证代码符合质量目标和服务标准。分析数据并以适当的方式得出结论以确保自己和同伴理解和解决问题。确保在整个产品或服务的生命周期内保持质量。使用、定义和改进编码和测试实践、流程、工具、基础设施和标准,为微软和客户提供预期的产品或服务结果,提高效率。 产品和服务的所有权:能够一贯和强烈地展示了个人对整个产品或服务以及用户体验的质量和完整性的责任感;能够保持自豪感和工艺感, 使产品具有美感和技术价值。
注意,在职业发展中,我们大可不必做到面面俱到,完善上述所有能力。
通常我们只需要重点了解自身情况,以及影响自己进入下一个职业台阶所需要的具体能力及要求,找到冲突,衡量差距,然后通过针对性的训练和实践提升所需的能力,按新的要求交付关键结果,以能力提升目标为先,最后无论是耐心等待还是积极争取都能饱满自信。

如何缓解焦虑,保持清醒?
我发现有的学生有些焦虑,因为收集的问题已经有考虑35岁危机了。我今年刚过34岁生日,依然觉得自己的职业生涯很漫长。但我多少能理解现在很多人焦虑的心情,如果他/她们日常只从网络和书本上了解职场情况的话。
在此,我分享缓解焦虑,保持清醒的四个小建议:
避免幸存者偏差。
缩小知行差距(知道和做到的差距)。
懂得分辨观点和事实。
锻炼端到端能力。
第一,要避免幸存者偏差。

在第二次世界大战中,美国军方在研究如何加强飞机防护降低被枪炮击落几率。从联军的轰炸机遭受攻击后返回营地的轰炸机数据,发现机翼是最容易被击中的位置,机尾则是最少被击中的位置军方认为“应该加强机翼的防护”因为被击中次数最多,而参与此次方案的一位统计学教授认为“应该强化机尾的防护”,因为机尾被击中的飞机很可能都没飞回来。事实证明,强化机尾防护是正确的。这里军方犯的错误便是幸存者偏差。
现在网络上大量信息都存在幸存者偏差,比如职场类匿名社交应用脉脉里的言论,以及一些贩卖焦虑的网络文章。也许有些例子是真实的,但别轻易认为这些例子具备一般性。
如果真的想了解一般性,至少要从身边认识的人那边多打听些消息。这总比网络上道听途说的要更平常些。
第二,要缩小知行差距(Knowing-Doing-Gaps)。
下图描述了三种知行差距:
GAP A告诉我们“做到的”总会比“知道的”少。
GAP B告诉我们“做到”总比“知道”在时间上要晚。
GAP C告诉我们“知道的”总比所有的信息要少。

source: https://www.researchgate.net/publication/335143300_From_Work_Ability_Research_to_Implementation
这幅图给了我们一些启示,帮助我们行动得更早,做到得更多:
首先,要明白关注于缩小GAP C(获取更多信息)并不能直接缩小GAP A(做更多)和GAP B(更早做)。常见的一个误区是认为自己要知道得够多才能行动起来,实际上这可能是拖延行动的借口。选择的差异通常并没有想象中那么巨大,差距总源于执行。对于一位刚入门编程的学生,选择谭浩强老师的《C语言程序设计》还是国外经典著作《The C Programming Language》(中文版是机械工业出版《C程序设计语言》),只要认真学习实操,结果不会有太大的差距的。
其次,要关注于缩短GAP A和GAP B,简单说即做到“知行合一”。这并没有什么深奥的新智慧,中国古人早已言简意赅地告诉我们怎么做到这一点——学以致用,用以促学,学用相长。要将“知道做到”看作一个螺旋式上升的过程,我们要加速行动,多进行小迭代,理论要联系实际,以实践去推动学习,使理论知识和实践能力相辅相成地得到提升。
第三,要懂得分辨观点和事实。
将个例看当常态。“工作几年便年薪百万”,“学了XX技术就拿到年薪60万的offer”,“35岁被裁员找不到工作”,这样的案例肯定存在,但是不是常态呢?是不是符合你身边人的情况呢?希望你想到了之前提到的“幸存者偏差”。 轻信统计数据,数学模型等表示方式。比如平均数据,我们不知道它使用的是算术平均数还是中位数,或者其他,甚至我们也不清楚样本集是否足够多且均匀;一个数值增加一两位小数位会显得更可信;加一个四象限图会使得一些观点更像“知识”;等等。注意,即使这真的是统计上的真实数据表明这是大概率事件,这对于个人也未必成立。 认为真情实感便是事实。暂且不考虑判断是否出自真情实感,但真情实感的内容确实容易让人相信,并认为是事情的全貌。 片面的事实。常见于截取照片、文字的局部,以断章取义。
。
第四,从三个维度(深度、广度和进度)锻炼端到端能力。
端到端能力,在此说的是从头到尾完成一个项目的能力。这里的项目至少要是以月为单位的事情。当我们能完成几件这样的事情,我们能增加自信,自然不容易感觉到焦虑。焦虑感,很多时候就是觉得自己做不成一件事。
从我这些年面试的经验,尤其是校招面试,端到端能力是一个重要的分水岭。相信现在绝大多数人都知道求职面试要背八股、刷算法题,然而通常面试最重要的前10-15分钟里便定了面试结果的基调,其中重要的一环就是通过项目经历考察端到端能力,即对一个项目或具体工作讲清楚“为什么做”,“综合过去和其他权威经验有什么设计方案而最终为什么采取这个设计”,“遇到过什么不符合预期的问题以及怎么处理的”,“如何衡量成功以及怎么实现的”,“如果没有某些限制,还能做哪些改进”,等等。
现在我们都清楚简历里的实习经历很重要。实际上,关键的并不是有没有实习经历,而是简历里有内容去给面试官展示端到端能力。这内容还可以是学校的项目,参与的开源项目,甚至你业余捣腾的个人小项目。对于研究生,实验室的项目也是一个好的素材,只要思考好上面列举的问题并真正做好。本科生在这方面倒是吃力些,但也不乏准备充足的例子,比如参加创新项目等。
如何综合性地培养端到端能力?
除了找事情做之外,我觉得还应该重视三个维度能力的锻炼。
思考的深度:要多思考4W1H(Why, What, When, Where, How),比如我上面提到面试项目经历时可能问的问题;停留在听从执行是大忌。 知识的广度:一个人知识的多元化程度,能更透彻地看一个项目,带来更多的可能性;在协作的环境更容易倾听他人,创造清晰的目标和计划;不同领域知识的灵活运用,亦有利于提高创新能力。 项目管理的进度:要端到端完成一个复杂任务,进度的掌控必不可缺;懂得管理进度,才能使我们成为一位有效工作的人,而不是忙碌工作的人。

这里引用了我的研究生导师徐鹏老师在培养研究生上提出的三个维度模型,而上述的具体阐释是我围绕锻炼端到端能力展开的理解。
有学生看到知识的广度有所顾虑,问“很多企业都强调深入钻研技术,如何做好知识的广度?作为技术人,是不是该先尊重技术?知识的广度会影响技术的深度吗?”
技术或知识的深度固然重要,是作为工程师的立身之本。为了持续地解决工作中面对的越来越困难的问题,我们自然需要不断去提高深度。我们在讨论选择深度还是广度的时候,应该确保在达到必要的深度之后。实际上,在无法称职完成工作之前,我想也没什么人有心思考虑这个问题。 选择深度还是广度通常不矛盾。一部分时间选择深度一部分时间选择广度是很常见的现象。我们在意的是分配比例问题。
优先选择深度还是广度,取决于你当前的成长问题是什么。广度有利于提供更多可能性,比如发挥当前知识深度解决更多领域的问题;追求深度则一般为了解决当前业务领域机遇下更大的技术挑战。
离开实际问题去追求深度通常是盲目低效的。知识的深度反映在解决某系列问题的难度,而不是通用知识的堆积。知道更多并不代表能解决更多问题(参阅“知行差距”部分)。 日常花一些时间积累知识的广度总会是一个有益的事情。广度使人视野开阔,看待工作生活上的事情更加透彻,偶尔还能激发一些灵感,找到更大的技术挑战,进而为进一步追求技术深度找到方向。
