02 | 初惑:技术方向的选择
下载APP
关闭
渠道合作
推荐作者
02 | 初惑:技术方向的选择
2018-08-06 胡峰 来自北京
《程序员进阶攻略》
课程介绍
讲述:刘飞
时长09:51大小4.51M
初入职场或还在校的同学想必都会有些共同的疑惑,比如:“到底我该选哪个技术方向?”“现在该学哪门语言?”“未来 Java 语言的发展趋势如何?”这些问题的本质其实都是技术的投资决策问题,也即现在我该把时间精力花在哪个方向上,未来的收益才可能最大。
这个问题并不好回答,因为这个问题的本质和 “我现在应该投资哪只股票” 一样。没有人能回答好这个问题,我觉得最好的做法就是:从投资的出发点而非终点来选择一条路径。
至于这样选择的路径是否能在未来获得很好的收益,这是没法预测的。但选择技术方向和选择股票不同的是,只要你在这条路径上持续努力、学习与进步,基本可以保证能和 “大盘” 持平而不至于有亏损,但是否能取得超过 “大盘” 的收益,其实是看运气的。
选择语言
选择技术方向,从某种意义上讲就是选择语言。
虽然有一些流传的说法,类似于:“语言并不重要,必要的时候可以在各种语言间自由切换。”但实际情况是,能做到自由切换的前提是你得对一门语言掌握到通透之后,再学习其他语言才可能触类旁通。
计算机程序语言虽然很多,但种类其实有限。2018 TIOBE 程序语言排行榜(见下图)上的前三位(Java、C、C++),本质上其实是一类语言。但大部分人只能选择去熟悉并通透其中一种,因为这些语言背后都有庞大的生态圈。
2018 TIOBE 程序语言排行榜
要做到通透,只熟悉语言本身是远远不够的,其实是要熟悉整个生态圈。而三门语言中最年轻的 Java 都有二十多年历史了,足够你耗费数年时光去熟悉其整个生态圈,而且目前其生态圈还处在不断扩张的状态,展现出一种蓬勃的生命力。
那么,要是我来选,我会如何选择语言呢?我会选择那些展现出蓬勃生命力的语言。
但其实十多年前我只是凑巧选择了 Java,它就像是被潮水推到我脚边的漂流瓶,顺手捡了起来。没想到居然蓬勃地发展了十多年,还没见衰退迹象。
那时的 Java 刚诞生不过七八年,和今天的 Go 语言很像。Go 语言在排行榜上的位置蹿升得很快,而且在云计算时代的基础设施上大放异彩,号称是:易用性要超越 PHP,而性能要超越 Java。
那么在 Java 之前我学的是什么?是 Visual Basic、ASP 和 Delphi / Object Pascal。我想今天不少年轻的程序员都未必听过这些语言了。但神奇的是,在 TIOBE 的排行榜上,VB 加了个 .NET 排名竟在世界最广泛的 Web 语言 PHP 和 JavaScript 之上。而十五年前我用的 Delphi / Object Pascal 居然落后 JavaScript 也不远,且远高于 Go、Objective-C,力压 Swift。
这些老牌语言还值得学吗?当然不值得了。因为它们早已进入暮年,没了蓬勃的生命力。但为什么排名还这么高?也许是因为它们也曾有过蓬勃生命力的热血青春,留下了大量的软件系统和程序遗产,至今还没能退出历史的舞台吧。
美国作家纳西姆·塔勒布(《黑天鹅》《反脆弱》等书作者)曾说:
信息或者想法的预期寿命,和它的现有寿命成正比。
而编程语言以及由它编写的所有软件系统和程序,本质就是信息了。换句话说就是,如果你想预测一门语言还会存在多久,就看看它已经存在了多久。存活时间足够长的语言,可以预期,它未来也还可能存活这么长时间。当然这一论断并不绝对,但它更多想说明越是新的语言或技术,升级换代越快,也越容易被取代。
这一点在 Delphi 这门语言上已经得到了体现,进入二十一世纪后,这种编写 C/S 架构软件的语言,居然还存活了这么久。
选择回报
选择技术方向,选择语言,本质都是一种投资。
我们为此感到焦虑的原因在于,技术变化那么快,就怕自己选了一个方向,投了几年的时间、精力,最后却被技术迭代的浪潮拍在了沙滩上。
按上面塔勒布的说法,越年轻的语言和方向,风险越高。一个今年刚出现的新方向、新语言,你怎么知道它能在明年幸存下来?所以,考虑确定性的回报和更低的风险,你应该选择有一定历史的方向或语言,也许不能带来超额的回报,但最起码能带来稳定的回报,让你先在这个行业里立稳脚跟。在此基础上,再去关注新潮流、新方向或新技术,观察它们的可持续性。
有一句投资箴言:“高风险未必带来高回报。”在选择职业方向的路上,你甚至没法像分散投资一样来控制风险,所以选择确定性的回报,要比抱着赌一把的心态更可取。看看当前的市场需求是什么,最需要什么,以及长期需要什么。
比如,今天技术的热潮在人工智能、机器学习、区块链等上面,这是市场最需要的,而市场给的价格也是最高的。所以,你应该投入这里么?先别头脑发热,看看自己的基础,能否翻越门槛,及时上得了车吗?
世纪之初,互联网时代的到临,网络的爆发,你会写个 HTML 就能月薪上万。上万,似乎不多,但那时北京房价均价也才 5000 多啊。2010 年左右,移动互联网兴起,一年移动开发经验者的平均待遇达到了五到十年 Java 开发的水平。如今,你只会 HTML 基本找不到工作,你有五年移动开发经验和有五年 Java 开发经验的同学,薪资待遇也变得相差不多了。
关于技术,有一句流行的话:“技术总是短期被高估,但长期被低估。”今天,在人工智能领域获得超额回报的顶级专家,实际数十年前在其被低估时就进入了这个领域,数十年的持续投入,才在如今迎来了人工智能的 “牛市” ,有了所谓的超额回报。所以,不妨投入到一些可能在长期被低估的基础技术上,而不是被技术潮流的短期波动所左右。
技术的选择,都是赚取长期回报,短期的波动放在长期来看终将被抵消掉,成为时代的一朵小浪花。
选择行业
搞清楚了语言、技术方向和回报的关系后,最后做出选择的立足点通常会落在行业上。
当你问别人该选什么语言时,有人会告诉你,你应该学习 JavaScript,因为这是互联网 Web 时代的通用语言,到了移动互联网时代依然通用,而且现阶段生命力旺盛得就像再年轻十岁的 Java。也有人告诉你也许从 Python 开始更合适,语法简单,上手容易。还有人告诉你,现在学 Java 找工作最容易,平均工资也蛮高。这各种各样的说法充斥在你的耳边,让你犹豫不决,左右为难。
一个问题就像一把锁,开锁的钥匙肯定不会在锁上。否则这个问题也就不是问题了,太容易就解开了,不是吗?所以,选择什么语言通常不在于语言本身的特性。
选语言,就是选职业,而选职业首先选行业。
先想想自己想从事哪个行业的软件开发;然后,再看看:这个行业的现状如何?行业的平均增速如何?和其他行业相比如何?这个行业里最好的公司相比行业平均增速又如何?最后,再看看这些最好的公司都用些什么样的技术栈和语言。如果你想进入这样的公司,那就很简单了,就选择学这样的技术和语言。
这样选择是不是太功利了?选择不是应该看兴趣么?注意,这里选择的前提可不是发展什么业余爱好,而是为了获得安身立命的本领,获得竞争的相对优势。而兴趣,就是这件事里有些吸引你的东西,让你觉这是 “很好玩” 的事。但有个通常的说法是:“一旦把兴趣变成了职业也就失去了兴趣。”因为,职业里面还有很多 “不好玩” 的事。
兴趣能轻松驱动你做到前 50%,但按二八原则,要进入前 20% 的高手领域,仅仅靠兴趣就不够了。兴趣给你的奖励是 “好玩”,但继续往前走就会遇到很多 “不好玩” 的事,这是一种前进的障碍,这时功利,也算是给予你越过障碍所经历痛苦的补偿吧。
以上,就是我关于技术方向选择的一些原则与方法。无论你当初是如何选择走上技术道路的,都可以再想想你为什么要选择学习一门编程语言,学习编程的一部分是学习语言的语法结构,但更大的一部分,同时也是耗时更久且更让你头痛的部分:学习如何像一个工程师一样解决问题。
有时这样的选择确实很难,因为我们缺乏足够的信息来做出最优选择。赫伯特·西蒙说:“当你无法获得决策所需的所有信息时,不要追求最优决策,而要追求满意决策。”定下自己的满意标准,找到一个符合满意标准的折中方案,就开始行动吧。
而停留在原地纠结,什么也不会改变。
最后,亲爱的读者朋友,你当初是如何选择技术道路的呢?欢迎留言分享。
分享给需要的人,Ta购买本课程,你将得20元
生成海报并分享
赞 18
提建议
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
上一篇
01 | 初心:为什么成为一名程序员?
下一篇
03 | 初程:带上一份技能地图
精选留言(65)
- 杨城2018-08-15难道这里木有.net童鞋吗,阴差阳错在.net这条路走了两年,国内基本现在没有.net大厂了,有点慌。共 3 条评论31
- 谭多肉2018-08-06对于我来说,也是一不小心踏入了Java的坑位,不同的是,我是做Android开发的。 大一下学期,仅仅学过C的我,偶然得知,学校这边和北大青鸟有计划一起做一款APP。顺着老师给的学习资料,我阴差阳错的踏入Android开发之路… 这Android开发之路,也是跌跌撞撞,前期几乎没有带,自己就像无头苍蝇一般瞎撞,也东拼西凑的整出一款APP,凭借这块垫脚石,顺利拿到一家公司实习offer。至此,瞎撞的苍蝇模式,终于切换到充满次序的蜜蜂模式,也顺利搭上了移动开发的红利期。 直到今日,虽说我仍然在做Android开发,却也涉猎过其他的语言,比如Android相关的Kotlin Dart,其他方向的JavaScript Python 等。接触下来的感觉变真的有峰哥提到的触类旁通的感觉。 现在回过头来看,从大学到现在走了不少弯路,但是由于种种原因很少能看到类似于本专栏一样,由一线工程师来分享自己工程之路的东西,导致偶尔陷入曲折之路时,也无法自拔。直到工作之后,看到了两本书《APP研发录》和《软技能》,受益匪浅。再到本专栏,一看到目录,我就明白。这是我需要的东西。希望在这里收获满满。展开
作者回复: 所有人的路,都会有曲折,你还是很幸运的😄
18 - 一一2018-08-09从一个农民工阴差阳错下成为了一个java程序狗路过
作者回复: 是不是真的哟?
共 2 条评论11 - sam3125C2018-08-07有些人是挺烦的,一天就在那里争论某个语言的某种优势。 我竟然还觉得他们说得挺有道理的,所以我全学了,上班写Java,下班写Python,周末玩JS。 后两个虽然还比较菜,但是有一个人成语叫厚积薄发!
作者回复: 😂
10 - ꧁小佳꧂2018-08-06您好,看到您的文章,我受益匪浅,但有个小疑问: 1. 这个行业的现状如何? 2. 行业的平均增速如何? 3. 和其他行业相比如何? 4. 这个行业里最好的公司相比行业平均增速又如何? 5. 这些最好的公司都用些什么样的技术栈和语言。 这些问题该如何找到答案?我通过什么渠道能找到这些问题的信息?展开
作者回复: 搜索引擎就有呀,要学会搜索过滤信息,分析数据,再产生洞察,做出选择
共 2 条评论10 - third2018-08-06大一学了C的基础,但是自己想做图,做游戏,发现用C太麻烦,然后大二因为看了吴恩达博士的人工智能课,觉得自己怎么能落后于时代呢,转学Python,发现出项目比较容易,成就感爆棚。 暂时没有选行业的想法,因为觉得自己还没有努力到要选行业的程度,硬要说一个的话,现在觉得数据分析不错。 最后对一些有兴趣的人说, 兴趣和爱这东西总是爽一会,爽完之后就得负责了,因为兴趣和爱,所以反而应该要求自己比别人做的更好,对自己更苛刻。 ……当然了,这就是编程天才跟普通人的区别,是否能在长期枯燥的生活中,坚持并感受到快乐展开
作者回复: 能感受到快乐,挺好的,抵消了努力的辛苦感,在享受中获得成长
10 - 虎嗅蔷薇2018-08-07做嵌入式底层开发,一直是C和汇编,每次把设备运行效率提高一点都感觉很有成就感。最重要的是看到实体产品在自己的程序控制下运行正常、流畅,是一种强烈的满足感
作者回复: 这是程序工作的魅力之一😄
9 - 彭超2018-08-06建筑汪,纯个人兴趣在学python,希望可以在参数化设计与性能分析中有所用
作者回复: 跨界技能,👍
9 - shine2018-08-07大一的时候安卓很火,选择了安卓,到了大三找实习,明显感觉到安卓找工作很难,也许是自己学得不够好,最后选择了与安卓同是java编写的java ee,学校课程教过而且自己暑假自学巩固一个月,就去找工作了,确实java ee比较容易找工作。
作者回复: 恩,APP市场萎缩了,端的形态发生了变化
6 - ꧁小佳꧂2018-08-06感觉很多人都错了……程序设计语言不是工具,是材料。 工具和材料区别还是蛮大的…… http://www.yinwang.org/blog-cn/2013/04/21/programming-languages-are-not-tools
作者回复: 写出来的代码才是材料吧
5 - @XP2018-08-07被培训机构忽悠学了安卓,现在自学python,工资高
作者回复: 我咋觉得差别不大呢
4 - Franklin.du2018-08-06我学的语言很杂。学校c++,第一份工作objective c,后来做网站PHP,js。基本上和做的项目相关。以后会怎样,现在需要好好思考下。感觉比留言的其他人要迷茫得多。
作者回复: 那也可以参考下其他留言同学的经历
4 - 右耳朵猫咪2018-08-07当我迷茫的时候 我会选择更艰难的路
作者回复: 很有勇气
共 2 条评论3 - 攻城拔寨2018-08-06当初的选择,仅仅是因为我能负担得起的培训机构的技术道路是.net。参加工作之后发现.net的生态远远不如java而转java。。。
作者回复: 这么说Java培训费贵很多?
3 - 朱月俊2018-10-14刚开始学习计算机的时候,听网络授课老师建议学习C语言,后来自己又去学习了C++,主要考量是收益得超过语言本身,即我哪天放弃这门语言后,它也能给我带来收益。C++是面向对象语言,面向过程语言,也是范式语言,能够学到底层数据结构,面向对象设计思路,也能够从C语言平滑到C++,甚至去了解模版相关的特性。2
- 山上有只马2018-08-07可能我理解的有点少: 1,选择语言,有很多种,年轻的,老的。如果没有深入理解了一种的情况下,可以转投其它语言,这样牺牲会小一点! 2,语言越年轻,选择的风险越大,就像是投资一样。 3,现在大热的,大数据,人工智能。都是之前冷门的时候做了大量的铺垫。 4,如果了解不够深入的情况下,选最满意决策,而不是最优。 5,二八法则,前20%的高手,都懂得这个领域80%的知识?这个我有点理解不出来。不过,兴趣能驱动你到50%,剩下的就需要你的天分,还有坚持不懈的努力了。 6,最核心的一点就是。技术选择,以出发点为目标。而不是出发点。条条大道通罗马,这样?展开
作者回复: 4. 是事前没法选到最优,只能觉得满意就好 5. 进入前20%,比较的不是掌握了多少知识
2 - 艾尔欧唯伊2018-08-07那就潜伏一下。。。暂时不想跳来跳去,之前跳槽太频繁都没积累,谢谢胡老师
作者回复: 恩,不能太频繁,都是有代价的
2 - 二木🐶2018-08-07我是Java程序猿,我现在面临一次人生选择的十字路口,我在深圳拿到一个待遇还不错的offer,是做Java,另外一个选择就是在广州公司的其他部门,要转PHP,待遇深圳可能会好点,但我已经在广州成家了,我不知道是否应该去深圳,还是为了和家人一起转php
作者回复: 如果都不满意,尝试再增加点选项?另外深圳到广州比成都到重庆还快呀
2 - Juntíng2018-08-07大学学的是计算机网络技术,玩的是硬件,毕业季来临,在网络运维岗实习了两个月,并不怎么喜欢,工资也低,对于网站开发兴趣蛮大,而且工资也蛮高的,当时 PHP 在网站开发里当年是比较火的,相对学习曲线不高,就选择了PHP
作者回复: PHP现在也还可以呀
2 - HellloWorld2018-08-07峰哥麻烦您详细说一下Java生态圈都包含哪些内容?
作者回复: 这可多了,网上搜一篇《Java征途》的博文,包含了我曾经探索过的一部分而已
2