大家好,我是安晓辉。今天我们来看看选择一种技术可能会考虑到的决定因素,我归纳为以下九点:
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.发展前景
你肯定不愿意看到这种情况发生:选择了一门技术,结果一年后它就没人用、没市场了。所以我们在选择时就要考虑这一点,做一些预判。
选择技术时存在两种考虑:一种是选择稳定的、经典的技术;一种是卡位将来的市场缺口,选择将来可能需要用到的技术。
前者考虑的是林迪效应,即:对于不会自然消亡的事物,生命每增加一天,则可能意味着更长的预期寿命。 用林迪效应来看开发技术,一项技术存活的时间越久,其预期剩余寿命就越长。比如 C 语言(1967年诞生),存活了几十年,可能还会存在几十年。所以你可以选择像 C、C++、Java 这些经典的编程语言,它们流行了几十年,还将流行几十年。
回顾历史,经典技术都是从新技术发展来的,展望未来,一定也有一些现在的新技术会发展成将来的经典技术。如果你能抓住它,就可以享受它带来的技术红利。
要抓住可能成为经典技术或热门技术的新技术,就要应用卡位策略。
卡位策略是指看到某种技术会在未来具有稀缺性,非常有价值,选择提前介入,让自己在未来具备竞争优势。比如2007年 Google 发布了 Android Beta 操作系统的 SDK,就有人预见到 Android 开发需求将会爆发,果断学习 Android 开发;比如现在 VR、AR、机器学习、深度学习,其实都还没出现普适性的应用,但是将来一定会出现,此时学习相关技术,将来一定会占据先机;再比如2009年大数据概念兴起,如果那时选择 Hadoop、Scala 等技术,你现在可能已经身价不菲了。
运用卡位策略时,有两种方式。
一种卡位方式是根据市场需求和未来预期,就像图1-3所示,左下角是我们现在看到的现状,某些需求处在萌芽期,但是将来可能爆发。这个需求对应的产品、服务可能会用到某种技术,甚至这个需求本身就是由技术驱动的。这时候,你就可以分析从现在抵达将来可能需要用到的技术,提前做准备。
图1-3
还有一种卡位方式,是根据技术本身的发展程度来说看。采用高德纳曲线(参考 http://www.gartner.com/technology/research/methodologies/hype-cycle.jsp),如图1-4所示。
图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++ 衔接这部分起到关键作用,从而具有特殊地位。
以上就是选择技术方向时我们应当考虑的一些基本因素,下篇文章我们来看看在职场不同阶段,还有那些需要特别注意的地方。
读完本篇文章,你可以想想在选择技术方向时,你更看重哪些因素?欢迎大家与我交流。