作为一个有理想的程序员,必读的书都有哪些?

程序员有哪些必读的书?

我要给大家推荐这样一本书,讲的却是程序员写代码之外的能力,这本的书名是《软技能》,还有一个副标题是「代码之外的生存指南》。

不光是程序员,每一个人都可能有这样的困惑:为什么读一样的学校、受一样教育的同学,毕业的时候成绩也差不多,工作几年之后,有的人已经成为风云人物,有的人却依然默默无闻?为什么专业技能差不多的同事,几年下来,有的人晋升得很快,有的人则总被忽略?到底是什么造成了这样的差距?

我自己十几年的工作体会告诉我,限制技术人员发展的因素,往往不是技术能力,而是技术之外的软技能。很可惜,学校能够教会我们硬技能,但是软技能的教育一直是空白,这本《软技能》很系统地介绍了软技能的培养方法,相信能够帮助很多人走出困惑。虽然这本书的目标读者是程序员,但是我个人认为,任何职业都需要软技能,相信从事其他工作的读者,也可以从这本书中获益。

这本书最精彩的地方,就是并不只是说明软技能的重要性,而是明确给出了培养软技能的方法,通过阅读这本书,你可以按图索骥,根据书中介绍的方法直接训练自己的软技能。

作者 John Z. Sonmez 是「Simple Programmer」网站的创始人,他一直致力于辅导程序员的个人成长,关于软技能方面的培养,作者的思想是非常清晰而且成体系的,这也是我推荐这本书的主要原因。

接下来,让我来介绍一下本书的要点,可以总结为三个部分。

第一个要点,如何培养自己的软技能;

第二个要点,如何进行自我营销;

第三个要点,如何自学。

我们先来讲第一个要点,如何培养自己的软技能。

所谓软技能,就是相对于「硬技能」而言的技能,对于程序员来说,「硬技能」就是计算机专业技术能力,软技能则是专业之外的所有技能,包括职业规划能力、处理人际关系能力、专业态度等,接下来我会一一介绍。不过,要强调的是,我们要培养软技能,首先要端正态度,正视软技能的作用,不要觉得软技能可有可无。

在《软技能》这本书中,作者说每个程序员都应该把自己的职业当作一件生意。即使你只是一个打工仔,你依然是在做生意,你贩卖的是你的劳动力,毫无疑问,你必须尽力把自己的劳动力卖个好价钱。要想在这个生意场上不吃亏,就不要做别人也能做的事情,就像不要卖别人也能卖的货物,也不要提供别人也能提供的一模一样的服务,因为这样会让你毫无竞争力。

想一想,如果把你能提供的服务卖给一家公司,你有哪些特点是别人没有的?如果你能列出很多,那么,你的薪资肯定不低;如果你发现你能做的几乎都很容易找到其他人来做,那么,你的报酬很可能会被压低,而且你还不得不接接受。

怎么样才能把自己卖个好价钱呢?硬技能当然是一个重要因素,但是,硬技能和软技能如同一个人的两条腿,缺了哪一条都会瘸腿,而这个世界上瘸了「软技能」这条腿的人太多了,只要你的软技能突出,就很容易获得别人不具备的优势。

首先,我们来说说非常重要的职业规划能力,你只有规划了清晰的目标,才能让自己每天的工作不会跑偏,没有目标的努力往往都是事倍功半。

很多程序员都没有做职业规划,虽然程序员的智力可以理解庞杂的软件,但是往往却不能对个人目标做一个清晰的定义,这个事实的确让人吃惊。《软技能》这本书中对这种现象给出了解释,和我多年观察的结果是一致的,这个原因就是,大部分程序员缺乏的并不是制定目标的能力,而是缺乏做长远规划的动力。让一个程序员制定这一周要实现功能的目标,这没问题,但是要让他们制定五年后的目标,甚至只是制定一年之后的目标,他们就放弃了。为什么会这样呢?我觉得这是因为程序员普遍觉得未来不可预期,我们这个行业有一句话叫作「唯一不会发生变化的,就是变化」,所谓计划跟不上变化,因为技术发展很快,需求变化也很多,程序员潜意识里就会觉得长期规划没有意义,所以他们很自然会逃避这个话题,很不幸,这也导致他们犯了最严重的软技能错误。

要克服这一点,并不难,你要做的是找一个放松的环境,不受外界干扰,想象一下五年到七年之后你希望达到什么目标,注意,只需要考虑你「希望」达到什么目标,不必考虑自己「能不能」达到这个目标。然后,你就根据这个大目标制定阶段性的小目标,一个宏大的目标看起来遥不可及,但是每一个小目标都是可以短期实现的。每隔一段时间,都要重新审视一下自己的小目标,看一看哪些实现了,哪些还没有按期完成,哪些已经不适用了,还有哪些之前忽略的方面,需要添加成为自己新的小目标。每一个小目标,都是为了大目标而努力,用不了多少,你就会发现自己向大目标前进了很多。

职业规划的目标是可以改变的,比如,你早年可能以成为技术总监为职业目标,但是经过几年管理的经历之后,你发现自己不适合做管理工作,而且环境允许你在技术上继续深入,你可以把目标变化为架构师方向。这代表你之前的目标是错误的或者努力是白费吗?当然不是,在你的努力过程中,你所获得的技能和领悟,都会进入你的血肉中,在不知不觉中改变你的做事方式,即使你换了目标,这些技能和领悟依然会帮助你朝新的方向前进。

处理人际关系,是软技能的另一个重要方面。作为一个软件开发人员,虽然你的工作产出是可以运行的代码,但是写代码不应该是你工作的全部,你的工作中很大一部分是和人打交道。

和人打交道,并不难,只需要记住一个最核心的原则,那就是:每个人都希望自己很重要。这也是卡耐基的名著《人性的弱点》中的核心观点,认识到「每个人都希望自己很重要」,就知道换位思考,让别人感觉到自己有意义从而有满足感,如果每个人通过和你交往都能获得满足感,那他们肯定愿意帮助你,你离成功就不远了。

对于程序员,尤其要强调一点,不要觉得自己技术上牛,就可以高人一等,就可以鄙视水平不如自己的人。这个行业靠的是团队合作,绝对不可能只靠一个人完成项目任务,而每个人的出身、经历、教育背景、性格、天性都会有不同,要尊重每一个人,对于组织而言,这是提高多样性,对个人而言,搞好和其他人的关系,就算不能给你创造更多的就会,至少不会让别人在背后给你使绊子。

有人的地方,发生利益冲突是不可避免的,不过,冲突归冲突,在工作中要尽量避免和别人发生争吵,争吵毫无意义,即使你表面上赢得了一次争吵,也会给旁观者留下不好的印象。你可以回忆一下,在工作中或者学校里你所目睹的争吵,作为旁观者,你会如何看待争吵参与的双方呢?肯定不会有好印象,所以,不要在工作中和别人争吵。

还有一个很实际的问题,如何应对找麻烦的人。社会很复杂,各种千奇百怪的人都有,有些人即使你不去惹他,他也会来找你麻烦,这种情况怎么处理呢?只有一个办法,离他们远远的,如果这种人正好是你的老板或者必须紧密合作的同事,那么,你也许应该考虑换一个工作岗位。

接下来,我们要说另一个重要的软技能,关于职业选择。社会分工是生产力发展的必然结果,随着计算机及其衍生行业的发展,程序员势必会成为专才,而不是通才,即使现在有一个「全栈程序员」的概念,但是真正有竞争力的程序员,往往是某一方面的专家,而不是什么都能干的通用性人才。

如今,大量的程序员完全是以自己使用的编程语言来定义自己的专业性,你可以经常听到有人说「我是 Java 程序员」或者「我是 C 程序员」,可是,这种专业分工方式并不合理,因为这些编程语言说到底只是工具,使用什么工具,并不能看出一个人的水平,也不能体现你能胜任哪方面的软件开发工作。

很多猎头或者人力资源部门给程序员打电话联系的时候,张嘴第一句话就是:「你用的是什么编程语言?」请相信我,如果对方是这么问,那意味着他们推销的工作肯定质量不高,因为他们想要的只是一个能使用一种工具的人,而不在乎这个人的真正专业水平。

比较靠谱的自我定位,可以是「前端开发」「嵌入式系统开发」「移动应用开发」「操作系统开发」等,摆脱出工具的标签,你的竞争力会更强大而且持久。

技术是在不断发展的,今天热门的技术,过几个月可能就是明日黄花,所以,程序员要不断更新自己的知识储备,这就涉及到技术选择的问题,也是最容易让程序员焦虑的问题,因为如果选错了,就会浪费大量的精力,最后也没有一个很好的结果。庆幸的是,行业的变化虽然快,但每一个变化都有先兆,只要你在工作之余留心行业的变化,就不难发现技术发展的趋势,而你要做的,就是千万不要错过下一班快车。

男怕入错行,不过既然已经进入了这行,改行代价太大了,所以我们要做的就是选择对的公司来效力。那么,是选择大公司还是小公司呢?

小公司一般都是创业阶段的公司,这种类型的公司风险比较大,随时可能倒闭,同时机会也多,这里说的机会不光是期权股票带来的金钱收益,更宝贵的是工作经验上的收获。要知道,在大公司里,每一个人都像是一颗螺丝钉,在一个岗位上的责任并不大,而且可能要运转很长时间才能获得晋升的机会,但是在小公司里,这样的机会就会很多。在这里,本书的作者作为创业者,并没有鼓吹创业,他并不建议为了「中彩票」而选择去创业公司。因为,一旦选择了这条路,你可能耗尽心力却一无所获,选择为小公司或初创公司工作的一个更好的理由是,你喜欢那种快节奏的、令人兴奋的工作环境,也希望构建伟大的产品并见证它的成长。

在大公司里,程序员面临两个重大的挑战,一个是每个人的工作可能都是无足轻重,另一个,就是大公司的办公室政治。但是,这并不代表大公司就是一个令人生畏的地方,大公司有大公司的缺点,但是也有它的优势。大公司能提供稳定的工作环境,还有丰富的资源。关于办公室政治,作者建议不要在玩弄政治游戏上投入过多时间,不过,我在这里要说一下我的观点,有人的地方就有江湖,有人的地方就有政治,与其逃避,不如去经营,很多人所说的「办公室政治」,其实就是「人际关系」,把人际关系经营好,就是搞好了政治。对于想要扩大影响力的程序员,政治是一门必修课。

以我个人的理解,不要纠结于选择小公司或者是大公司,重要的是选择「专业的公司」,在《软技能》这本书中,作者也强调程序员一定要做一个专业人士。

什么叫专业?专业意味着恪尽职守,坚持去做正确的事情,即使这么做会让自己付出代价。比如说,在软件开发过程中,工期紧张,你是否会牺牲软件质量来追赶进度?面对难以维护的代码,你是选择有组织的重构,还是推倒重来?实际上,刚才提到的这些问题,并没有一个统一的标准答案,因为不同的组织不同的场景下,有不同的判断准则,但是,专业的程序员会坚持做正确的事情。我们做正确的事情,然后等着被开除或者晋升,如果被晋升,那当然最好,但是,如果公司因为不认可你的判断而开除你,那么这家公司不值得你努力,选择更加专业的工作机会就好了。

支撑这个行业的精英都是专业人士,你只有让自己尽量专业,才可能被这样的精英群体接受和认可,从而在行业中有稳固的一席之地。

各种软技能的修炼,最终都要面对一个问题——如何获得晋升。

承担责任,是获得晋升的重要法宝,你的责任越大,你也就越不可或缺。在工作中,没人愿意涉足的领域是搜寻机会的最好地方。当然,这和大部分程序员的想法是相悖的,大部分程序员都觉得,最热门的工作才值得去拼去抢,没人愿意做的事情,就会被认为是没有价值的,其实,只要经营得好,冷门也很容易成为热门。

作者举了一个很好的例子,简洁承担责任的一个方法是成为团队里其他人的导师,自愿帮助新人加速成长,为所有需要的人提供帮助。如果能做到这一点,很快你就会发现你是团队里最有影响力的人。

做得好,不如说得好,这个道理大家都知道,你的工作,一定要要让你的领导知道,也要让团队知道。简单说来,你可以做到这些:每天记录自己做了些什么,汇总成周报,发给领导和团队;主动提供演讲和培训给团队;在会议上发表意见。

有很多程序员害羞,不愿意或者不敢发表个人观点,这一点在就职于美国企业的中国程序员身上体现得淋漓尽致,因为中国人更加害羞,和有事没事都要说两句的印度程序员相比,中国程序员普遍都很吃亏。还有,定时和老板做一对一汇报,就算日常和领导直接接触机会不多,每周或者每个月都要和领导做闭门交流,让领导知道你的成绩,同时也要了解领导的思想动态。这并不是所谓的「拍马屁」,这是和领导紧密合作,为了更好的工作成果,也为了自己更好的生活而努力。

上面为你讲的是第一个要点「如何培养自己的软技能」,接下来我们来说第二个要点,如何进行自我营销。

一般人听到「营销」这个词,脑子里复现的场景就是营销人员急功近利不择手段地给其他人洗脑,事实上,这个世界上的确是有大批无良营销人员为了一己私利而不断兜售新的骗局。

不过,换一个角度来看,既然这世界上有那么多骗子在营销,作为一个踏踏实实的正直从业者,为什么要眼睁睁看着劣币淘汰良币呢?没有理由让这个世界充斥着虚假浮夸的营销啊!如果你本身就很优秀,加上适当的营销,那就是如虎添翼。

业界总有一些夸张的故事来描述营销,比如如何把冰块卖给爱斯基摩人,这就容易让人觉得营销就是不择手段把东西卖给别人,即使对方并不需要也要说服他们买下来。

营销当然不是吹牛和洗脑,真正的营销首先是实现价值,然后要求回报。

营销的核心在于将一些人所需要的、所期待的产品或者服务,与产品或服务本身连接起来。对于我们自己,要做的是「自我营销」,「自我营销」也就是把希望得到你提供的产品或者服务的人和你自己连接起来。

个人营销,就是要打造个人品牌。品牌并不只是商标,品牌是对产品或者服务的一整套预期。而个人品牌,就是别人说到你的时候,觉得你这个人怎么样,预期你会做什么事,能把事情做成什么样。我们绝大部分人不会有像比尔·盖茨那样显赫的个人品牌,但是,在一个小众范围内,你可以做到让自己成为数一数二的人物。

作者是创业者,他根据自己的经历提出了打造个人品牌的一些建议,比如:写博客、利用社交媒体、演讲和培训、著书立说。这些方法当然可以提高个人品牌,我自己也写博客,也在知乎上活跃回答问题,也写了技术书籍,不过,我要说的是,对于大部分程序员来说,并不是只有做到这些才有出路。实际上,我觉得作者在书中的另一个观点更实际,那就是在「小众范围内打造个人品牌」。比如,你能建立的个人品牌不大可能是「中国最杰出的程序员」,但是你可以做到「网页可视化方向的突出贡献者」,甚至更小一点,「某某公司范围内最靠谱的开发者」,对你一样有价值。

面试,就是推销自己的最好机会,一个自我营销做得好的程序员,在面试的时候,必定无往不利。

说到面试这个获得更好工作机会的必经之路,首先要明白一个要诀:内部推荐的渠道永远要比对外招聘更加靠谱。因为,内部推荐相当于内部员工的背书,是一种人品保证,人力资源部门和用人部门都会优先考虑内部推荐的候选人。

如果你心仪一家公司,可是这家公司里一个人都不认识,那么怎么办呢?你依然可以通过互联网建立和公司内部人员的联系,在知乎、微博这样的社交网络上,不难发现乐于助人的同行,和他们建立联系,获得一份内部推荐机会,只要愿意迈出这一步就可以做到。

当获得面试机会之后,一定要清楚,决定面试成败的往往是技术之外的软技能,在这里,我可以教你一个软技能,可以最直接地提高你的面试成功率,这技巧就是:永远保持一个正能量的态度。你可能对某个技术问题了解得不是很深,甚至根本不会,但是不要表现得急躁、不耐烦或者生气。正确的方法是以正面态度来应对,你可以向面试官咨询提示,计算给不出答案,也可以尽力用自己的语言描述一遍这个问题,展现出你想要解决问题的愿望,相信我,这样一定会给你的面试结果加分,我自己就经历过这样的面试。

也有反例,有的程序员做了很好的个人营销,却在面试中失败,我和几个朋友曾经面试过一个网红程序员,最后大家一致决定不录用这个网红,因为他在面试中并没有展现出正能量的态度,这和所谓的「名望」形成太大的反差。所以,还是要重复一下营销的本质,营销的本质是要能够展现价值,而不只是追求简单的名声。

上面为你讲的是第二个要点「如何自我营销」,接下来我们来说第三个要点,也就是最后一个要点「如何自学」。

软件世界发展很快,几乎每天都有新技术出现。同样,每天都有你之前学习的东西变得毫无意义。你在大学里所受的教育,能够给你一个坚实的基础,作为你在工作中起步的推力板,但是,你不要指望在毕业拿到学位之后就可以停止学习,恰恰相反,你需要持续地学习才能让自己更有竞争力。

当然,毕业之后,一个人的成长很大程度上是依赖于自学,很自然,自学就是程序员必须掌握的技能,这可能是最重要的「软技能」,因为这是持续获得其他一切技能的技能。

《软技能》的作者总结了「十步学习法」,我这里将十步总结为两个阶段。

「十步学习法」的第一个阶段,有六个步骤,包括:「了解全局、确定范围、定义目标、寻找资源、创建学习计划、筛选资源」。其实都是大家耳熟能详的学习方法,不过,还是要强调一下「筛选资源」这一步,因为很多程序员对学习材料是来者不拒的,看到什么都想要学,虽然好学是一个好品质,但是,每个人的时间和精力都是有限的,要利用好有限的时间和精力,产生最大的回报,就不要浪费时间学习根本用不上的东西。

「十步学习法」的第二个阶段,包括的步骤有:「开始学习、浅尝辄止、动手操作、边玩边学、全满掌握、学以致用、乐为人师、融会贯通」。第二阶段和第一个阶段有一个显著差别,那就是,在学习某项技能的历程中,第一阶段只是计划,只需要做一次,但是第二阶段则需要重复进行,来回往复,才能有深刻的体验,因为,除非你是天才,不然你不大可能一次就学会学好。

上面所说的「十步学习法」,说起来容易,做起来也不是很难,但是学习真正的诀窍,还是在这「十步学习法」之外,那就是导师的作用。

你有没想过,为什么在学校里学会一样东西容易,而毕业之后自学往往就显得吃力?一个主要原因就是学校里有学习的氛围,同学们都在学,这种氛围可以促使你前进,也可以给你创造互相帮助、互相指导的环境。

当你离开学校之后,再想要寻找那样很多人聚在一起学习的氛围,肯定是不现实的。但是,你可以创造一个小范围的学习氛围,那就是寻找导师,在你和导师之间建立这种激励和指导的氛围。

找导师,一般人们首先会联想到工作中的领导。虽然你的领导了解你的工作,甚至也会给你一些学习上的建议,但是,你不要把目光局限在直系领导身上,更何况没有人规定你只能有一个导师。你的导师,最好了解你从事的行业,但是和你没有任何利益关系,这样他才能给予最中肯、最客观的建议。从这个意义上说,你最好从其他部门中寻找导师,而且可以有不只一个导师。如果你时间充裕,完全可以寻找多个不同背景不同知识领域的导师,这样你就能接触不同方面的观点,让你的思想更有多样性。

那么,选什么人当导师呢?方法其实很简单,看一看你能够接触范围内的同事或者同行,他们中哪些人身上有你值得学习的闪光点,这些闪光点可能是某方面专业技术很突出,或者是拥有更多的行业经验,只要你觉得可以学到很多的对象,都可以成为你的导师。要注意,并不是说只有各方面都比你强的人能当导师,任何人都有可以学习之处。网球天王费德勒的教练网球也没有他打得那么好,但并不影响他的教练给予费德勒相当有价值的指导。你所要做的,就是确定自己需要在什么方面提高,并挑选出最有可能给你这方面指导和帮助的人。

当你确定导师之后,就要和导师建立个人关系,时不时去请教,建立信任感。相信我,每一个人都希望自己显得重要,只要你尊重对方,对方都会乐于给予帮助。不过,在这里,程序员很容易犯一个错误,这也是我的亲身经历教会我的:某些程序员很好学,找导师了解一件事情该怎么做,然后导师给予了他很有经验的建议,矫正了程序员以前的错误做法,可是,这些程序员真正做事的时候,却完全忘掉了导师的建议,依然按照以前的方法去做,当导师知道这样的结果的时候,你说会怎么想呢?

要知道,每个人的时间都是宝贵的,你和导师之间的关系,并不是付费咨询的关系,导师回答你的问题,可是分文不取,是看你是一个可造之材才给予帮助,结果,你当面听,背后就忘,那导师怎么会觉得辅导你还有意义呢?同样的时间,他完全可以去辅导其他人,哪怕是睡个觉休息一下,也会比和一个说什么都不听的人更有价值。

所以,尊重导师,并不只是语言上客气,而是要在行动上真正认可导师的帮助。如果你的观点和导师的建议不一致,或者说你只是想尝试导师建议之外的方法,那你要及时和导师沟通,说明自己的本意,避免误会。当然,如果你觉得导师给予的建议本身就是错误的,那么,他已经不适合做你的导师了,你应该去寻找新的导师。

拥有导师对你非常有帮助,而让自己成为别人的导师,那就是好上加好。当你的水平达到一定程度,就不要只满足于从导师那里获得输入,而是要改变角色,成为导师,输出自己的知识、技能和影响力。

成为导师,不只是反馈社会,帮助别人,其实对你自身也有巨大的帮助。在传授知识给别人的过程中,你有机会重新审视一遍这些知识,摩擦出新的火花,这对你的认识是一个加深的过程。更重要的是,有朝一日,你的徒弟可能会超过你,获得更大的成就,这样,你就可以获得更为广阔的人脉关系。想想一下,一个公司的 CTO 曾经是你的学徒,那将会对你的个人品牌有多大的帮助。

好了,《软技能:代码之外的生存指南》这本书讲得差不多了,接下来,让我们总结一下。

我们首先了解了什么叫软技能,了解应该如何训练自己的软技能,然后,我们讲述了个人如何做自我营销,最后,我们介绍了最重要的软技能基础——自学能力。

读了这本书,我个人的感受就是一句话:硬技能可以让你保住饭碗,但是,软技能的修炼才是让你飞黄腾达的关键。

以上的讲述内容,是基于 2016 年 7 月人民邮电出版社出版的《软技能:代码之外的生存指南》,希望我的推荐,能够帮助你更好的理解这本书。

愿每一本好书都能让我们成长。

下载地址

公众号回复关键字 28324直接获取下载链接

这是一本真正从“人”(而非技术也非管理)的角度关注软件开发人员自身发展的书。书中论述的内容既涉及生活习惯,又包括思维方式,凸显技术中“人”的因素,全面讲解软件行业从业人员所需知道的所有“软技能”。本书聚焦于软件开发人员生活的方方面面,从揭秘面试的流程到精耕细作出一份杀手级简历,从创建大受欢迎的博客到打造你,从提高自己工作效率到与如何与“拖延症”做斗争,甚至包括如何投资不动产,如何关注自己的健康。本书共分为职业篇、自我营销篇、学习篇、生产力篇、理财篇、健身篇、精神篇等七篇,概括了软件行业从业人员所需的“软技能”。通过阅读本书,软件工程人员、编程人员和其他技术人员能够积极思考自己的职业生涯,丰富自己的生活,让自己更接近成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章