点击上方“逆锋起笔”,公众号回复 pdf

领取大佬们推荐的学习资料

作者 | 刘俊强

声明 | 本文是迅雷技术总监 刘俊强 在 QCon 北京 2017《工程师的“软”技能》专题上所做演讲的整理

这是一篇长文

前言

程序员一向对于“硬技能”——即自身在专业方向上的能力——较为关注,工作环境而言更多的是与计算机打交道,专注于输出更高水平的代码,对于“软技能”提升的关注度不够造成了大家对程序员的一些误解,并且程序员在面对不断更新的计算机技术知识和复杂的职业关系中,会有些茫然不知所措。本次演讲将以程序员职业发展的三大阶段和身边案例来讲述“软技能”的作用和需要重点提升的软技能,从而使程序员的工作生活更加幸福。

本文将分为四个部分进行,首先将简单阐述下程序员发展所遇到的一些问题,再对硬技能与软技能进行分析;再推导在不同职业阶段哪些软技能可以让你更幸福;最后我将聊聊如何来提升程序员的软技能。

程序员发展困境

社会不断发展,IT 领域技术与产品不停迭代的过程中,作为程序员身处其中我们在职业、生活上的发展困境有哪些?

我们都希望职业生涯有良好的发展,追求上升通道,如专业线的架构师、科学家、又如管理线的技术总监、技术副总裁、CTO 等。实际上我们程序员在职业上面临的压力不小,上面便是我列出来常见的一些职业上的压力。

  • Deadine 魔咒,项目经理、老板总是期望项目越早上线越好,Deadline 总是在前面召唤我们,总得拼尽力气去赶 Deadline。

  • 升职加薪困境,每个公司拥有自己的晋升考评模式,如何能够搞懂公司的晋升考评模式,确保自己的贡献能够被知道进而升职加薪呢。

  • 还有跟同僚在合作上的沟通,我们会被人反馈程序员不好沟通,是个奇怪的物种。

  • 行业又在不断变化,O2O、餐饮外卖、共享单车、互联网 + 等业务模式或概念不断涌现,怎样在这变化的行业中,保持自己的职业道路向上发展呢?

技术能力和技术大局观是程序员赖以生存的前提,IT 行业的商业模式创新和技术创新相互作用,促使彼此前进。毫无疑问,我们在技术上面临了不小的挑战,怎么在保证现有工作完成的情况下,又能跟上工具框架更新,研究新的技术概念、并思考其技术落地性,从日后趋势而言,越来越需要有经验的从业人员拥有跨行业的技术广度,因为互联网终将变为基础设施与各个行业进行融合。

案例穿插 #1: 在这些年的从业中,面试过很多的程序员,跟大家分享个某大厂 4 年经验 Java 程序员的例子,我在对其进行电话面试后发现,他的技术技能在 4 年中发展极为缓慢,可以说是停滞的状态。究其原因,公司及工作内容是一方面,作为程序员我们如何在这样的工作环境下还能保证自己的发展呢?我们在后面的内容会解答这个问题。

貌似加班对于程序员来说是家常便饭了,除了面临职业压力、技术能力挑战之外,我们还面临着社会角色所带来的生活压力,如健康问题、生活工作平衡的问题以及现实的金钱问题,想到这些有种身体被掏空的感觉。

案例穿插 #2: 在此要跟大家再分享个我身边的案例。我的一个前同事进行了游戏领域创业,2 年后公司作价 1 亿卖给上市公司,为什么他能够做到这样的事情,我想后面再跟大家分析。我举这个例子要说的是:并不是没有机会,怎样让自己能够发现机会,并抓住它才是关键的。

硬技能 VS 软技能

前文说了我们程序员所面临的发展困境,接下来我们介绍下硬技能和软技能的定义、他们之间的区别与关系。

我们简单来看看,硬技能、软技能的定义或解释吧。

硬技能相对来说容易理解,即我们在专业领域的知识和能力,是实打实的技能,一般能够客观评价。

软技能,我的理解是它是一种“如何生活、工作的能力”,你的工作现状、生活现状一定程度上代表了你的软技能能力。

我们来从三个维度,即定义、可度量性、提升办法来对比下硬技能、软技能,并举例看下硬技能、软技能的区别。

软技能及其分类

这是我整理的与职业力有关的软技能,对程序员而言,在职业方向想要有着更好的发展,这些软技能十分重要:

  1. 解决问题的能力: 可能你受雇于不是自己的企业,即我们常说的打工,也可能你是自己创业,即自己雇佣自己。在现代商业社会中企业重要职责之一,便是创造价值,直接经济价值或是社会价值,这样作为雇员要清楚的是,雇主是需要你来解决问题,不论是程序员或其他岗位,所以职业力里面重要的一条便是解决问题的能力。首先要建立我就是来解决问题的意识,然后再通过自己的能力或寻求他人帮助来解决问题,解决问题的能力差异便是在公司中人与人之间最重要的差距。

  2. 规划未来目标: 首先我们需要明确的一点是,认为自己在为他人工作的这个观点是不正确的。为什么呢?工作确实是属于公司的,但你所从事职业的职业生涯是属于自己的,只不过是在企业的平台上来施展自己的能力并换取酬劳而已。因此,你对未来职业生涯的规划显得尤为重要,你想成为怎样的人,你想成就怎样的事,你想过着怎样的生活,都需要你自己进行思考和规划,这一切都是为了自己,为了更好的生活,这一点需要谨记。面向未来做目标规划,有大目标,也得有可以在最近 1 年左右实现的小目标,即根据自己的大目标来定若干个小目标。

  3. 沟通能力: 现在企业是以协作为主要模式,孤胆英雄的模式已经是过去式了,当然,如果你是神级大牛的话,可以忽略这一点,因为你可以靠超乎常人的逆天技术实力来弥补沟通能力的缺陷。作为程序员经常需要打交道的人有产品经理、测试、UI 和项目经理,由于大家工种不太一样,所以经常会有争执或不快。沟通一词,最重要的点在那个“通”字上,所谓换位思考,先弄清楚对方想表达的内容,再进行交流和沟通,可以让自己的工作更为的顺畅,让团队的协作更加顺滑。

  4. 职业认知: 什么是职业认知呢?简单来说清晰认识自己所处行业的情况,自己公司在行业中的地位,和自身专业领域的技能情况,有了良好的职业认知能够帮助自己进行更好的职业规划和发展。有个提升自己职业认知能力的方式值得推荐,便是以投资人的角度来看到自己公司和产品,以高级别职位的角度来看自己的能力。

  5. 工作态度: 这个态度可不是说要求你态度良好,对人和和气气、有求必应哦,而是以承担责任的心态去面向结果来完成工作的态度。

  6. 人际交往: 我想大家都明白这个是啥,说到程序员短板,都会把这个提出来。同样作为程序员的我,在刚从业的前几年在人际交往的处理上同样做得不好,我后来总结为什么程序员总是在这块做不好呢?首选,我们工作面对是计算机,给计算机 Input 再看有没有我们期望的 Output,如果没有我们期望的 Output,那我们就 Debug,一切都很简单,不是 0 就是 1。但人与人间交流、交往不是这样一回事,不是非黑即白,所以学会跟人打交道之前先理解这点,人的多样性远超过我们技术的编程语言、工具框架。简而言之,多多换位思考、多多训练是为上策,关于这一点,我也是在不断学习中。

  7. 晋升阶梯: 作为程序员的晋升通道相比较其他岗位而言要稍微轻松些,因为对于硬技能考察的较多,当然如果要进行管理线的晋升,对于软技能的重视也是非常高的。在公司要有良好的晋升,最重要的事情便是成为事情的解决者,勇于尝试新的机会并承担责任,以最后的结果输出来证明自己。

  8. 爱技术、但不要狂热: 作为程序员,我们可以通过技术实现很多好玩的东西,热爱技术是很正常的事情,但是不要狂热,因为在项目对于技术的选型要考虑到其它的隐性成本,如掌握某项特定技术的人在市场上的多寡问题。技术是帮助我们来实现产品价值的工具之一,如果过分的追求技术,会变成舍本逐末,单纯追求技术上的满足不管项目、产品的全局是不负责任的,我们可以将这个想象成带着脚铐跳舞。

案例穿插 #3: 我有个同事,之前离职进行餐厅创业,在 1 年后餐厅运营步入正轨后,回公司继续进行研发工作。他仔细分析了自己的职业阶段和自己想从事的餐厅创业,觉得自己 1 年时间能够将事情处理好,于是乎就投入了餐厅创业,将企业里面使用到的流程优化后,也应用于餐厅管理后,餐厅做得也是风生水起,自己再回归程序员本行,有着良好的职业认知。

行业的竞争压力越来越大,社会环境而言变化也很快,如何在时间越发不够的情况下来将事情做好,生产效率就是很关键的,我们来谈谈生产力分类下的软技能。

  1. 专注力: 在日常工作和生活中我们可能时常被打断,特别是当我们程序员进行编码工作时候,被打断后,往往需要半个小时或更长来找回当时的工作状态。挑选时间片段专注于单一任务的方法,可以帮助程序员从这种状态中脱离出来,当然自己也要学会建立防火墙,专注时间内的其它可能打扰自己的因素需要避免开,如即时通信软件、微信等。专注于完成单一任务,不要期望并行任务完成得很好,经常性的被打断会造成专注力的缺失,对于程序员来说缺乏专注力是致命的。

  2. 时间管理: 总是感觉一天什么都还没有做,时间就溜走了,分享一个我对于时间利用方式的理解,即碎片事情用碎片时间,完整事情用成块时间。怎么理解呢?我们日常有很多的碎片事情,如查邮件、刷微博、看微信等,这样的事情就可以利用碎片时间来做,例如上厕所、等公交、坐地铁等;例如完成产品某一功能便是完整事情,需要利用成块的非打扰时间来完成,这样才会将时间利用好。

  3. 吃自己的狗食: 技术在不断更新,随着我们经验的增长,在于编码习惯和架构设计方面的能力也是在提升,要勇于去更新自己之前的代码,利用你最新的能力和良好的编码习惯将之前的代码变得更为优雅。

  4. 有效努力工作: 加班是我们程序员跑不掉的话题,需要思考的是,自己的工作内容,完成时到底用了多少有效时间,千万不要只是看上去很努力,做了很多无用功或是浪费了时间。当然,如果你公司文化是由加班多少来决定晋升和绩效的,要么玩这个游戏,有么离开这样的公司。

  5. 建立自己的工作方式或习惯: 每个人的习惯和能力都不太一样,所以在确定工作原则的基础上来建立专属于自己的工作方式或习惯,习惯的养成也是需要对自己进行更新的过程,这个过程不会轻松,但是是个复利的过程。

  6. 对自己负责: 不论是提升工作效率,还是学习新的技能都是在给自己积累经验和知识,在进行工作输出时,需要对自己所完成的内容进行负责,使其达到最好的状态和输出标准,这一切的努力都是在对自己负责。

  1. 学习如何学习,如何自我教育: 实际上从大学开始,我们的学习便应该是由自己做主,自己最先需要学会的便是如何学习,如何自我教育。在成年之后,知识的获取往往是通过主动学习,而不是被动学习所获得,可以通过阅读、实践、与人交流来构成自我教育的良性循环。

  2. 发现自己的知识短板: 根据自己对于职业上升通道或领域专家的了解,来确定在每个不同阶段在技能能力上的要求都有哪些,每个阶段核心关注的点有哪些,从而来发现自己的知识短板。

  3. 找寻自己的导师: 在学习知识和技能的时候,有一种可以让你充满干劲的方式,就是找到一名导师或偶像,通过导师和偶像来建立自己各个阶段的里程碑来追赶他们。

  4. 建立自己的学习技巧: 构建属于自己的学习技巧是很关键的,会让自己事半功倍。简单分享下我的一些技巧吧,没有太过花哨的东西。第一,键盘盲打速度要快、准确率要高,能够很大程度节省自己的时间,我当年是通过 OICQ 同时跟多个妹子聊天来练就的盲打和手速;第二,英文要好,这里的好不是说口语哦,指的是英文阅读能力,练就的方法就是查看英文官方网站;第三,熟练使用搜索引擎,我在处理快速学习计算机的阶段,阅读了当时市面上能够买到的计算机杂志,会有搜索引擎技巧的介绍,当然了就是 Google 的技巧,在后来的工作中对自身的帮助特别大,找对应技术资料的速度比别人快;第四,一个稳定的 VPN,为了 VPN 这样的东西花费是值得的,不要吝啬这块的投入。

回顾案例穿插 #1: 前面将到的某大厂 Java 开发工程师,4 年工作经验技能没有成长,这便是典型的学习力缺失的案例。适当的不安全感是保证我们安全的前提,如果他能够发现自己的知识短板,进行补充学习,不会有当前的困境。

  1. 移情能力: 此处的移情不是指“将自己的感情 / 感受移至他人身上”,而是将“他人的感情 / 感受移至自己身上”,每个人的情绪触发点和方式都不太一样,与各自的成长生活背景都有很大关系,能够理解他人的感情 / 感受,这样对于交往、沟通上都大有裨益。

  2. 运动锻炼: 程序员工作性质决定了每天会有很长时间是坐着的,以脑力输出为主的工作性质,这样使得我们的身体质素面临很大挑战。另外,有个说法是程序员是碗青春饭,那么这样我们更加需要将自己的身体锻炼好,才能够有更为长的职业生涯和生命。

  3. 理财技能: 程序员的收入水平相比较于大多数行业来说是高的,如何做好财务规划,不指望飞来横财的方式来进行退休规划呢,理财技能便尤为重要,程序员不能很好地限制自己的冲动,进行直播打赏、一元购赌博最后深陷债务的例子还是很多的。

  4. 认识自己: 可能世界上最难的事情便是认清自己,甚至有可能需要使用一辈子的时间来不断刷新对自己的认识,在各个阶段我们能够尽量的认识自己,熟悉自己的各项能力或不足,才能促使我们实现更好的自己。

职业发展阶段与软技能

我们在前面介绍了,职业力、生产力、学习力、生活力四个方向的软技能,那么到底哪些软技能能够更好地帮助我们的工作和生活呢?接下来我们将从职业发展阶段,来看看软技能对我们工作生活的帮助。关注公众号 逆锋起笔,回复 pdf,下载你需要的各种学习资料。

  • 受助与学习

  • 独立贡献

  • 带动他人一起贡献

  • 领导创新阶段

一般情况下工作年限 1~3 年,在这个时间内,构建熟悉工作环境并完成被分配的工作,遇到问题需要在别人帮助下解决问题,以学习成长为主。

在这个阶段,我们应该更加关注于学习能力和效率工作方式的养成,因为在这个阶段需要打好我们的基础质素,日后才能更加快速地成长。

  • 构建自己的学习方式:在前面有提到,有效的学习方式构建,能够保证自己通过一定的行为模式来学习新的知识,或是将已有知识加深。

  • 寻找自己的导师:需要有偶像才能帮助自己更好地前进,锚定了导师或偶像的话,我们才能更好地进行技术上的精进,以达到我们确定的目标。

  • 专注力的养成:这个阶段职业生涯刚开始,专注力的养成,可以帮助我们提高效率,在单位时间内获取更多知识或者技能,本阶段是个着重积累的阶段,所以专注力极为重要。

一般工作 3~5 年,能够独立完成具有挑战性的工作,解决非预期问题,有一定全局意识,已成领域行家。

在这个阶段,进入了独立贡献阶段,所以,更加关注的应该是工作业绩成果,跟上个阶段相比较,负责的工作更为重要,也会跟其他同学合作,会感觉自己越发忙不过来,于是这些软技能对于这个阶段的同学尤为重要。

  • 时间管理:随着能力和负责事情重要性的提升,可能会面临着时间被其它事情所打断的问题,例如跨团队沟通、工作汇报以及案例分析等,这样如何有效地管理时间对你来说非常关键,否则会变得事倍功半。

  • 解决问题的能力:这个能力代表了你在这个阶段的重要性,毕竟公司是要你来解决问题的哦。

  • 沟通能力:上面有说到,需要跟其他团队进行沟通,那么如何有效地沟通以达到最后的成果,是需要我们掌握的技能,当然,沟通能力的不是一蹴而促的,需要我们不断地复盘训练。

一般工作 5~10 年,已成领域专家,具备深度与广度结合的专业知识,带领他人成长,完成工作任务。

  • 职业认知能力:如何看待你在职业上所取得的成就,以及公司、自己在行业内的水平定位,是你在这个阶段需要弄清楚的事情,因为在拥有如此丰富的工作经验后,如果没有一定的职业认知能力,会使得自己的职业判断出现各式各样的偏差或误判,这样的成本相比较前面两个阶段而言是很高的。并且,一般在这个阶段你需要带领他人一起完成工作,如果没有足够的职业认知,那么在带人完成任务或团队组建上面或许会走弯路。

  • 规划目标能力:你想成为什么样的人,你想成就什么样的事情?在这个阶段应该能够对自己和公司工作进行良好的规划,因为一般情况下,不会再接到具体的任务安排,而是接到目标安排,你需要根据目标来进行阶段实施的规划,因此不论对于工作还是自身而言,规划目标的能力在此阶段都是非常重要的。

  • 人际交往能力:在此阶段时,有时候问题的解决并非仅靠自己的硬实力便能处理,你可能需要相关行业朋友的帮助,这便需要我们自己建立朋友网络,能够互相帮助解决问题,如何有效地通过价值交换建立人际网络,便是该阶段需要具备的软技能。

一般工作 10+ 年,对行业和领域有了自己的认识和理解,专业水平、人脉都已丰富,职业巅峰时期。

我画了张简单的图片,以便大家可以直观的看到软技能与各职业阶段的关系。

如何提高软技能

我们前面提到了一些重要的软技能,以及在职业不同阶段、人生不同阶段较为重要的软技能,我们知道了这些软技能,我们应该如何提高呢?

认识自己所处职业和人生阶段,对自己进行硬技能和软技能评定。

  • 根据自己的工作年限来确定自己的职业阶段,职业阶段需要具备的硬技能、软技能清单可以整理出来,进而对自己的能力进行评定,类似于技能雷达;

  • 根据行业发展情况,分析对应的技能要求,可以简化成不同行业领域的技术图谱或技能树。

以职业长期目标来明确自身职业短、中期目标。

  • 对自己进行职业规划,根据职业规划来确定短期、中期目标;

  • 将短期目标转换成可执行项目。

明确自身软技能缺失和不足,以训练的方式进行提升。

  • 以训练的方式进行技能提升;

  • 什么是训练,训练不是在已知或已会的技能内容徘徊,应该是反复训练自己的不会内容和技能;

  • 最好理解训练的方式,便是运动员和我们之前经历的考试。

不断摄取知识及信息并思考学习,保持技术及商业灵敏度。

  • 不要局限自己的技术栈,不要陷入对某项语言的盲目崇拜中;

  • 当你手里只有锤子的时候,看到的东西都是钉子;

  • 需要适当的扩宽自己的知识边界。

回顾案例 #2: 游戏创业朋友身上具备的软技能:专注力惊人、沟通能力好、职业认知良好。

写在最后

很多时候,你的硬实力——技术水平已经到位了,你缺少的,可能恰好就是那一点点看起来虚无缥缈却无比重要的软技能。试着去培养这些软技能吧,他会让你过得更幸福!

与之相关

1 程序员之路-学习经验总结分享

2 如何提升你的能力?给年轻程序员的几条建议

3 程序员如何选择未来的职业路线

关键词:逆锋起笔

长按识别二维码关注!

程序员,你还没有软技能吗?难怪你不幸福相关推荐

  1. 程序员不得不知的软技能

    程序员群体不应该是一直低头敲代码,更应该掌握一些软技能,改变一贯的沉闷木讷的形象,让自己在竞争中胜出,从而职业发展更顺利.在此总结整理了几个常用软技能点供大家参考~ 1.及时复盘的习惯 所谓复盘?就是 ...

  2. 程序员面试需要的软技能

    程序员面试所需的软技能         2016-11-10 蜗牛 云技术实践  写在前面:本文建立在代码基础过硬,想一起研究一下面试中锦上添花的一些技能,注意不是雪中送炭,基础不好的,还是看看之前的 ...

  3. 代码之外,程序员如何生存--《软技能》读后感

    我阅读过很多有关程序员的书籍,几乎都是涉及到具体的软件开发技能,没有一本全面的介绍程序员发展的书籍.一个偶然的机会,我在人民邮电出版社异步社区(https://www.epubit.com/)看到一本 ...

  4. 程序员有必要参加软考吗?软考有什么用?

    计算机技术与软件专业技术资格(水平)考试(以下简称计算机软件资格考试)是原中国计算机软件专业技术资格和水平考试(简称软件考试)的完善与发展.计算机软件资格考试是由国家人力资源和社会保障部.工业和信息化 ...

  5. 2030年,程序员工资还能达到现在的水平吗?

    背景: 汇总了下老王在其他平台的原创回复,欢迎关注老王原创公众号[软件老王],关注不迷路. 1.2030年,程序员工资还能达到现在的水平吗? 老王观点: (1)认为行业的工资水平是跟国家经济这个大池子 ...

  6. 程序员有必要参加软考吗?

    不管你是不是程序员,只要是参与软考的,最主要还是看它的用途和你的需求是否匹配. 软考对程序员重要吗? 根据目前的情况来说,考软考的人员考试原因都是各有不同的,有为了试水想多拿一个证的,也有为了奔着可以 ...

  7. 想做程序员但还在迷惘和摸索吗?

    自从上大学选择了计算机专业后,我就深深地热爱上了软件开发,并已经立志把自己的毕生精力都奉献给软件开发事业.一直以来,我都充满了激情去学习,去写程序,去接受新的知识和技术.几年来,付出很多,收获很多,也 ...

  8. 程序员面试还不敢要高薪资?程序员面试谈薪资的6大技巧分享,最全Java架构师技能图谱

    提起薪资,我们作为求职者都想多要点,但怎么巧妙的要到手,这有时需要聊天技巧: **面试官: 在我们这儿工作,您希望有什么样的薪资待遇?**提示:了解该公司所在地区.所属行业.公司规模等信息,你的薪水要 ...

  9. 每个优秀程序员必须具备的技术技能

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒. http://onevca ...

最新文章

  1. wxml 点击图片下载_云存储之上传图片和展示图片(小程序云开发)
  2. 【前端面试分享】- 寒冬求职下篇
  3. 如何分析 StackOverflow 异常 ?
  4. 集群e家:O2O电商服务平台上云
  5. iOS开发--AVFoundation自定义相机
  6. C++基础 ----- 文件操作
  7. 采集网页数据生成到静态模板newslist.html文件中(正则表达式)
  8. Unity AI 之 行为树 的简单介绍
  9. 英雄联盟加载的时候特卡,排查记录:win10那些破玩意
  10. 追寻职业榜样计算机论文翻译,追寻职业榜样征文
  11. word文档怎么生成html,word文档怎么排版
  12. doctrine安装和配置
  13. C语言实现飞翔的小鸟小游戏
  14. Beta阶段敏捷冲刺①
  15. 微信小游戏开发能否突破4M限制
  16. LocaSpaceViewer:自定义图源与无偏影像下载
  17. MySQL基础数据类型
  18. 六顶思考帽(edward de bono)
  19. Redis命令之HGetAll性能问题解决方案
  20. HCIE一闪一闪亮晶晶

热门文章

  1. Unity Shader-后处理:高斯模糊
  2. One afternoon in Zhongguancun(redo CC5)
  3. iOS编译cURL库并链接darwinssl,zlib,c-ares库操作步骤
  4. Beam Search集束搜索
  5. 时间序列平稳性检验(ADF)和白噪声检验(Ljung-Box)
  6. 上网操作1000问(供初學者)
  7. 全球及中国海上撇油系统行业市场深度分析与十四五前景预测报告2022-2028年
  8. 求解斐波那契数列模$p$意义下最短循环节
  9. python 将base64字符串还原成图片保存
  10. protoc did not exit cleanly. Review output for more information报错