119 lines
13 KiB
Markdown
119 lines
13 KiB
Markdown
# 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”。毕竟,一个团队最不想看到的,就是有所谓的“猪队友”,不能和别人合作,甚至会拖后腿。
|
||
|
||
如果你想升职,这些能力都是你必须具备的。记住一点,老板们决定是否给你升职的时候,更多的是考虑你是不是已经到了那个新岗位的要求,而不是先把你升上去,再让你去学。
|
||
|
||
## 总结
|
||
|
||
中国的互联网事业一直在高速前进。性能和容量工程相关的工作,也是这一事业相当重要的一部分,我们的工作会让公司的业务效率和性能不断地提升,也就是对社会做出了贡献。
|
||
|
||
这种工作需要软硬两方面的知识、技能和经验。若想在这一领域做得出色,你尤其要加强对英文、协调能力和情商方面的训练。古人云:天助自助者,天道酬勤。哪怕你天资有限,机遇不足,现在还做不了“第一名”,但是只要每天进步,不断超越自我,那么你其实就是“成功者”。
|
||
|
||
古人说:“泰山不让土壤,故能成其大;河海不择细流,故能就其深。”我自己也经常会想,我们每个人只要每天收获一点细流,日积月累就足以汇成奔腾的大河、宽阔的大海,实现辉煌的人生。
|
||
|
||
## 思考题
|
||
|
||
你平时的工作一定需要和别人以及别的组打交道,你在里面是什么地位?需要主动有效地沟通和协调吗?
|
||
|
||
如果你不断地升职,在每一个级别的岗位上,对这样的协调、沟通和学习能力有什么要求呢?你愿意现在就未雨绸缪吗?
|
||
|
||
欢迎你在留言区分享自己的思考,与我和其他同学一起讨论,也欢迎你把文章分享给自己的朋友。
|
||
|