This commit is contained in:
louzefeng
2024-07-11 05:50:32 +00:00
parent bf99793fd0
commit d3828a7aee
6071 changed files with 0 additions and 0 deletions

View File

@@ -0,0 +1,103 @@
<audio id="audio" title="35 | 职业发展:从“锦上添花”到“不可或缺”" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/6e/43/6e6095cac7aba01112f3f0068f82b543.mp3"></audio>
你好,我是庄振运。
到今天,我们已经基本讲完了所有的技术方面的内容。通过这些内容,希望你对性能和容量工程这一领域有了更多的认识和收获。
从今天开始,我想和你介绍一下,性能优化和容量工程这个职业在公司里面的定位、工作的形式特点,以及职业的发展前景。
## 在公司里面的定位
性能优化和容量工程这个工作在公司各种业务中的定位是什么样的呢?
其实性能和容量工程这样的职位几乎每个互联网公司都有只是具体的职位名称和工作内容不同。甚至很多非互联网公司也会有这样的职位毕竟现代社会每个公司都有IT部门而IT的性能对每个公司都是很重要的。
根据我这些年的从业经验和观察结果来看,由于性能优化这个领域覆盖面变广、复杂度变高,性能工程师的重要性越发提高,相关职位也越来越多。
其实这种情况的出现非常合理。从广义上来讲,性能工程和容量工程涵盖了很多方面,比如软件测试、软件部署、互联网服务监测、性能的优化、性能问题的根因及处理、容量的管理和分配、容量效率的提升等等。这些领域的工作,都是公司里面必不可少的。
最近几年,互联网正在发生巨大的变化。
第一个变化,是**数据量增大**了。你也知道,今天已经是大数据横行的时代,现在要是说自己不懂大数据,估计都不好意思出门。
第二个变化,是**互联网服务更加多样化**了。层出不穷的新业务(比如共享经济),提出了新的互联网服务需求,这些需求最终都需要部署到公司的基础设施上,需要相应的容量支持。
第三个变化,是**提高了对性能质量要求**。伴随着这些新业务、新需求,互联网服务越来越需要提高效率,降低延迟,增加可靠性。
所以,如果说前几年性能工程在公司里面的定位,还是“锦上添花”“没有无所谓,有了也挺好”的话,那么现在的定位就是“不可或缺”的、“一个也不能少”的工作之一了。
## 工作的形式和性质
你或许对“性能工程师”Performance Engineer这一工作有些了解可能已经发现这一工作的具体形式在不同的公司里面很不一样。有的公司里QAQuality assurance ,质量控制或者测试)的工作,就称为性能工程;有的公司里负责整个软件服务架构的工作叫性能工程。
“性能工程”这一角色的具体工作内容,的确是取决于公司业务和职位定位,大体上有这么七种:
**软件性能测试**是最普遍的就是我们常说的QA。虽然它的工作内容相对简单但对于性能工程领域的新人来说这其实是一个不错的开始。通过软件测试你可以学到很多相关的知识。
**性能问题诊断**这个工作经常和运维工作捆绑在一起。比如系统和平台出了各种性能问题,就需要做诊断和根因分析。
**系统性能优化**就是在性能测试和性能诊断的基础上,做到提升系统性能和效率。这样的工作经常要和很多模块打交道,比如硬件、软件、网络等等,就需要你拥有比较全面的知识。
**网站平台性能监测和优化**也是性能工程的一种。现代互联网业务,对性能要求越来越高,比如端到端低延迟、网站高可靠性等。这就需要实时监测各种指标,并且不断地进行提升。
**互联网服务架构的优化**很容易理解。互联网业务复杂了,公司内部的各种支撑服务和架构,也就需要不断优化。要做好这种工作,需要你对公司的各种服务性质和功能足够了解才行。
同时,不要小看了**性能相关的工具开发**多数的性能工作包括监控、检测、分析等总是需要一些相关的工具和UI界面面板的。这些工具和面板也需要去开发和维护。
最后一种,是**混合型**,就是综合了一部分前面说的六种工作。我举个例子,比如下面这个微软的性能工程师招聘广告,就是一个典型的混合型的例子。
<img src="https://static001.geekbang.org/resource/image/67/a0/670b4a043925fd17125c43c23969cfa0.jpg" alt="">
这个职位需要做性能测试,也需要做性能优化、性能诊断,并且开发相关的工具。
## 职业的发展前景:越老越吃香
了解过性能优化相关的工作后,你最关心的可能是——这种工作的发展前景如何?
说实话,在互联网行业工作,很多人担心的就是**年龄问题**。比如你经常看到的程序员招聘要求说必须多少岁以下比如35岁以下。在网上你是不是也常常看到各种消息说某某公司要清退多少岁以上的员工。对于互联网行业收入方面是风光无限但年龄是一个不能忍受的痛。
对于这种“年龄的痛”,很多人会说,年龄大了可以转岗,比如做管理。但是管理层毕竟人数更少,对多数人来讲,并不可行。而少数不容易遇到这类问题的互联网岗位中,就包括性能和容量工程。这个工作的特点我们也讨论了,它需要多方面的知识、各角度的技能和实际的经验积累,这需要相当长的时间,不太可能一蹴而就。因此,“年龄”并不会成为一个性能和容量工程师的短板。
我在很多硅谷公司工作过都是性能和容量工程的岗位。我的很多同事都是年龄比较大的常有超过40甚至50岁的。这些大龄同事往往是技术的牛人是挑大梁的角色。可以不夸张地说这一行业是“越老越吃香”的。
也许你会怀疑硅谷公司重用大龄的员工是出于怜悯之心,但事实并不是这样。事实上,这些“大龄员工”给公司带来了更大的收益。性能和容量工程师的工作,很大一部分内容,是帮助公司提升业务性能和容量效率,降低运营成本。随着公司业务规模的扩大,他们给公司降低的成本也越来越大,公司也越来越离不开他们。
还记得我开篇词中提到的电机专家斯坦门茨的故事吗?他的一个简单建议就帮助福特公司解决了一个超级大问题。在第一讲里面,我也举了一个同事的真实经历,一个架构师用几行代码优化系统,帮助公司节省了数百万美元。
这些年我自己也做了很多的性能优化和容量效率提升的工作我经常开玩笑说我给公司节省的成本早已经远远超过了公司付给我的工资没有100倍几十倍也是有的。
## 性能和容量工程师的工作:怎么去找?
说了这么多你可能会问怎么进入这一职业呢也就是如何去找这样的工作呢现在是互联网时代我们都知道要去招聘网站。无论你是否打算寻找海外工作我个人都比较建议你用LinkedIn。你也知道我曾经在LinkedIn工作过四年不过我可不是在帮LinkedIn做广告。虽然我对LinkedIn这个老东家印象非常好很喜欢它的文化但是我推荐LinkedIn是有别的原因。
我推荐LinkedIn的原因有三
1. LinkedIn在国外的工作人才市场中拥有垄断地位。不管是员工找工作还是公司找人一般都会用这个网站。
1. LinkedIn的定位就是针对比较专业和高端的人才市场。你找工作当然是想找一份好的工作所以用LinkedIn比较合适。
1. LinkedIn上的猎头多。如果你创建一个账号放上足够的信息很快就会不断地收到猎头的信件希望你去某某公司面试。我经常开玩笑说这种感觉不是“你在找工作”而是“工作在找你”。
当然你也可以主动用LinkedIn去搜寻合适的工作机会也可以适当的过滤比如根据工作地点和公司。比如下面这个截图就是我用“Performance Engineer”搜索出来的工作机会。
<img src="https://static001.geekbang.org/resource/image/ca/26/cab43bf65ec45b6d29df23161e71a026.jpg" alt="">
还有个建议,建好账号后,你一定要放上足够的和你相关的信息,尤其是专业的信息,否则就和没有建账号一样。
为什么呢这是因为猎头们都是用关键词和关键领域来搜索员工的。比如你要找性能工程的工作你就需要把你的相关工作经验和技能列上因为猎头可能会用如CPU Profiling、Performance Optimization等相关的词语去搜索候选人。
## 总结
我今天讲了性能和容量工程工作的特点、重要性,以及如何找这样的工作。
根据多年国内国外的观察和工作经验,我总体的感觉是,对这一方面的工作,真正了解的人非常少。甚至很多业界人员,都不知道有这样的工作。
我记得唐代诗人杨巨源的佳作《城东早春》中说:“诗家清景在新春,绿柳才黄半未匀。若待上林花似锦,出门俱是看花人。”说的是早春的时候,花开的还很少,这样的清新景色,正是诗人的最爱,适合出门赏花。若是等到晚春之际,虽然到处是花团锦簇,但满城也都是赏花的人,会拥挤不堪。 这一点,我们都有体会,国庆中秋出游过的人,对塞车拥挤都有很深的记忆。
一个行业和领域,如果处于发展期,内行不多,知名度不高,这自然是严峻的挑战,但也是巨大的机遇。对我们每个人而言,一个还没有很多人涉足的领域,恰恰是充满各种机会的沃土。我觉得性能工程和容量效率就是这样的一个领域,还有待我们去持续开拓。
## 思考题
你们公司里面有没有从事性能和容量工程相关的部门和人员呢?比如性能测试、性能优化、互联网服务效率提升、数据中心容量管理等。他们是在同一个部门还是分成不同的部门?他们的工作内容有没有明显的区分或者重合?
你觉得做这些工作的哪个部门和哪个工程师比较牛?牛在哪里?你可以向他们学习一下吗?
欢迎你在留言区分享自己的思考,与我和其他同学一起讨论,也欢迎你把文章分享给自己的朋友。

View File

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