赞
踩
知道和做到之间有一道鸿沟,要想跨越它,你不但要努力,还要讲究方法。《程序员的成长课》不仅传授知识,更教给读者如何做好。《程序员的成长课》中的理念、方法、工具可以指导读者更好地看清定位及发展方向,设计未来。如果读者不知道选择什么技术栈来学习,困惑于怎样在技术上持续精进,想转技术管理却没途径,想有章法地为跳槽加薪做准备,或者想转型却不知道自己除了技术还能干什么,建议认真读本书,它提供的方法和工具可以帮助读者很快找到答案。
《程序员的成长课》适用的读者:所有程序员,IT 相关专业的学生、教师、培训机构学员等。
安晓辉,资深开发者。拥有十余年开发与管理经验,经历过软件开发工程师、研发经理、项目总监、研发总监等岗位。著有《 Qt on Android 核心编程》《 Qt Quick 核心编程》《你好哇,程序员》《解忧程序员》等图书,电子工业出版社优秀作者。
知乎优质答主,关注者过万。知乎 Live 讲者,设计开发了面向开发者的知乎 Live 专题“程序员的成长课”。个人 Live 被参与超过2万次。 CSDN 知名博主,粉丝超过2万人,2014年、2015年两届博客之星,博客阅读量500多万次,排名100以内。职业规划师,对程序员的职场发展与个人成长具有浓厚的兴趣,通过订阅号“程序视界”、CSDN 博客、知乎专栏、在行、分答、值乎等渠道,以文章、咨询、问答等形式提供各种生涯服务,超过50万人受益。
作为一名普通的程序员:
这些想法不能实现,会经常性地带给你痛苦。这种痛苦,会随着你工作时间的增长而加深,渐渐变成你生活的底色——你的底色原本简单明快,现在幽暗阴郁。
实际上,这些所谓的痛苦,有 90% 都可以通过钱来解决。前提是:你的价值能够不断提升,赚钱速度超越需求膨胀。消除了这些痛苦,幸福感就有生长的环境,就不那么容易被淹没。
可是作为普通的程序员,你却发现瓶颈一个接一个地扑过来。做技术,不知道怎么做到持续精进、怎么坚持;转管理,又不知如何开始。结果还没等想明白呢,半载一年就过去了,蓦然回首,好像自己的能力没怎么提高,薪水增速却越来越跑不过通货膨胀了。
有时候你觉得开发工作越来越吃力,转型的呼声越来越高,却不知道如果离开开发岗位自己还能干什么。看着别人可以选择当自由职业者,或者能实现财务自由,内心羡慕,然而转过身却只能叹息:自己的路,究竟在哪里?
仔细想想,你就会发现,要搞定这些事情和问题,只要能赚到更多的钱就可以了!
这个结论很俗吗?
不,现实正是如此!
对于大部分开发者来讲,工作和生活的诸多烦恼,其实都源自于:怎么赚到更多的钱。
要想赚到更多的钱,就要回到问题的原点,想想个人赚钱的本质是什么。
个人赚钱的本质是——出售时间!对吗?
从出售时间的角度来看:
个人收入=每天可售时间数量×单位时间价格×单位时间出售次数
在这个公式里,有三个要素,简单描述就是:
结合开发者的具体情况,可以找到多种提升收入的方式。参考下表:
或许你知道所有这些方式甚至知道更多,但是,怎么做到呢?
这是个大问题!
知道和做到之间有一道鸿沟,要想跨越它,你不但要努力,还要讲究方法。
这本书不会承诺“看完本书就能快速赚钱”,不提供任何安慰和幻觉,它只是一本工具书,仅仅是发出一份邀请,让你看到有一些方法可以用来分析自己、帮助自己去有效选择和提升,但最终你是否可以用书里的理念、方法、工具指导自己的工作和生活,则取决于你的认真程度和执行力!
所以,如果你愿意付出努力让改变发生,那么我们现在开始一起行动!
本书共有8章。
第1章,介绍如何选择技术方向,我们结合技术成长三阶段模型,讨论在入行、构建技能树、技术转型、团队技术方案选型等常见场景中如何选择适合自己的技术,提高增值的效率。
第2章,讲述如何在技术上持续精进,着重讨论如何在工作中将持续提升自我能力和价值落在实处。为此我们引入了个人对标管理法,让你从优秀的同行者、一般性规律、技术自身的深浅层次和软件项目指标四个方面出发,找到随时随地可以引领自己前进的小目标、小台阶,再配合职业目标的指引,小步快跑,日有寸进。
第3章,探讨了开发者无法回避的发展方向——技术管理。从开发者到管理者,不是职位序列自然发展的结果,而是一种转型,且并不适合所有人,因此我们提供了一些工具和方法,让你自测一下,看看自己是否适合。如果你发现自己很想试试管理路线,可以接着看走向技术管理的4种常见方式,然后了解怎样为成为管理者做准备。从概率上讲,成为管理者后,可以通过团队实现更大的产出,也会因此赚到更多的钱,你的未来会有更多可能性。
第4章,讨论了技术管理新人面临的18种常见挑战,比如角色适应、委派任务、激励他人、冲突管理、一对一谈话等。如果你刚刚升任管理者,一定会碰见这些挑战,翻翻本章提到的应对策略,会对你有所帮助。
第5章,介绍了开发者在跳槽时常见的 8 个问题。比如什么时候跳槽好、依据什么跳槽、选大公司还是小公司、去北上广深等一线城市还是找个小地方享受生活等。这些问题会给你触动,引发你思考自己的选择。
第6章,讨论了如何针对匹配度来优化你的简历。最关键的要点有两个,一是一个岗位一份简历,二是分析目标职位的要求,针对要求呈现你的价值点。你能注意到这两点,就可以大大提升简历的通过率,为自己赢得机会。
第7章,如何在跳槽时获得想要的薪水,这恐怕是每个人都关心的话题。其实从你决定应聘这家公司职位的那一刻就开始涉及这一点了,核心要点是匹配度。所以,从简历优化到了解公司、产品、部门、职位,再到了解目标岗位薪酬区间,你都要围绕匹配度做准备。如何准备?这一章提供了流程、框架和方法。
第8章,转型,也许有一天,我们会离开软件,想要去做别的事情。那么你还适合做什么?想做什么?如果你“拔剑四顾心茫然”,可以看看这里的人、事、物模型和发现职业方向的5步法。只要你做好准备、花些精力,就可以找到适合自己的转型方向。这一章还讨论了转型时如何准备目标职业所需的知识、技能,并提供我和我的朋友们实践过的最佳方法:双职业策略。
在正文之后,有一个附录,是我个人分类总结的书单,对开发者的综合素养提升大有助益。
努力只有在方向正确时才有价值。
开发者选择技术也是如此。假如你阴阳差错选择了一门过时的技术或者在当地没什么单位使用的技术,你在找工作时就会不断受挫,即便你找到了工作,也会忧心自己的发展前景。
所有这些问题,我们都会在本章讨论,我们会找到选择技术方向时要考虑的各种因素,然后结合特定的场景,看看你在选择时需要考虑哪些因素。
通过本章的学习,作为个人,你会掌握怎么选择一个适合自己的技术方向,好的方向会让你越来越有竞争力,越来越值钱;作为团队的一员,你会知道在为某个项目选择技术时该如何综合考虑,在风险、成长、代价之间进行权衡。
为了更好地选择技术方向,我们先来介绍一个模型,我给它取了个名字,叫“技术成长三阶段”,如图1-1所示。
图1-1
我们在一个专业领域内的成长,基本上都会经历三个阶段:
1.初级阶段:专项能力的提升
专项能力提升阶段是初级阶段,你为了做事情,必须先具备某些基础能力,比如从事软件开发工作,你要学会某种语言、某个 IDE、某种技术框架。
如果你刚刚从学校毕业开始做开发,或者刚刚从别的跑道转换到开发领域,那么你就处在这个阶段。这个阶段最重要的就是提升专项能力,让自己能够迅速搞定一些别人安排给你的事情,体现出你的价值。
这个阶段持续的时间长短因人而异,可能会是1~3年。如果超过3年还没有进入下一个阶段,那么你的成长速度就需要提升了。
2.中级阶段:技能体系的构建
这是中级阶段,你拥有了一组技能,围绕某个方向构建了自己的知识图谱,能够用自己的方式来解决问题。比如你使用 Java 语言做后台方面的开发,你的技能体系可能由 Java、MyBatis、Spring、SpringMVC、Netty、MySQL、Python、Linux 等组成。此时你在团队中,应该已经可以独立负责某个模块,能够完成模块的设计和开发工作,也能够指导初级阶段的同事进行开发。
你可能需要2~3年,经历2~3个项目才能慢慢构建起自己的技能树,然后还会在这个阶段待上1~2年,不断练习你的技能体系中的各项技能。所以当你能够拥有一棵强大的技能树时,距离你刚从事开发工作可能有5~8年了。
假如你超过这个年限,用过的技术还是散乱的,东一榔头西一棒槌,不能有机组合在一起,那么你的开发经验和能力,肯定大大落后于你的工作年限。换句话说,你可能把一年工作经验学到的知识、技能机械地重复了几年,没有获得应有的成长。
3.融合创新
这是高手阶段,你具有了丰富的实践经验,具备了T型知识结构,形成了自己的思维框架和解决问题的框架,能够融合不同领域的知识,组合各种资源,创造性地解决各种问题。
进入这个阶段非常重要的一种标志就是,你遇到问题,不再从下而上去思考(即从技术实现细节来考虑问题好不好实现、拿技术去裁剪问题或重定义问题),而是从实现细节跳脱出来,站到更高的层面,自顶向下去思考、去分析,先运用框架、逻辑去分析真正的问题是什么、问题的目的、问题的现状、如何去解决。搞明白这些之后,你才会沉降到技术层面去考虑实现的选择,而且实现时,你也不会拘泥于某种技术,而是什么技术合适就用什么技术(你的目的不是“用 Java 或 Redis 解决问题”,而是“解决问题”)。简单说,就是你走出了被技术束缚和塑造的过程(前两个阶段),可以反过来回到问题本源来思考了。
在这三个阶段中,我们都会遇到选择技术方向的问题。比如在初级阶段,入门时要选择,发现某种技术不适合自己时要重新选择;在中级阶段,我们要选择某些技术来构造我们的技能树,或者要做技术转型,需要重新选择技术方向;再比如在高级阶段,我们往往会负责产品的技术方案探索与选型,免不了要选择技术方向,甚至在这个时候,我们个人也可能会在技术方向上转型,必须有所选择。
所以,我们根据成长阶段的划分,挑选了下面几个可能需要选择技术方向的时机,分开来讲在这些时机怎么选择技术方向。
但在展开之前,我们需要先通盘梳理一下选择技术方向都需要考虑哪些因素。
我们先来看看选择一种技术可能会考虑的因素,然后看看在每个选择时刻运用哪些因素。
1.就业机会
这个因素,考虑的是哪种技术更容易就业,需要结合特定地区、特定行业来看,因为你找工作是面向地区和行业的。
这中间又有两种典型的策略,热门的和冷门的。比如 Java 和 JavaScript 是典型的热门语言,你可以选择学习它们;再比如汇编语言、R 语言、Scala 语言、Qt 框架就没那么热门。
热门和冷门是相对的,根据开发者多少、市场需求而定。
2.自我感觉的难易程度
比如我当年就在 Java 和 C 语言当中选择了 C 语言,因为《The C Programming Language》比《Java 2核心技术》薄得多,面向过程的语言也比面向对象更容易入门(对我来讲)。
难易程度与人相关,所以最好的方法,就是把你感兴趣的语言,都学学试试,可能每种语言花上一到两个星期,你就可以做出判断。
3.兴趣
很多人做开发可能是出于某种兴趣,比如对游戏感兴趣就做游戏开发,对智能手机感兴趣就做 APP 开发,对电子商务感兴趣就做前端开发。
当你喜欢某一类产品时,这类产品往往可以关联到技术。比如你喜欢做手机游戏,那么可能会选择 Unity 3D 或者 Cocos 2d-x;如果你喜欢樊登读书会这种学习类 APP,可能会选择 Java、Android、Objective-C、Swift 等。
4.薪水高低
大多数人选择技术的出发点是工作和未来发展前景,而选择工作时一定会把薪水作为参考因素,而且是非常重要的因素。所以我们在选择技术时,也可以考虑某种技术对应职位的薪水高低。
要了解这一点,可以去看各种薪酬报告,如100 offer 每个季度都会有类似的报告出来,拉勾网也会发布互联网职场生态白皮书,你用“互联网人才流动报告”“开发者薪酬报告”或者“互联网薪资调查”为关键字搜索,能搜到很多这类报告。
通过报告,你可以看到使用不同语言的开发者的薪水差异。图1-2是我从100 offer 2016年春季互联网高端人才流动报告中截取的。
从图1-2中可以看出不同编程语言所关联职位的平均年薪差异。
5.技术在将来的发展前景
你肯定不愿意看到这种情况发生:选择了一门技术,结果1年后它就没人用、没市场了。所以我们在选择时就要考虑这一点,做一些判断。
选择技术时存在两种考虑:一种是选择稳定的、经典的技术,一种是卡位将来的市场缺口,选择将来可能需要用到的技术。
前者考虑的是林迪效应,即:对于不会自然消亡的事物,生命每增加一天,则可能意味着更长的预期寿命。用林迪效应来看开发技术,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。