程序员职场进阶 32 讲

课程介绍

如何寻找技术方向?如何进行技术转型?如何提升技术能力?这三大问题困扰着大部分程序员。

去年 10 月,我在 GitChat 平台上发布的达人课《程序员跨越式成长指南》已经累计销售了 2000 余份,很多读者朋友反馈这门课程对个人学习、求职、成长起到了很大的帮助作用,也纷纷留言给我,希望能看到更系统的职业成长课程,于是我将这门达人课进行了一次全新改版,升级为《程序员职场进阶 32 讲》,内容如下:

  • 保留了之前达人课的内容;
  • 加入了新书《程序员的成长课》中的精选内容;
  • 6 篇为本专栏定制的全新内容;
  • 整体篇幅从原来的 9 篇扩充到 32 篇;

作为全新的升级版课程,这次我还为大家同步准备了音频版,这样方便同学们更好地利用通勤或碎片化时间来学习。

作者简介

安晓辉,Qt 技术专家,经历过开发工程师、研发经理、技术总监等岗位,著有《程序员的成长课》、《Qt Quick核心编程》、《你好哇,程序员》、《解忧程序员》等图书;2014、2015两届 CSDN 博客之星,现在自由职业,专注写作和开发者生涯咨询,个人公众号“程序视界”。

课程框架

本课程大纲分为六大部分,共计 32 篇:

程序员职场进阶 32 讲_第1张图片

* 实际更新文章题目可能与框架略有出入

课程内容

开篇词 | 程序员的成长课

大家好,我是安晓辉,做过开发工程师、研发经理、技术总监等岗位,现在自由职业,专注写作和开发者生涯咨询。出版过《程序员的成长课》、《Qt Quick 核心编程》、《你好哇,程序员》、《解忧程序员》等图书。

课程背景

这两年我做过很多次分享,经常有一些开发者在会后找我诉说他们的焦虑与迷茫。有的是工作了三五年,眼见到了三十来岁该要成家立业的年纪,却发觉自己技术停滞了,工作也没什么前途,想要跳槽又不能保证卖个高价;有的是工作了十来年,掌握的老技术正慢慢失去市场,面对新技术又无力跟进,于是年龄越大越不值钱,慢慢连刚工作几年的年轻人也比不过,想转管理岗位却不知道怎么做,不转吧,又天天为即将到来的裁员忧虑。

如何寻找技术方向?如何进行技术转型?如何提升技术能力?这三大问题困扰着大部分程序员。

去年 10 月,我在 GitChat 平台上发布的达人课《程序员跨越式成长指南》已经累计销售了 2000 余份,很多读者朋友反馈这门课程对个人学习、求职、成长起到了很大的帮助作用,也纷纷留言给我,希望能看到更系统的职业成长课程,于是我将这门达人课进行了一次全新改版,升级为《程序员职场进阶 32 讲》,内容如下:

  • 保留了之前达人课的内容;
  • 加入了新书《程序员的成长课》中的精选内容;
  • 6 篇为本专栏定制的全新内容;
  • 整体篇幅从原来的 9 篇扩充到 32 篇;

作为全新的升级版课程,这次我还为大家同步准备了音频版,这样方便同学们更好地利用通勤或碎片化时间来学习。

程序员职场进阶 32 讲_第2张图片

课程大纲

本课程大纲分为六大部分:

  • PART 1:技术选型篇
  • PART 2:技术精进篇
  • PART 3:跨越成长篇
  • PART 4:技术管理篇
  • PART 5:技术转型篇
  • PART 6:职场工具箱

在我们还是开发角色时,开发者解决问题的能力,更多的体现为技术能力。我们课程中的前三部分:“技术选型篇”、“技术精进篇”、“跨越成长篇”,提供了技术成长的三阶段模型、个人对标管理法、目标管理方法、精进的四个习惯等方法与思维,能辅助你有效练习,持续精进,不断提升技术能力。

很多人都希望能在工作几年后转型为技术管理角色,获取更高级别的 title 和更可观的收入。在课程的第四部分“技术管理篇”中,我们介绍了一些方法,辅助我们辨别自己是否适合做管理工作。如果适合,就可以利用这个部分提供的走向技术管理的 4 种方式,顺利走向管理岗位,用与开发岗位不同的方式,获得更高的收入。

不是所有的人都会在技术这条路上一直走下去,总会有各种各样的原因,在未来的某一天,推动着我们转向别的领域,去做新的尝试。在课程的第五部分“技术转型篇”中,我会先讲述技术转型的难处和分类,然后告诉大家如何确认自己的转型方向及其实践路线。

不管我们的角色是开发者,还是管理者,都需要一些工具,辅助我们找到最适合自己的方向、产品和服务,帮助我们聚焦在最重要的事情,交付最有价值的结果。惟其如此,我们才能成为企业不可或缺的角色——解决问题创造价值的人。所以,我们特别开辟了“职场工具箱”这篇,介绍 OKR 工作法、时间测量、年度职业价值评估、未来的简历、工作机会评估四象限、生涯平衡单等等工具,助力你顺畅跑完职场马拉松。

你将收获什么

  • 对自身技术能力进行清晰定位
  • 制定自己的技术精进路线图
  • 掌握技术管理与转型的方法
  • 熟练应用高效便捷的职场工具

课程寄语

无论你是想持续提升技术能力的开发者,还是想转向技术管理谋求更大发展的程序员,都可以从这个专栏中,获得你想要的方法、工具,用它们指导自己的工作和生活,通过努力和认真执行,提高你的时间单价,赚取更多的收入,消除因各种各样的需求悬置带来的痛苦,给自己创造一个有助于幸福生长的环境。

第01课:技术成长的三阶段模型

引言

作为整个系统课程的第一部分,我想先跟大家分享的是如何选择技术方向,我将结合技术成长的三阶段模型,讨论在入行、构建技能树、技术转型、团队技术方案选型等常见场景中如何选择适合自己的技术。

努力只有在方向正确时才有价值。

开发者选择技术也是如此。假如你阴差阳错地选择了一门过时的技术或者普及度不高的技术,你在找工作时就会不断受挫,即便投入实际工作中后也会忧心自己的发展前景。

我们先设想如下的几个场景:

  • 你刚进入软件开发领域时,急需选择适合自己和市场的技术才能更好地就业;
  • 你做了一两年技术工作,开始构建自己的技能树(知识图谱),需要选择与你现有技术相互补充、1+1>2的技术来学习和提升;
  • 你的技术能力慢慢在团队里凸显出来,成了先锋官,有新的项目、新的产品时,你总是被赋予探索技术方案的角色,可是一招不慎,你选择的技术就可能导致整个项目的失败;
  • 你使用 C++ 语言做了5年开发工作,越来越觉得这门语言不适合自己,想要学习一种新技术作为自己以后的主要开发技术,很担心再选错——因为你做开发的黄金时间,加起来也不过三四个5年;
  • 你成为技术负责人或者研发经理,需要决定团队的技术图谱,需要为团队承接的新项目选择技术方案,要考虑哪些因素呢?

所有上述问题,我们都会在第一部分中讨论分析,我们会找到选择技术方向时要考虑的各种因素,然后结合特定的场景,看看你在选择时具体需要做哪些考量。

希望每一位读者都能掌握选择技术方向的方法,这会让你具备更强的竞争力和更高的身价;作为团队的一员,你会知道在为某个项目选择技术时该如何综合考虑,在风险、成长、代价之间进行权衡。

技术成长三阶段模型

为了更好地选择技术方向,我们先来介绍一个模型,我给它取了个名字叫“技术成长三阶段模型”,参照下图1-1所示。

enter image description here

图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 解决问题”,而是“解决问题”)。简单说,就是你走出了被技术束缚和塑造的过程(前两个阶段),可以反过来回到问题本源来思考了。

在这三个阶段中,我们都会遇到选择技术方向的问题。比如在初级阶段,入门时要选择,发现某种技术不适合自己时要重新选择;在中级阶段,我们要选择某些技术来构造我们的技能树,或者要做技术转型,需要重新选择技术方向;再比如在高级阶段,我们往往会负责产品的技术方案探索与选型,免不了要选择技术方向,甚至在这个时候,我们个人也可能会在技术方向上转型,必须有所选择。

所以,我们根据技术成长的三阶段模型,挑选了下面几个可能需要选择技术方向的时机,分开来讲在这些时机下如何选择技术方向。

  • 入行的技术选择
  • 构建技能树的技术选择
  • 技术转型的选择
  • 方案选型的选择

思考题

最后,你可以思考一下现在自己处于技术成长的哪个阶段?你认为选择技术方向都需要考虑哪些因素?我会在下一期具体讲述。如果你在选择技术方向上有什么心得、疑惑或者建议,也欢迎留言与我探讨。

第02课:选择技术方向都要考虑哪些因素(上)

大家好,我是安晓辉。今天我们来看看选择一种技术可能会考虑到的决定因素,我归纳为以下九点:

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年春季互联网高端人才流动报告中截取的。

enter image description here

从图1-2中可以看出不同编程语言所关联职位的平均年薪差异。

5.发展前景

你肯定不愿意看到这种情况发生:选择了一门技术,结果一年后它就没人用、没市场了。所以我们在选择时就要考虑这一点,做一些预判。

选择技术时存在两种考虑:一种是选择稳定的、经典的技术;一种是卡位将来的市场缺口,选择将来可能需要用到的技术。

前者考虑的是林迪效应,即:对于不会自然消亡的事物,生命每增加一天,则可能意味着更长的预期寿命。用林迪效应来看开发技术,一项技术存活的时间越久,其预期剩余寿命就越长。比如 C 语言(1967年诞生),存活了几十年,可能还会存在几十年。所以你可以选择像 C、C++、Java 这些经典的编程语言,它们流行了几十年,还将流行几十年。

回顾历史,经典技术都是从新技术发展来的,展望未来,一定也有一些现在的新技术会发展成将来的经典技术。如果你能抓住它,就可以享受它带来的技术红利。

要抓住可能成为经典技术或热门技术的新技术,就要应用卡位策略。

卡位策略是指看到某种技术会在未来具有稀缺性,非常有价值,选择提前介入,让自己在未来具备竞争优势。比如2007年 Google 发布了 Android Beta 操作系统的 SDK,就有人预见到 Android 开发需求将会爆发,果断学习 Android 开发;比如现在 VR、AR、机器学习、深度学习,其实都还没出现普适性的应用,但是将来一定会出现,此时学习相关技术,将来一定会占据先机;再比如2009年大数据概念兴起,如果那时选择 Hadoop、Scala 等技术,你现在可能已经身价不菲了。

运用卡位策略时,有两种方式。

一种卡位方式是根据市场需求和未来预期,就像图1-3所示,左下角是我们现在看到的现状,某些需求处在萌芽期,但是将来可能爆发。这个需求对应的产品、服务可能会用到某种技术,甚至这个需求本身就是由技术驱动的。这时候,你就可以分析从现在抵达将来可能需要用到的技术,提前做准备。

enter image description here

图1-3

还有一种卡位方式,是根据技术本身的发展程度来说看。采用高德纳曲线(参考 http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp),如图1-4所示。

enter image description here

图1-4

图1-4(来自 https://stateofdev.com/)展示了机器学习相关的三种技术:OpenAI、TensorFlow、Watson。从曲线可以看出,OpenAI 处于成长期,TensorFlow 处于成熟期,而 Watson 的地位正在受到挑战。如果你现在要选择一种机器学习框架,TensorFlow、OpenAI 是比较好的选择。

6.他人推荐

我们是否选择某种技术,和我们看到的可能性有非常大的关系。只有看到它,它才会进入你的选择范围,如果你看不到它,它再牛,对你也没意义。

比如我2005年自学编程,面临两个选择:C 或者 Java。我知道 Java 的存在就是因为读研同学的推荐,而 C 语言,则是当时大唐电信做开发的同事推荐的。我之所以没有考虑其他的编程语言,是因为我根本不知道还有什么编程语言可以选择。

你看到的可能性,限制或决定了你的选择。

7.相近原则

当我们已经掌握了一些技术,要学习新技术时,就可以根据一种新技术是否和自己已经掌握的技术比较接近来判断选择。相近的技术,学起来会更容易上手。

8.互补原则

和相近性类似,互补性也常用在拓展我们技术能力的情景下。它指的是,有一些技术可以和你已经掌握的技术互相补充,组合在一起,形成更完整、更系统的技术图谱,给你带来更大的竞争力。关于相近原则与互补原则,我们也会在后面的文章里具体解读。

9.团队技术图谱

你所在开发团队的技术图谱,也可能会影响你的选择。比如我们基于 CEF 开发浏览器,团队以 C++ 为主要开发语言,如果自己本来会 C++,再学习 JavaScript,就可以在 JavaScript 与 C++ 衔接这部分起到关键作用,从而具有特殊地位。

以上就是选择技术方向时我们应当考虑的一些基本因素,下篇文章我们来看看在职场不同阶段,还有那些需要特别注意的地方。

思考题

读完本篇文章,你可以想想在选择技术方向时,你更看重哪些因素?欢迎大家与我交流。

第03课:选择技术方向都要考虑哪些因素(中)
第04课:选择技术方向都要考虑哪些因素(下)
第05课:推荐工具(图文篇)
第06课:做开发还是转管理
第07课:技术精进之道
第08课:目标的设定与执行
第09课:精进的4个习惯
第10课:超越技术的核心竞争力
第11课:五大职能定位
第12课:如何理解技术管理者(上)
第13课:如何理解技术管理者(下)
第14课:走向技术管理者的4种方式
第15课:成为技术管理者的准备工作
第16课:转型的难处
第17课:转型的分类(图文篇)
第18课:如何确认你的转型方向 · 上(图文篇)
第19课:如何确认你的转型方向 · 下
第20课:技术转型的实践路线(图文篇)
第21课:4个层级和6大差异
第22课:普通程序员和熟练开发者的关键区别(图文篇)
第23课:专项能力修炼
第24课:如何构建知识体系
第25课:从熟练开发者到技术专家和架构师
第26课:个人高效的秘籍 OKR 工作法
第27课:使用时间测量工具挖掘可利用的业余时间(图文篇)
第28课:年度职业价值评估(图文篇)
第29课:来自未来的简历
第30课:工作机会评估四象限(图文篇)
第31课:妙用生涯平衡单,轻松搞定 offer 选择(图文篇)
课程结语

阅读全文: http://gitbook.cn/gitchat/column/5aeab69b4eb5f845a07695e8

你可能感兴趣的:(程序员职场进阶 32 讲)