软技能代码之外的生存指南

作者背景
作者是叫做John Sonmez,他的个人网站是 Simple Programmer,主要是《Soft Skills: The Software Developer's Life Manual》《The Complete Software Developer's Career Guide》两本书的作者。之前是职业程序员,33岁之后不再从事常规开发工作,主要从事写书、视频教程等工作。
概述
本书的标题清楚的阐述了本书的目的,针对研发人员软技能进行整理和描述。本书的目录包含7章 职业、自我营销、学习、生产力、理财、健身、精神。我自己的通篇读完的感受,理财和健身的共鸣较少,职业、自我营销很强烈,其他的部分稍显平淡,主要是和我个人的经历和精神状态有关。
下面的段落同样是按照书的目录拆分章节,其中有重要部分的摘录,和我个人的理解和分析。
职业
对于软件开发人员,无论是面试还是自我规划,职业路径都是无法避免的关键点。书中给出了三种选择:
雇员
独立咨询师
创业者
在中国,我觉得雇员应该是99%的研发选择的道路,其中包含了普通的码农、管理或职业经理人。创业者是一条崎岖的道路,高风险高回报,97%-99%的失败率。独立咨询就是介于其中的,你有了在研发和管理方面的深厚积累,懂得与人沟通相处之道,通过一定的方式出售自己的经验和方法,算是融合了雇员和创业,兼具两者的优势吧。
目标
确定了职业领域,最最重要的事情,就是目标了。作者提出职业生涯一定要有一个大目标,包括某个公司某个职位或者创业。有了大目标,才能后续拆分出月度目标、周目标、每日目标等小目标。不断完成小目标,即使校正大目标的方向,最终才能实现。
沟通
人和人之间的交往和沟通,对于软件工程师来讲很重要,现在没有人是单打独斗,都是依靠团队作战。一个需求从客户提出到最终上线,中间内部外部都是需要经历无数的沟通。对于沟通作者首先提出了四点建议
每个人都希望感到自己很重要
一旦你贬低他人、削弱他们的成就感,获得的反馈讲完全是抓狂和绝望。
永远不要批评
奖励积极行要比惩罚消极行为有效得多。
换位思考
避免争吵
相对的,沟通很重要,避免踩坑也很重要。作者也提及了如何躲开毒瘤:如何处理“毒瘤”
有时候你会发现,有些人不管怎么样就是无法相处,有的人就是抓住一切机会贬低别人,对生活中的一切抱有消极态度。我把他们称为“苛性碱”,你最好避开他们。
如果你意识到某个人就是所谓的“苛性碱",不要试图取改变他们,也不要试图取和他们打交道,就让他们停留再自己的轨道上,你索要做的只是尽量限制自己与他们互动。你会发现”苛性碱人“所过之处痕迹明显,他们似乎总是卷入某种形式的悲剧之中,总是有不幸的事件发生再他们身上,他们老是把自己扮成受害者。如果你发现这种迹象,赶快跑--有多快跑多快。
如果你不幸要与之打交道,限定在最新范围之内,切记不要投入感情。
良好沟通在我看来是人必备的技能,如果我只有三个技能槽,沟通肯定会放在其中,它能让事情变简单。
面试
接下来还讲了面试之道,总结时说内部推荐>外部招聘,要有自己的展示舞台(博客/视频/演讲),并且尽量接近你目标公司的员工(职位越高越好)。我自己感觉时说的有道理,但是比较难。原因如下
我自己找工作的时候目标公司并不是那么清晰,因为我在的二线城市并没有特别多优秀的软件企业。
我从业10来年,多多少少也接触过不少,相对过滤掉一些企业。
而且我目标是中高层管理,所以在目标企业的选择上可能也不是那么多待选。
交际和结识人脉较少也是原因之一。(删掉很多人也是我的问题之一,以后再也不删了)
晋升
入职了一家公司之后,自然需要的就是发展。优秀的人会得到更多的晋升机会。
从雇主的角度看,招聘员工就是一项投资。招聘员工需要花费时间和金钱,所以老板当然想看到良好的投资回报率。能够自发地,无需过问就能做事的员工通常能增加公司的净收入,此外,他们也能让老板少操心,只占用少量的管理资源。也就是说能够自己管理自己,并且最终取得较好结果的人,更具晋升机会。
承担责任
在你的职业生涯中,经常会面对更多金钱还是更多责任的选择。至少从长期来看,正确的选择几乎永远是更多责任。
如果没有被赋予责任,如何靠自己赢得这样的机会?负责一项任务、牵头一个项目。
没有人愿意涉足的领域是搜寻机会的最好地方。可能有一个没人愿意碰的遗留应用,或者代码库里的某个特别令人讨厌的模块。正因为没人愿意碰,所以也无需去抢这些就成为你日益强大的帝国的领地。如果你能把沼泽变为良田,你也就展现了自己的价值。
另一种间接承担责任的方式是成为团队中其他人的导师,自愿帮助新人加速成长,为任何有需要的人提供帮助。通过介入和解决别人的问题,你不仅可以学到更多自己专业之外的知识,而且随着时间的推移,你还能在团队中逐步树立及时雨的名声。最终这样的声誉可能会令你成为团队领导者或者其他管理职位,只要你愿意。
具体的一些例子:
有一个不受重视的项目,你能去负责它吗?
你能帮助团队里面的新人快速成长吗?
你能负责文档制作流程,并保证即使更新这些文档吗?
哪些工作是没人愿意做,你愿意承担起来,并将其简化或者自动化的?
老板先给到我足够的钱,还是我先承担责任来争取最终合理的报酬。一般当你愿意承担某些责任时,往往团队里面没有合适的人,而你一般也是没有合适的经验。你想想看,有人愿意付你薪水,让你去尝试、成长、进步,你有什么理由去拒绝?而且当你成功的承担起这个责任之后,你在团队中的作用更大,而且你有了成功的经验,你自身的价值(团队或市场)也更高了。你获取了无数,却没有任何损失(一般主动承担责任,上级对于失败有极高的宽容度,对于成功的定义也往往更加宽松)。
引人注意
如何令自己引人注意:
每天记录自己的活动日志--周报发送给上级
提供演讲或者培训--选择一个对你的团队有用的话题
发表意见--只要在会议上就这么做,或者只要你能得到机会就这么做。
保证曝光度--定期与老板会面,确保你经常被注意到。
这个道理很简单,有的恒星比太阳还亮,但是你看不到,因为太阳离你近。靠近并且发光,充分展示自己的价值。
成为专业人士
成为专业人士的全部在于:引人注目,恪尽职守,以及不屈服于挫折。成为专业人士,需要你克服自身的缺点,静下心来创作出尽可能最好的作品。
你需要培养自己的专业习惯
时间管理技能
每天开始工作之前你知道自己要做什么吗?你能很好掌控日常任务所需要的时间吗?每天提前做好计划。
自由职业
自由职业者的一大担忧是接不到工作,于是也就没有报酬。如果没有足够的工作填满自己的时间,或者再完成一个客户的工作之后你不得不积极寻求更多的客户,你的压力会很大。最好的清醒时工作任务以及提前安排妥当,或者处于工作太多不得不推掉一些的状态。
要达到这一目标的唯一方法,就是随着时间流逝不断增强业务能力。你需要有长期客户,以此来确保未来的业务量,同事你也需要有稳定的新客户上门。挂出招牌之后就等着这两件耗时从天而降几乎不可能。你需要假以时日,精心培养这两类客户。
你该如何开始?你该如何得到你的第一个客户?获得客户的最佳方式时通过你已经认识的人。熟悉你的人更容易信任你,特别是在启动阶段。还没有辞职的时候,你就要在自己的社交网络上发布消息,让你的培养和熟人知道你将要成为自由职业者,正在寻找业务。务必让他们明确知晓你到底能为他们做什么,你能解决什么样的问题。
列出所有你认识的并且可能会对你的业务感兴趣的人员名单,并给他们发私人邮件,让他们明确知晓你能为他们做什么,以及他们为什么要雇佣你做这项工作。你的潜在客户越多,找到业务的可能性越大。
你真正要关注的是所谓的吸引式营销(inbound marketing)。让潜在的客户主动送上门,而不是你去找他们。你要做的事情就是免费提供有价值的东西
你可以把自己的工作看作是商品,也可以把他看作是能够增加客户盈利能力的服务。如果你把自己的工作看作是商品,就不得不和其他的开发人员竞价了,很多人的出价很低。在这种情况下,市场将推动买方接收出价最低的自由职业者。但是,如果你的营销策略是基于自己的服务为客户节省大笔开支或者提高他们的业务,就你可以根据自己的服务为客户带来的价值来定价。这就是专业性如此重要的原因。
作为软件开发人员,你不仅能够开发软件产品,还可以开发书籍和视频这样的信息产品。
信念
假装自己能成功(Fake it till you make it)意味着:
你仿佛已经具备了成功完成任务的技能和天分
你仿佛已经成为了自己想成为的那类人
仿佛战斗已经结束,而你大获全胜,因为你甚至如果自己坚持不懈,胜利就在眼前
你仿佛已经对即将踏上的位置道路驾轻就熟
你说服自己的身体和内心去努力,使梦想成为现实。假装能成功是不自信的对立面,你要在做任何事情的时候都充满咨询,即使是在自己的能力原因不到的时候,因为你有一种自己能够克服一些障碍的信念。
有意识的让自己身处逆境,迫使自己学会拼搏。带领自己勇敢走向未知领域,坚信挑战与机会并存。
营销
其实你每时每刻都在营销自己。当你试图说服他人接受你的想法时,本质上,你就是在把自己的想法推销给他们。如何包装一个想法往往比想法本身更重要。
当你申请一份工作时,从本质上讲,你的简历就是推销自己服务的一份广告。
问题是,即使我们都在推销自己,我们中大部分人并不是有意识地在做这件事情,我们将机会拱手让人,人有他人和环境来定义我们。
自我营销无非就是学习如何控制好自己要传达的信息,塑造好自己的形象,扩展信息送达的人群。
品牌
品牌四要素:
品牌所要传递的信息
信息就是你想传达的,以及品牌所承载的情感诉求。你的个人品牌时干什么的?你是干什么的?例如我的个人品牌Simple Programmer是围绕着“化繁为简”这个信息做文章,分解复杂概念,转化为人人可以理解的简单概念。
品牌的视觉符号
品牌的一致性
品牌的曝光率
你的主要目标:为他人增加价值
不要努力成为一个成功的人,而要努力成为一个有价值的人。 --阿尔伯特·爱因斯坦
给人们想要的东西,把你的工作成果的90%都做成免费的
成功的必要因素,持之以恒
勇敢地演讲
如果你看起来像个傻瓜,那最糟糕的情形是是么?你不会因为让自己出丑而受到身体上的伤害。无论你在讲台上演讲得多糟糕,也没有人真的在乎。诚然,站着讲台上抖抖索索,汗如雨下可能让你看起来很可笑,而当这一切都结束的时候,没人会记住这些。
想想看,上一次你看到别人在拳击台被击倒是是么时候?你还记得他是谁么?当他下台时你有起哄吗?你有给他发邮件或者打电话让他知道他表现得太糟糕浪费了你宝贵得时间吗?当然没有
学习
教育就是当一个人把在学校所学得全部忘光之后剩下得东西。 --阿尔伯特·爱因斯坦
尽管每个人得学习风格千差万别,但是通过动手实践教会他人,我们能学得更好。与其他学习方式相比,主动学习时效率更高的方式。
当我拥有足够的时间,且没有一个真是具体的目标的时候,这种学习方法很好(从头到尾完整看完一本书)。我最终学会了我想要学习的东西,而且从头到尾读书学东西也并不难,只是要花时间。随着我开始有更紧迫的理由需要快速学习,我发现自己原来的方法就无法奏效了。通常,我并没有时间通读全书,而且我也发现书本里面的很多内容更适合作为参考资料,而不适合实际学习
掌握一门技术,需要了解以下3个要点:
如何开始:要想开始使用自己所学的,我需要掌握哪些基本知识?
学科范围:我现在学的东西有多宏大?我应该怎么做?在开始阶段,我不需要了解每个细节,但是应该对该学科的轮廓有大致的了解,将来才能发现更多细节。
基础知识:不止在开始阶段,想要使用一项特定的技术,我需要了解基本的用户案例和最常见的问题,也需要知道自己学的哪20%就能满足80%的日常应用。
十步学习法:
了解全局
确定范围
定义目标
寻找资源
创建学习计划
筛选资源
开始学习,浅尝辄止
动手操作,边玩边学
全面掌握,学以致用
乐为人师,融会贯通
学习目的和场景的重要性
当需要学习一个新的框架或者新的技术,最重要的就是实际的应用场景和压力。拿一个例子来说,当初在公司A的时候研究HADOOP,并没有应用场景。但是到了公司B的时候,有一个项目需要使用,很快就搭建好了环境,以及在实际场景中应用。dubbo也是在公司C,一周就了解了完整的框架和基础代码的实现与框架集成。有实际的应用场景,才有目标和重点,否则茫茫多的内容只会纵容自己的懒惰和分散注意力。
学习一门技术,我觉得应该要找到3种知识
技术方案架构和应用场景(确定是否符合当前目的)
基础使用入门教程示例()
官方或者权威的完整Reference或者教程
一本书(Reference或者教程),最重要的地方在于目录。你要理解作者的思路,全书分为几段?为什么要这么分段?我当前要做什么?哪些段落对我最有用?我应该了解哪些概念才能够在后续需要继续深入、实际应用的时候找到合适合理的实现方式?
选定重点之后,可以按部就班的学习,也可以直奔重点。但是最重要的部分,要动手操作,而且绝对不能复制粘贴。手动敲过一遍的代码会有残留的印象,复制黏贴的代码在你看下一章节的时候就已经遗忘了上一章的内容。
一本书的路径(目录)设置是有原因的,往往是作者的知识背景、所处的位置和环境、创作的目的来决定的。知识是正确的,但是不一定符合当前坐着的读者(也就是你)读书的目的或者当前的需求场景。尽量就你需要的知识章节进行学习,解决当前的问题,效率是最高的。
开始学习、浅尝辄止
大多数人学习过程中通常会犯两类错误:第一类是知之不多的情况下盲目开始,行动太快。第二类是行动之前准备过多,行动太慢。二者的平衡,掌握的知识要吓到好处,足以让你开始学习,但又不会多到让你无力探索。
如何当老师
最好的教学方式就是以谦虚的视角来观察问题,以权威的口吻去诠释问题。当你教别人的时候,无需让自己表现得比学生更智慧、更博学,但要充满信心,坚信自己所说得一切。没人愿意跟一个对自己讲得内容毫无底气得人学习,也没有人愿意在学习得过程种被人看作是愚不可及的。你要明白,你教的目的是为了帮助别人,而不是为了证明自己的优越性或者寻求认可。
知识短板
知识短板会阻碍你进步,准确识别他们的最佳方式之一就是看看自己在哪些工作上花费了大量的时间,或者一直进行重复性劳动。通常,你会发现,自己的知识短板使工作速度放缓,额外需要大量时间完成任务。由于理解不彻底,所以你只能摸索着前进。
任何你所做的重复性工作都值得彻查一番,看看是否有自己不理解的地方,如果你这样做了,可能会提高你的工作效率。
另一种识别知识短板的方法就是,时刻都要试图了解自己不理解或不清楚的事物。你可以维护一份清单,列出自己需要去研究或者自己不清楚的所有事务,追踪有哪些主题总是不断出现在这个清单上,你会惊讶的发现这份清单的增长速度有多快。
生产力
效率效率效率,打败拖延
专注
什么是专注,专注就是注意力分散的对立面。
想要达到专注工作的状态很难,但是一旦进入专注状态,就能轻松保持。
要进入专注模式,必须要客服将自己的思绪集中于单一任务时的那种痛感。除非你完全享受完成这项任务,否则这种痛感一开始会很强烈。但是这正式关键所在。你必须要意识到,这种痛苦和不适只是暂时的,不会持续很久。
作者还推荐了番茄工作法,并且强调了一点 严格遵守。我原本的理解是番茄工作法只是一个节奏,工作25min休息5min或者工作50min休息20min,都是一样的。但是我觉得严格遵守还有两个意义:
养成习惯,习惯的力量超出你的想象。
节奏固定便于评估。(无论你精力充沛还是无精打采,如果你每一步都是80cm,那你随时都知道自己该走多少步才能到达目的地)
责任感
要培养“对自己负责”的精神,首先要让自己的生活井然有序。如果不知道应该做的事情是什么,就不能真正为自己所做的任何事情承担责任。
你必须通过为自己设定规则,将这种条理性自愿地应用于自己的生活之中。你需要创建自己的规则来管理自己的生活,并且要在自己思维清晰、大脑尚未被错误的判断蒙蔽的时候,提前制定好这些规则
兴趣、动机、成果、倦怠
成果是逐步提高的,兴趣和动机在开始时最高,慢慢下降。倦怠就是那堵墙,我们常常在倦怠面前放弃。
新项目开始前,降低期待,加强决心。
习惯
成就我们的恰恰就是不断重复做的事情。因此,优秀不是一种行为,而是一种习惯。 --亚里士多德
习惯主要有三个要素构成:暗示、惯例和奖励。
暗示是导致习惯被触发的某样东西。它可能是某一天的某个特定时刻、某种形式的社交场合、某个特定的环境或者其他的任何东西。
惯例是你做的事情,也就是习惯的本质。比如抽烟、跑步、单元测试。
奖励是让习惯真正保持下去的锚。这是一种你从执行习惯种获得的良好感觉。
任何事情,养成习惯之后,你会从中受益的。
分解任务
在软件开发领域,我扮演过各种角色,我发现,当我给其他开发人员分配工作的时候,一个项目能否成功的最大标志就是我所分配的任务规模。我要求他人完成的任务越大,他们完不成任务的可能性就越大。大型任务给人带来沉重的心理负担。面对大问题时,我们倾向于花更多时间思考问题本身,而不是采取行动去解决问题。
理财
作者用了若干年时间,购买了若干房产用于出租。在2013年1月,他达到了自己除薪水外每月5000美元的被动收入就辞职了。不过在2019年的今天,我们当中假如有人想重复这个神话确实有些困难。但是作者给出的忠告还是不变的,开源节流。
健身
作者192cm,身材健硕,之前还做过平面模特。可以想象他有多爱健身。健康应该是人生的第一要素,健康也同样是一种习惯。有健康的身体、充沛的精力,你才有可能比别人有更多时间,或者更高效率的处理事务。
精神
我们的身体遵从的是本能,避险、懒惰。需要战胜惰性,我们需要精神力量的支撑。
失败
失败不是终点--除非你选择把它看作是终点。生活不易,你随时都会被击垮,但是否要重新站起来却完全取决于你自己。
学会拥抱失败、期待失败、接受失败、并准备直面失败。
只是不畏惧失败还不够,还要主动寻觅失败。想成长久必须把自己放在保证会失败的环境中。
你还要明白,就算失败也没关系。犯错也没关系。你可以尝试避免犯错,但是不要因为害怕伤害自尊而以付出错失良机为代价。一旦你意识到失败的态度恰恰才能说明你的价值,你才会真正学会对失败无所畏惧。
总结
这本书我从2月14日开始读,大概2月20日读完,一共600多页。对我的感触和吸引力更大的还是开头的第一第二两个章节。我2007年参加工作,到2019年已经工作了12年了,其中11年都是Java相关,技术架构/研发管理也有大概6-8年左右了。作者很多点我都有共鸣,也是我之前有想过的。但还是不够具体,不够系统。
读完之后我想从另外一个角度来复述一下本书的核心观点,就是从某一个具体的人的视角。
“你”是一个软件行业的从业人员,首先你还是需要一个健康的身体,这才是你整个人生的基础和优势。我身体一直还不错,很少生病这样比较少请假,团队中我能承担很重要的位置。我精力也比较充沛,不需要午睡也能连续工作很久。
接下来不要排斥沟通和交往,从面试、入职、转正汇报、工作沟通、客户需求澄清、产品设计沟通、技术方案沟通、BUG确认与修复、上线发布等等,要和不同的角色沟通交流,很多时候事情更简单还是更复杂,往往是坐在你对面的人来决定的,双方良好的配合能够让一个复杂的事情简单若干倍。有些决定对对方可能是举手之劳,但是对方是否要举这个手,取决于沟通的过程(当然如果有权责或者上下级就简单很多,但是现实往往没有这么简单)。所以讲到的那些沟通的原则是真的很重要,我不得不再复述几点:重视/尊重他人、不轻易批评、换位思考。
书中提到了“毒瘤”,就我的经历来看,如果一个公司存在书中定义的那种毒瘤人物,你唯一要考虑的就是跳槽。正常的环境中,你面对的一般只是立场不同的人而已,每个人都会从自己的立场来考虑自己团队或个人的利益(你也是这样的),但是大前提是不影响公司的利益。所以产生冲突时,从公司整理利益角度去考虑,最终找出一个双方都比较合理的方案,再用你良好的沟通来达成协议。
好了,你现在开始承担了一定的责任,提高了你在团队中的地位,你就要考虑你“发光“的问题了。要上升,必须要让你出现在上层的眼中。在合适的场合勇敢的发言和站出来!这是一个循环,你不断承担更多的责任,不断提高自己的亮度,在团队中不断上升。不过在这个过程中,永远不要忘记,你是一个技术人员!你要保持你的技术优势,你的专业就是你的最大优势。因为你无论如何都是在一个技术团队中生存。
当你发展到某一个阶段,可能会存在瓶颈,你可能会厌倦当前的环境、肩上的责任、乱七八糟的事务。如何友好的离开,并且找到合适的新环境?其实在此之前,你就要有意识,你到了需要积累的阶段了!博客、演讲、录制教学视频、翻译英文文章都是你当前阶段可以考虑的方式,提高自己的知名度和影响圈子,无论是后续择业或者是开创自己的事业,都是重要的方式之一。
【软技能代码之外的生存指南】再往下我觉得就不能给什么样的建议了,站在这个高度的你已经有了自己的圈子、行业的知名度、技术路线。我觉得肯定不会错的事情就是继续坚持对的事情。坚持你现在的良好习惯,继续投资自己,不断进步,勇于尝试机会,最终我相信你一定能够获得你期望中的成功的。

    推荐阅读