<audio id="audio" title="36 | 如何成为优秀的性能和容量工程师？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/51/c7/511a9b308b691b07ea9dfda38bcaa2c7.mp3"></audio>

你好，我是庄振运。

上一讲，我们探讨了性能工程师的职业特点和工作性质。今天我们就接着讨论如何才能成为优秀的性能工程师。

性能工程师的工作有些特殊，不同于一般程序员、运维以及测试。这一工作需要比较全面的知识、技能和经验。具体来说，需要软硬两方面的技能。

硬技能方面要有扎实而广泛的理论知识和丰富的实践经验。你不仅要了解计算机软件和硬件知识，还得具备性能测试、性能分析和性能优化的经验。

除了硬技能之外，软技能也同样重要。我们这一讲就重点聊一下这方面。我觉得软技能主要包括四个方面：

1. 英文和技术跟踪能力；
1. 多部门协调能力；
1. 项目驱动和领导能力；
1. 人际交往和沟通能力。

最后，我也会分享一些性能工程师的面试要求和经验供你参考。

## 英文和技术跟踪能力

英文是最流行的国际交流语言。互联网上的绝大多数资料是用英语写的，尤其是和互联网技术相关的资料。

在这个全球信息共享的时代，网上有很多知识宝库，还有大量的优质学习资源，包括文章、视频、问题解答等。全球很多优秀的技术牛人和程序员开发的软件、库、工具、源代码，也大都放在上面，比如我们熟知的GitHub平台上面就有很多有用的代码和工程。而英语，就是打开这些知识宝库的钥匙。

如果英文好的话，你可以直接获取第一手的新技术资料，并能快速地跟踪技术发展。在开发软件时遇到什么问题，在Google上搜索一下，一般都能找到答案。你碰到的技术问题，大概率是别人早就碰到了的，而且很可能已经有现成的解决方案了。于是，很多情况下你只要复制粘贴就可以解决问题了。

对性能工程而言也是如此。毕竟很多的硬件（比如CPU）、软件（Linux和Windows操作系统）以及大量的开发库和应用程序都来自国外。要想知道这些最新硬件和软件的性能特性，你就需要及时、直接地从国外的网站上获取。

所以，熟练的英文和相关的技术跟踪能力，对一个从事性能优化的工程人员而言至关重要。如果你能在这方面胜出一筹，那么你成为同行崇拜的技术牛人的可能性就更大。因为你可能知道别人不知道的，或者你可能会比别人知道得更早、更详细、更准确。

## 多部门协调能力

对于一个正常发展的公司而言，规模一般是会越来越大的，部门也会越来越多。在公司的业务变得复杂之后，几乎任何工作都需要和其他部门打交道，需要对方的配合，所以拥有多部门协调能力非常重要。

做性能工程更是如此。性能优化的工作，总是需要和很多部门打交道。即使是简单的软件测试，也需要和软件开发部门、使用部门以及运维紧密合作。如果是系统优化和容量管理，打交道的部门就更多了。

牵扯的部门多了，就需要你有一定的协调能力。各个部门的利益和需求经常不同，甚至会有冲突和矛盾。这时候就需要我们来统筹考虑，把关系理顺，适当地调和利益，只有这样，才能把性能工程工作往前推进。

多部门协调的能力是你的职位越高就越需要。当你还是一个初级工程师时，你可以只埋头做领导安排的工作，可以不和别人合作。但是当你走到了高级工程师，甚至是架构师这样的高级职位时，你基本不可能靠自己单干完成任务。

## 项目驱动和领导能力

性能优化和容量管理的工作和其他工作一样，也是通过划分成一个一个的项目来推进执行的。很多项目中的问题，一开始并不是那么显而易见，这就需要我们来发现问题、分析问题的性质、思考问题的解决方法，并把这一问题转化为一个合适的工程项目。

做每个工程项目的时候，你还需要和管理层和合作团队充分沟通。在各方认可之后，一步步地推进执行，定期汇报进展，最后才能够完成预设目标，胜利完成项目。

这一整套的步骤体现的其实就是**项目驱动和领导能力**。如果你能在这个过程里面起主导作用，包括发现问题、提出方案、说服别人、实现方案并且验证成功，那么你就是真正的项目带头人。

在实际工作中，每个公司的部门分工不同，每个人的具体工作领域也不同。当项目复杂时，需要很多人参与，每个人可能只需要负责或者执行一个小的步骤或模块。所以，在这整个“端到端”并且互相影响的过程中，充分和其他部门和同事合作是很必要的。

## 人际交往和沟通能力

职场讲究效率，如果你不能进行有效的人际沟通，又怎么会有效率？所以，人际交往能力和沟通能力至关重要。遗憾的是，这些年我遇到了太多在这方面非常欠缺的人（尤其是工程师）。

人际间的沟通有很多种，比如需要和上级、下级和同事沟通，也需要和合作部门甚至客户沟通等等。有效的沟通有四个特点：要及时、要透明、要一致、要清楚。

所谓“及时”，你很容易理解，就是不要太早或太晚。“透明”就是不要私下甚至黑箱操作，尽量通过正式的途径沟通，做到有案可查。“一致”就是说，即使是对不同的人、在不同时间，信息也要尽量一致，不能互相矛盾，尤其是同一部门的人，要“用一个声音讲话”。“清楚”就是信息不要有含糊的地方——允许就是允许，不同意就是不同意，不要让别人误解。

和其他员工之间的人际关系你也要重视。俗话说“三分做事，七分做人”，讲的就是**人的因素**起到的作用。你的人际关系好，就会左右逢源，在处处有人帮忙的情况下，项目自然会进展顺利。反之，如果人见人厌，项目的推进就会处处受阻，很难把事情做成。平时我们所说的“情商”，很大部分就是在说这个人际关系的处理。

当然，你还需要一定的**演讲和写作能力**。我们总是需要把自己的东西讲给别人听或者写给别人看。不管是问题展示、进展汇报，还是项目总结，都需要你把事情讲清楚、写清楚。

## 面试

接着我说说面试，分享一下这个职业的面试要求和经验。我在这一行业学习和工作十几年了，在美国好几家公司工作和实习过。

我被面试过几十次，也面试过别人几百次。

面试的内容和我前面讲过的这一行业需要的知识技能是一致的，大体上就是硬技能和软技能这两类。我要强调这里容易出现的一个误区，那就是很多刚刚踏上职场的朋友经常认为只有硬技能才是所谓的“真本事”，并轻视甚至鄙视软技能，认为那是“虚头八脑的东西”，这样想是完全错误的。

那么我们要如何根据行业需要的知识模块来应对面试呢？虽然实际的面试不会严格地按这八个模块来考，而是会根据你面试公司的情况和具体的职位要求各有侧重，但是“万变不离其宗”，你只要了解这些模块的要求，就可以做到心里有数，无往而不胜了。

### 硬技能面试

性能和容量工程的硬技能面试就比较直白，很多模块的要求和普通程序员的面试并无本质区别，比如写代码和系统设计。但是由于这一工作的特殊性，我还是要给你讲一讲它的侧重点。

**写代码能力**不用我多解释，就是我们平时所说的“刷题”。往往是给你一个问题，让你用程序实现。和普通程序员面试模块的唯一区别是它的难度一般不会太高。

**性能优化**模块算是个特殊模块，一般的程序员和运维面试不会有这方面的要求。这个模块所涉及的知识范围非常广泛，我们[第4讲](https://time.geekbang.org/column/article/174462)到[第29讲](https://time.geekbang.org/column/article/193142)的内容都会涉及到。这些内容都需要你平时积累，是很难临时速成的。

和普通程序员面试类似，**系统设计**模块也会给你一个开放的问题，让你做出自己的设计。我的经验是，性能和容量工程方面的系统设计面试是有侧重点的，最后都会面向**互联网服务性能**和**容量规划**方面。比如给你一个场景，让你预测系统的流量和需要的容量。

**容量规划**模块就更是直接针对容量工程了。面试时会提出场景性问题，让你根据给定的条件，推导出所需要的系统容量。比如，给你一个社交网站场景，让你详细演算出每个数据中心需要多少服务器（参见[第32讲](https://time.geekbang.org/column/article/195572)）。在计算时，一般要充分考虑季节性因素（比如春节、双十一）和灾难恢复的要求。

### 软技能面试

软技能方面的面试主要考察四个方面：部门协调能力、人际沟通能力、公司文化的匹配、员工的行为个性。

一般来讲，职位层次越高，对软技能的要求也越高，相应的面试比例也就越大。一个刚刚毕业的职场新人的面试中不会有太多的软技能要求。尤其是部门协调和人际沟通方面的面试，就算有，它的重要性也没有那么大。

但是，对于新人来说，行为个性方面的要求还是有的，毕竟一个员工如果和别人打交道都困难，谁会愿意和他做同事呢？又有谁愿意做他的老板呢？所以，千万别小看软技能，一个人的职场发展越往后走，软技能就越重要。好消息是，这方面的书籍资料的资源很多，并不难准备。

**员工行为个性**模块就是所谓的“Behavior Interview”，通过要求面试者描述其过去某个工作或者生活经历的具体情况，来了解此人各方面行为素质的特征。比如，面试官可能会问：能给我讲一个你成功说服他人接受你思路的例子吗？又或者，面试官会考察你的时间管理能力，问你：当很多任务同时进行时，你如何规划安排自己的时间？

**公司文化匹配**是评测一个人的个性特点是否和公司的文化等规定匹配。换句话说，就是这个人能不能在这个公司里面生存下去。如果一个公司的传统是周六加班，而面试者因为种种原因周末完全不能加班，那么这就是不匹配。

**部门协调能力**主要是看看面试者能不能有效地和其他部门合作，这就需要一定的领导能力和沟通表达能力了。比如，你发现前端客户上传图片的延迟突然增加了，诊断发现是后台服务的性能突然下降导致的。你作为负责这个项目的人，你如何去和后台部门协调？如果他们那边不配合，有各种各样的理由，你又要如何处理？

任何一个员工都是要和同事合作的，团队凝聚在一起才有战斗力。要有**人际沟通能力**，指的就是需要员工能和别人交往沟通，是所谓的“team player”。毕竟，一个团队最不想看到的，就是有所谓的“猪队友”，不能和别人合作，甚至会拖后腿。

如果你想升职，这些能力都是你必须具备的。记住一点，老板们决定是否给你升职的时候，更多的是考虑你是不是已经到了那个新岗位的要求，而不是先把你升上去，再让你去学。

## 总结

中国的互联网事业一直在高速前进。性能和容量工程相关的工作，也是这一事业相当重要的一部分，我们的工作会让公司的业务效率和性能不断地提升，也就是对社会做出了贡献。

这种工作需要软硬两方面的知识、技能和经验。若想在这一领域做得出色，你尤其要加强对英文、协调能力和情商方面的训练。古人云：天助自助者，天道酬勤。哪怕你天资有限，机遇不足，现在还做不了“第一名”，但是只要每天进步，不断超越自我，那么你其实就是“成功者”。

古人说：“泰山不让土壤，故能成其大；河海不择细流，故能就其深。”我自己也经常会想，我们每个人只要每天收获一点细流，日积月累就足以汇成奔腾的大河、宽阔的大海，实现辉煌的人生。

## 思考题

你平时的工作一定需要和别人以及别的组打交道，你在里面是什么地位？需要主动有效地沟通和协调吗？

如果你不断地升职，在每一个级别的岗位上，对这样的协调、沟通和学习能力有什么要求呢？你愿意现在就未雨绸缪吗？

欢迎你在留言区分享自己的思考，与我和其他同学一起讨论，也欢迎你把文章分享给自己的朋友。
