大家好,我是慕枫
前阿里巴巴高级工程师,InfoQ签约作者、阿里云专家博主,一直致力于用大白话讲解技术知识
在这里和大家分享一线互联网大厂面试经验、技术人成长路线以及Java技术、分布式、高并发、架构设计方面的经验总结
感恩遇见,希望我们都能成为更好的自己
创建了慕枫技术面试现场社区,主要分享大厂面试问题,欢迎大家加入慕枫技术面试现场

引言

对于程序员来说,编码能力以及计算机专业技能等都属于自己的立身之本,是实打实的硬技能。那我们是不是不断加强这些方面能力的锻炼就可以在职场上有一个不错的发展呢?然而事实并非如此,往往限制我们进一步发展的是一些技术能力之外又常常被我们所忽视的软技能。大家不妨可以看看身边的TL、技术主管、技术总监甚至是公司的CTO,从这些人身上我们可以看到不仅仅技术能力非常过硬,似乎还有些其他的能力(经常被认为是很虚的东西)在支撑着他们不断向前发展,今天就和大家好好聊聊这些看上去有点虚但是却十分有用甚至非常重要的软技能。

为什么软技能重要?

今年年初到现在还在不断上演的互联网大厂“毕业”浪潮,以及不知道什么时候才能结束的疫情,外部环境的种种不确定让大家都极度缺乏安全感。实际上我们正处在一个VUCA时代,不稳定Volatile、不确定Uncertain、复杂Complex、模糊Ambiguous 都是我们的工作以及生活日常,很多人也常常因为焦虑而难以入眠。那么如何在这种充满变数的环境下使自己保持更强的竞争力呢?怎样才能拥抱变化把握可能稍纵即逝的机遇呢?我想答案就是我们必须要成为复合型人才,才能在激烈的竞争中保持一个比较好的竞争力。因此无论是外部环境还是我们的内部自我驱动都在促使我们要成为软硬兼备的人。

在《软技能》一书中,作者提出程序猿要有商业心态,要能够像企业一样思考自己的工作以及职业生涯。那么对于一个企业来说光知道埋着头做产品,不懂市场分析不懂吆喝不懂营销不懂售后,几乎不可能在竞争激烈的市场中有所作为,因此我们需要主动管理自己的职业生涯。而软技能就是帮助程序猿走向人生巅峰、娶上白富美的最强辅助工具。

程序猿的硬实力就好比一台电脑的硬件配置,CPU得多核高频、内存要大,硬盘最好SSD,这样才有个比较好的硬件基础,而软实力就像运行在这个电脑上的软件,如果软件本身质量不好,频繁出Bug,那么对外的整体表现上也不尽如人意,不能体现出硬件资源的优势。因此只有软硬结合,合二为一,才能发挥出最大的优势。

而所谓软技能包含的内容其实很多很多,比如逻辑思维、高效会议管理、看未来趋势的能力、时间管理能力、人际交往能力等等都是所谓的软技能。但是这些软技能没有一个统一的评价标准,不像写代码或者系统设计,可以通过是否满足扩展性、是否满足容错性等看得见的标准来进行评价,因此在日常的工作中常常被大家所忽视,但是在一些行业大佬的身上我们又能够的的确确看到这些软技能在闪闪发光。

程序员必备9个软技能

这里主要围绕程序员在日常工作以及学习中经常会遇到的,笔者认为最重要的9项软技能来和大家聊聊那些看起来无关痛痒但是实际上却非常重要的隐形魔法加成

1、自学能力

活到老学到老大概是对程序员最贴切的描述,技术发展可以说是日新月异,如何在高速发展的技术浪潮中不被淘汰,其中自学能力起到了非常重要的作用,它是我们能够不断刷新自身技术体系的重要底层能力。此处的自学能力我觉得不仅仅是专业知识的学习,实际也包含能够即时识别和发现身边优秀同学的优点并且进行不断自省以及学习的能力。那么如何提升自己的自学能力呢?

这里推荐《刻意练习》中的方法,就是进行有目的的自我训练。怎么理解这句话?每当我们学习一项技术的时候,不只需要把它看会懂它的原理,更要上手去使用,给自己定个目标,某项技术学习后,我需要输出一篇学习的博文或者开发一个基于该技术程序。我们必须带着这种的目标去进行学习,通过不断的可的练习,才能让我们的技术更加精进。

在学习身边优秀同学方面,举一个笔者的自身例子,在刚开始工作的时候,组里一个同事引起了我的注意(不是妹子别多想)。我发现TL交代的事情他都能够很好的进行落地,即便是很小的事情,在我看来也就是TL随口一说,但是他都能够记得,并且一直做下去,有结果的时候主动反馈给TL,有的时候甚至连TL都忘记了。从他身上我看到了非常强的执行力以及问题闭环能力。都说别人是自己的一面镜子,那我就对照着身边这面镜子反思自己检查自己,发现自己在一些需求实现上面虽然可以完成自己的功能但是并没有主动去推动上下游,另外一些问题的解决停留在表面并没有真正进行根本问题闭环。找到差距之后,就不断对自己的日常行为进行修正,经过一段时间的自我训练,好像自己也拥有了强执行力以及问题闭环的能力。因此我们需要一双可以发现别人优点的眼睛,向优秀的同学学习,不断更新自身能力体系。

2、沟通能力

在程序员的日常的工作中沟通可以说是无处不在,我们需要与PD沟通需求,确定需求的价值以及具体细节,我们需要与测试同学沟通测试排期以及测试用例的合理性,我们需要和前端同学沟通前后端交互接口以及联调计划,我们还需要和研发同学确定技术方案以及全链路联调的计划等等。因此能否和同学进行高效沟通直接影响我们的工作进展以及效率。

那么在日常工作中如何才能提升我们的沟通能力呢?这里给大家三个小建议。

(1)学会倾听

在和别人交流之前,我们要先学会倾听,适当地让出一部分话语权,先让别人表达他们的观点,搞清楚对方的需求和目的到底是什么。然后再结合别人的观点清晰的表达出自己的思考。

(2)共赢思维

所谓共赢,就是最终的合作结果对参与合作的双方或者多方都是有价值的,所谓无利不起早,特别是在职场当中,如果对方感受不到能给自己带来什么价值,很难在推进的事情上面给支持,这也比较正常,因为大家都很很忙。因此我们在推进事情的时候或者在和别人沟通希望得到对方协助的时候,要提前想好这件事情怎么才能对对方也能体现价值,这样的在沟通过程中可以将这些考量有意无意的透露给对方,让对方知道你是有在考虑他们的利益的,而不是完全只顾着自己推进的事情,让对方相信项目完成之后,对对方的业务也是一种补充或者完善。

(3)共情思维

共情是一种偏向于感性的思维,它要求我们能够设身处地的体验别人的处境,用他人的眼光看待问题以及思考问题解决的办法。

3、人际交往能力

很多同学可能会觉得我是来工作码代码的,又不是来交朋友的。怎么还要搞上人际交往了,别着急,听我说看看有没有道理。假设有A同学和B同学两个研发同学,其中A同学平时比较活跃,经常和测试妹子开玩笑,平时没事点咖啡或者奶茶也会捎带手给测试妹子带一杯。而B同学相对来说内敛一点,和测试妹子也是测试需求的时候才会接触,平时也不会瞎聊天。如果有一天,A同学和B同学都去找测试妹子排测试时间,如果需求的紧急程度一样的话,大家觉得一般会把谁的需求先排起来。答案肯定是和自己平时比较熟的人嘛对吧。

无论公司还是团队都是由人组成的,那么有人在的地方就有江湖,而我们身处江湖之中要多结善缘,在未来的工作中也许我们需要多方参与,如果平时积攒了足够的善缘,相信在工作推进中也会更加顺利。

4、自我营销能力

自我营销实际就是我们要懂得进行自我推广以及构建自己的技术影响力?那么为什么要进行自我营销呢?主要原因有两点,首先是提升自己在团队或者部门内的技术影响力,实际上酒香也怕巷子深。其次就是让更多的人知道自己,了解自己,让别人对自己的专业给更加认可。多组织一些技术培训、业务培训,多进行一些自己在平台优化上面的分享,多进行文档沉淀,都是进行自我营销的手段。

5、团队协作能力

在我们的日常工作中往往都不是单打独斗的,总是要和别人进行合作,有时候是小组团队小伙伴的合作,有的时候是跨团队的合作,有的时候甚至是跨部门的合作。因此可以说团队合作实际充斥在我们的日常工作中的。因此我们需要有团队协作的能力。

(1)不让问题卡在自己这里

团队合作的本质其实就是工作流水线,每个人负责一部分工作,最后将大家的成果整合在一起交付出去。因此可以说是环环相扣,那么要想保证团队高效率的运作,就需要每个环节都不卡壳。所以自己需要保证自己负责的模块或者工作按时保质的提供。

(2)主动推进

在团队协作中必然涉及到业务上下游的交互,那么这个时候我们在保证自己负责的模块没问题的可以同时主动推动上下游的阶段同样不出现卡壳,从而确保整体业务链条的畅通。因为最终交付出去的是完整的需求实现,如果业务链条中任何的环节出现阻碍,都会影响到需求的正常交付。另外在和业务上下游交流的过程中我们可以及时了解他们的业务以及实现逻辑,对于我们理解完整业务链也是非常有帮助的。

6、演讲能力

在日常的工作中大家应该也有所感受,那些职级比较高的同学讲话演讲的能力也是比较好的。一个有想法但是不会表达的人和一个没有想法的人,对外表现给别人的体感都是没想法,因此我们不但要做有想法的人而且还要敢于将自己的想法表达出来。

所谓演讲,大家也不要把它想的太过于正式,在开会的时候能够表述自己的想法以及对应的原因和佐证是一种演讲,给大部门的同学(上百人的大场面)培训业务或者是技术分享这也是一种演讲。我觉得演讲不应该拘泥于具体的形式,只要能够将自己的思考说出来就可以。给大家说说我是怎么锻炼自己演讲能力的。主要分为三个阶段:

(1)模仿:我会经常看一些演讲起来富有感染力的人的演讲,比如马老师的演讲,然后分析他的演讲为什么能够让人听上去会心潮澎湃、干劲十足,讲话的内容结构、讲话的语气,都是模仿学习的内容;

(2)训练:我会在公司找个没有人的会议室,然后选择一个主题,然后对着空会议室通过完全脱稿的方式去进行主题演讲,然后听讲话的录音,去分析哪里讲得好哪里讲的不好,再进行进一步的修正。

(3)实战:通过组里面的业务以及技术培训,面对真实的听众再次验证训练自己的演讲能力,然后逐步扩大听众人数。通过不断地训练,自己在几百人的场子进行分享一点也不会发怵。

7、复盘能力

复盘这个词其实来源于围棋,棋手在下完棋之后都会将原来的棋局进行复盘,重新推演之前下棋的每一个步骤,然后总结整个过程中有哪些妙手,有哪些俗手,在今后的棋局中才能扬长避短,只有这样不断重复棋艺更加精进。

一个人或者一个组织是否可以持续成长的的决定因素就是是否具备进行复盘的能力。复盘是对之前工作的总结和沉淀。针对比较好的经验,我们需要进行总结沉淀形成相应的可复制的方案,在之后的项目中我们可以借助于之前的优秀时间快速复制。针对之前项目中做的不好的地方,我们需要认证分析做的不好的原因以及制定对应的提升计划。在之后的项目中避免同样的问题再次出现。

8、抗压能力

IT行业应该算是工作压力比较大的行业,工作压力有的时候来自线上问题定位的压力,有的时候来自需求倒排限期上线的压力,有的时候来自代码CR不通过不给上线的压力等等等等,压力大的时候真的会让人觉得喘不过气来。如果我们不具备一定的抗压能力,很有可能影响当下的工作甚至是生活,如果不幸遇到被压力击穿的情况,甚至可能得抑郁症。

因此我们需要具备抗压能力,我们要做压力的主人而不是奴隶,要能够将压力转换为前进的动力。当我们感觉到压力的时候,需要给自己心理暗示,有压力的时候实际就是有成长的时候。另外我们也需要一些手段去帮助我们排解压力,让自己不再emo。

(1)多去运动,比如每周跑步一两次,或者是去拳击馆练练拳,通过运动非常有助于压力的释放,同时还可以锻炼自己的身体。

(2)还可以多和朋友兄弟聚聚会,大家在一起聊聊天,叙叙旧,也是非常好排解压力的方式。

(3)培养一个兴趣爱好,比如摄影或者书法等等,让自己的注意力可以暂时地转移,缓解焦虑的心情。

只有顶得住压力,才能守得到繁华。

9、结构化思维

所谓结构化思维,就是一种在问题讨论、PPT工作汇报以及需求分析等等日常工作场景中,可以帮助我们把内容组织得更加有逻辑、更加清晰的一种手段,它是一种思考问题、拆解问题以及解决问题的方式或者方法论。

实际上结构化也是有套路可循的,它主要包含了四种逻辑关系:

(1)演绎推理:所有的电器需要通电才能工作,点灯是一种电器,所以电器需要通电才能工作,这就是一种典型的演绎推理,就是所谓的“大前提、小前提、结论”,是一种逻辑的体现。

(2)程度关系:子啊叙述事情的时候根据每件事情的重要程度或者紧急程度来进行划分,程度高的的东西排在前面,程序低的东西排在后面。

(3)空间关系:在互联网行业我们经常说到的SAAS、PAAS、IAAS实际上就是一种空间关系的分类,分别从基础服务应用、基础平台以及基础设施的空间层面描述不同的服务。

(4)时间关系:这是一种非常常见的结构化关系了,比如日常需求排期的时候,总是按照时间的前后来进行安排。

比如说常见的5W2H分析法就是一种结构化思维,也是分析问题的套路。对于一些逻辑思维不是很强的人来说,可以利用why、what、who、when、where、how to do以及how much这七个维度来进行问题拆解以及问题分析。

总结

本文主要和大家谈谈9项对于程序猿来说很重要但是又常常被忽视的软技能。全文看下来不知道大家发现没有,这些软技能实际上是并不带有强烈的行业属性,也就是说即便不在互联网行业,这些能力在其他行业也是可以拿起来就用的,它们可以说是一个人能最终能够成事的底层操作系统。