You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 36 | 如何成为优秀的性能和容量工程师?
你好,我是庄振运。
上一讲,我们探讨了性能工程师的职业特点和工作性质。今天我们就接着讨论如何才能成为优秀的性能工程师。
性能工程师的工作有些特殊,不同于一般程序员、运维以及测试。这一工作需要比较全面的知识、技能和经验。具体来说,需要软硬两方面的技能。
硬技能方面要有扎实而广泛的理论知识和丰富的实践经验。你不仅要了解计算机软件和硬件知识,还得具备性能测试、性能分析和性能优化的经验。
除了硬技能之外,软技能也同样重要。我们这一讲就重点聊一下这方面。我觉得软技能主要包括四个方面:
1. 英文和技术跟踪能力;
2. 多部门协调能力;
3. 项目驱动和领导能力;
4. 人际交往和沟通能力。
最后,我也会分享一些性能工程师的面试要求和经验供你参考。
## 英文和技术跟踪能力
英文是最流行的国际交流语言。互联网上的绝大多数资料是用英语写的,尤其是和互联网技术相关的资料。
在这个全球信息共享的时代网上有很多知识宝库还有大量的优质学习资源包括文章、视频、问题解答等。全球很多优秀的技术牛人和程序员开发的软件、库、工具、源代码也大都放在上面比如我们熟知的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”。毕竟一个团队最不想看到的就是有所谓的“猪队友”不能和别人合作甚至会拖后腿。
如果你想升职,这些能力都是你必须具备的。记住一点,老板们决定是否给你升职的时候,更多的是考虑你是不是已经到了那个新岗位的要求,而不是先把你升上去,再让你去学。
## 总结
中国的互联网事业一直在高速前进。性能和容量工程相关的工作,也是这一事业相当重要的一部分,我们的工作会让公司的业务效率和性能不断地提升,也就是对社会做出了贡献。
这种工作需要软硬两方面的知识、技能和经验。若想在这一领域做得出色,你尤其要加强对英文、协调能力和情商方面的训练。古人云:天助自助者,天道酬勤。哪怕你天资有限,机遇不足,现在还做不了“第一名”,但是只要每天进步,不断超越自我,那么你其实就是“成功者”。
古人说:“泰山不让土壤,故能成其大;河海不择细流,故能就其深。”我自己也经常会想,我们每个人只要每天收获一点细流,日积月累就足以汇成奔腾的大河、宽阔的大海,实现辉煌的人生。
## 思考题
你平时的工作一定需要和别人以及别的组打交道,你在里面是什么地位?需要主动有效地沟通和协调吗?
如果你不断地升职,在每一个级别的岗位上,对这样的协调、沟通和学习能力有什么要求呢?你愿意现在就未雨绸缪吗?
欢迎你在留言区分享自己的思考,与我和其他同学一起讨论,也欢迎你把文章分享给自己的朋友。