AR、VR、云计算、大数据、区块链、AI……开发者很容易会有新技术焦虑,不追怕失去提升收入的机会,追又怕投入了时间和精力没结果。我们就来和大家一起分享一下: 到底该怎样做,才能从容面对技术热点?
分享的内容,包括四点:
1. 热点技术会带来什么好处?
2. 追热点技术的 4 种方式
3. 我要不要追热点?用哪种方式追?
4. 开发者的核心竞争力在哪里?
一、技术热点会带来什么好处?
一种技术,是不是热点,对个人会产生非常大的影响。
先和大家讲位小伙伴的经历。
他,原来在西安中软做金融类的外包开发,8年工作经验,月薪13000多。2017年3月份,他约我咨询,说想转到人工智能方向,但西安这边做人工智能的企业很少,可能得到北京或者深圳。可因为房子、老婆、孩子都在西安,有点纠结。
后来我们一起分析后,他决定转做人工智能。5月份,他找到了北京一家创业公司,果断离开西安去了北京。现在,他月薪超过3万,而且也成了团队骨干成员。
再给大家举个例子。
大家看这本书,现在基本没有推广,但是排名也很靠前。
就是因为,现在 Spring Cloud很热。 去年京东的IT类销量排行,两本Spring Cloud的书,都在年度榜单上。
相对应的, 我在 2014 年底出版的图书《Qt Quick核心编程》 ,2 年才卖了 6000 册!
这其中的关键差别,就在于, Spring Cloud 技术比较大众,这两年也比较热门,而 Qt ,则是不温不火的小众技术。
从这两个例子中,我们都能看出—— 热点技术的影响力。
当一个技术热点慢慢形成趋势后,就会在一段时间内有技术红利。
技术红利有两层含义:
1. 薪水
2. 在组织内的重要性
我们先说薪水。
远一点的,比如 2013 ~ 2015 年,移动端开发,Android 、iOS ,培训出来轻松过万。很热门。那时你快速介入,薪水就能提升一大截子。
比如现在的人工智能,深度学习、机器学习、语音识别、自然语言处理等等,拉勾上虽然搜索,和这个相关的,薪水都很高。
大家看我发的这张图片,是我从拉勾抓取的信息。
薪水的变化,大家是能直接看得到的。 拥抱热点趋势的开发者,同等经验,拿到的薪水,会比使用非热点技术的开发者要高一些。
接下来说位置,热点技术会改变一个人在团队中的位置和重要性。
很多新技术的出现,最直接的原因就是为了解决某一类问题,满足某种需求,提高生产效率,创造收益。某个公司采用这类新技术,目的自然也是为了更多的创造收益,那相关的部门、产品、服务,一定会在公司里备受关注,地位比较重要。这些产品和服务重要,作为开发者,自然也就重要。
道理很简单,一个人做的事情重要,这个人就重要。
二、追热点技术的几种方式
先给大家看一张图。
一般一种新技术出来,有几种参与方式:
1. 基础设施
2. 算法
3. 应用框架
4. 行业应用
以人工智能为例,基础设施包括GPU、FPGA、操作系统等。
嵌入式也可以转人工智能,可以选择基础设施这个角度来切入,前提是你现在有关联。
基础设施这块需要人比较少,现在人工智能这么热,也就英伟达、高通等公司。
第2种切入方式,是算法。 很多新技术的出现和应用,都伴随着算法人才的需求。比如你要做AI,首先就要补数学和算法,算法有很多,随便一搜,什么朴素贝叶斯、神经网络、决策树、KNN……一大堆。
第 3 种切入方式,是做应用框架。 比如人工智能这块,则有 TensorFlow、CNTK、Caffe、OpenNN、SystemML、Amazon Alexa 等等框架。
我这里说的从应用框架切入,是作为框架的开发者来切入,提供框架给应用开发者。
第4种方式,以行业应用的身份切入 ,这个会相对简单,像出门问问的小问音箱、百度的无人驾驶、百度搜索、今日头条、讯飞的灵犀输入法、亚马逊的 Echo 音箱、喜马拉雅的小雅AI音箱等。
因为一种新技术,最后大面积应用,一定是应用爆发,需要很多人。
这几种方式所需要的开发者数量,是递增,越往应用层,需要的人数越多,对人的技术素养方面的要求,越靠近应用层,技术要求越底,业务要求越高。
所以,其实大部分人面对新技术,切入点在应用开发。
不过个体要结合自己情况分析,接下来我们会讲这点。
三、我要不要追热点?
用哪种方式?
这是重点!!
技术热点,往往属于有准备的人。
比如李飞飞成为人工智能方面的明星,最重要的原因,是人家已经在实验室做了好多年研究了。
比如有的小伙伴一直在做视频方面的开发,不冷不热,但是 2016 年直播兴起诸侯混战的时候,可能就突然吃香了。
如果你在基础研究、产品、技术等方面毫无积累,也无算法基础,那你看到热点再去追,往往是追不上。即便进去了,可能也是处在金字塔的底层,不见得就比使用一个成熟的技术栈做有前途的产品赚得多。
想要追热点,要先问自己两个问题:
1. 我现在处于什么状态?(技术、业务、公司位置)
2. 我的优势是什么。
比如你已经在微服务架构方面有深入积累,那你当下的最优选择,可能是琢磨一下怎么样才能有机会负责一个产品的架构,让自己能有软件架构方面的实践,为成为架构师做准备。
比如你现在是已经带领一个小组,那你考虑如何成为项目经理或者技术经理,可能更符合你的职业发展。
假如你在现有的技术、业务等等方面,都还是新手,刚刚入门,但是觉得所做方向并没什么前景,那转换到一个热点技术上,会是不错的开始。因为你的沉没成本不高,丢掉也没那么可惜。
所以:
决定自己是否要追热点,关键是对自己的现状有个清醒的认识,判断自己接下来的想往哪个方向发展。
为了帮助大家更好的认清现状,这里提供一个工具: 位置四象限。
在这张图中, 水平方向是你所在的团队在公司里的位置,从边缘到核心。 每个人都能很快判断出来自己所在团队是不是核心,这点只要看你做的产品或服务是否是核心就可以了。比如你在一家游戏公司,研发团队一般会分为客户端、服务器、工具三个小团队,那工具这个团队,就没有服务器和客户端重要。
垂直方向,是个人在团队内的位置。 还是以游戏为例,客户端团队里,主程的位置最重要,其他的,做游戏逻辑实现的开发者,位置可能会比负责UI的开发要重要。(根据游戏的核心竞争力也可能不同,这里只是举例)
一个人在公司的位置,可能有四种。
假如你现在就在 核心位置 A ,那可以基于当下公司的产业和业务, 看看在哪方面提升会更利于你未来的发展。 如果热点技术刚好你们产品要用到,毫无疑问,上!如果用不到,优先考虑精进公司产品会用到的技术。
假如你在 边缘位置D,你在公司基本就没前途了 ,很可能下一次裁员就到你了,那么追个热点,毫无疑问是蛮好的啦,因为你很可能因为掌握了热点技术而进入另一家公司,成为核心。就像我一开始觉得转人工智能的小伙伴那样。
假如你 在 B 和 C 位置 ,可以根据 转换 到 A 的可能性来做选择 ,假如没什么可能性,那追个热点,一技傍身,为未来留条后路,跳槽时可能成为核心。假如在公司内可能很快成为核心,薪水和重要性都有很大可能性提升,那先考虑公司内的机会啦。
假如你决定追热点,那就结合前面我们说的四种方式,看看哪种适合自己。
如果你偏好底层,不太喜欢整天和具体的业务打交道,那可能去做应用框架、算法、基础设置会更好一些。
如果你就喜欢搞定各种各样的业务问题,就喜欢做出来的东西能被用户直接感知,就喜欢用户说“哇,这个功能太好用啦”,那选择做应用层面的开发,也是非常好的。
每个层面的开发,要求不大一样,你要做的准备,也不太一样。所以,最好是找到相应的职位,看看具体的要求,然后有针对性的做准备。比如你愿意做的产品、服务,要求你熟悉 Keras ,那你就需要学习 Python、Keras,并了解 TensorFlow、CNTK和Theano。
那么该如何准备呢?有这么几种方式:
1. 自学(图书、官方文档、视频课程)
2. 培训
3. 请老鸟教你
4. 实战项目
Ok,这是第3部分。提供了一个思路,让大家根据自己的现状来决定是否跟一个热点。
四、开发者的核心竞争力在哪里?
人的能力分为三类,像刚才那张图说的那样。
所谓资源,包括知识、技能、时间、金钱、人脉、天赋等。
对于程序员来说,Java、C++、PHP、Spark、Scala、Qt、Node.js、hadoop、Vue.js 等等,都是资源层面的能力。
资源往往是显性的、外在的,非常容易被自己和别人感知。
我们经常在招聘信息中看到的任职要求,比如精通 J2EE 、精通 SSM(Spring + SpringMVC + MyBatis )、精通 ffmpeg 、精通 Qt 等,都是对资源层面能力的要求。
所谓应用流程,指的是解决问题的方法、思维的框架、分配资源的方式、自我管理的模式等。
应用流程是内在的,容易被人忽略,但它却是解决问题的真正能力,当你具备了应用流程,才能很好的利用资源来解决问题,创造价值。
放在开发者身上,自主学习、逻辑思维、数据分析、价值判断、优先级排序、框架设计、想象力等能力,就是应用流程方面的能力。
应用流程这类能力,是可迁移的能力,是核心竞争力 。有了这些,你才能快速的学习新知识新技能,你才能更好的整合你的知识、技能来解决实际的问题。
我们经常会看到有些资深开发者或者研发经理,只懂一种语言和相关框架(比如 C++ ),却能够帮助 Java 开发者定位问题,甚至可以撸袖子上阵帮忙搞 Java 代码,就是因为他们已经超越了具体技术的执行层面,上升到了思维层面,拥有了应用流程方面的能力,并且能够应用这些能力,先在高纬度定位问题,然后再降维进入技术层面去解决问题。
当我们拥有了应用流程能力,就会有举一反三、触类旁通的表现,落实到技术上,就可以一门精、多门通,形成 T 型的知识结构,拥有强大的解决问题能力。
但这里面有个阶段性的问题,很多开发者一开始会因为现实原因,需要先积累资源型的能力,比如某种编程语言,某种技术框架,因为没这些东西无法干活,完不成任务。这是开发者成长的初级阶段,过上2~3年,熟悉了技术之后,就会慢慢关注应用流程方面的能力,也必须转换思维,着意培养这方面的能力。
因为如果你这方面能力培养不起来,慢慢就会局限在某种技术上,很难有全局思维,换个问题、换个技术、换个产品,你就需要很长时间才能熟悉。
接下来说价值观。
所谓价值观,指的是,你觉得什么是重要的、你要什么、你不要什么、你如何做决策。
一个人的行为价值观,是其最根本的能力。 价值观决定了你在哪个方向做、以什么原则去做。没有价值观,你就会像浮萍一样,东飘西荡,很难做出有长远意义的选择,就很难形成有效的应用流程,也很难积累能被社会感知的资源。
但是价值观比较抽象。不好说。我们举开发的例子,大概说下。
热衷技术的程序员,觉得技术成就更重要、自己解决问题更重要,他希望自己在某个方面具有顶端优势,他会一直做一直做,不断复盘,不断精进,直到成为专家。
希望做管理者的程序员,认为领导别人很重要,职场权力和位置很重要,他往往在做上三五年后就会转移重点,放弃在技术上的深入积累,转而寻求管理职位的机会。
这两种方向的选择,是价值观决定的。
我们选择了技术,已经过了价值观这块了。所以我们讲的核心能力,就落在应用流程上。
我画过一张图,描述了开发者的工作流程,发给大家看看。
我把开发者的工作分成 3 部分:
输入;
第一次创造;
第二次创造。
初阶的小伙伴,大部分直接在第二次创造阶段,直接编码实现。
高阶的开发者,重点在第一次创造。 现在头脑里完成了设计,形成了解决方案。然后安排初阶的小伙伴,或者自己来实现。
那这个第一个创造的过程中,用到的能力,更多的,就是应用流程方面的能力。
这是这张图,体现了应用流程方面的能力是核心能力这个观点。
你能不能在团队里获得重要的位置,也和这些核心能力有关。
好啦,这是我们今晚分享的主要 4 点内容:
1. 热点技术的好处,包括薪水和位置
2. 跟热点的4种方式:基础设置、算法、应用框架和行业应用
3. 我要不要追热点,根据位置4象限来判断
4. 开发者的核心能力:应用流程。没有应用流程能力,你用什么技术都成不了团队核心。
五、Q&A环节
Q1、是中国的整体的计算机体制不好,导致程序猿过了30之后就进退两难吗?
A :过30进退两难,原因是多方面的:
1. 大环境确实有问题,大家都想低成本快速提供服务,大龄程序员成本高,能不用就不用。
2. 很多大龄程序员的不可替代性太弱,做的事情年轻人也可以轻松搞定,所以没用的必要。
Q2、我刚读了大学出来,现在实习了半年了,做的是php,但是工作不全是php,还有小程序,前端的一些工作内容。自己感觉半年了,技术没多少增长。
我想知道,自己接下来应该如何去学习,学习哪些技术,对我的成长会比较好?
A:关于学什么技术,在你用过的技术中,选一个,学精,然后把相关技术栈打通。在工作中,试着有选择地去使用你精研的这种技术。这样才能不断精进这种技术。
Q3、一直在制造业甲方从事erp的工作,该如何在编程上面突破自已?
A:1. 先从当下工作开始,看看用到的哪种技术,你想继续突破,看看自己用到什么程度,是泛泛的调用基础API,还是能理解原理很好的组合使用各种模块解决复杂问题,还是能够优化定制现有框架。确定了自己的程度,就能找到突破口,然后抓住时机工作中的机会,新版本啊、重构啊、解Bug啊,采用更好的设计、更好的方式,对自己要求高一些,这样能够提升。
2. 看看你接下来想发展自己哪方面的技术,学习,设计项目,在实践中提升。
Q4、新技术学习是应该在公司进行还是业余时间自己学习?
A :新技术学习,关键是要有实践。所以,如果公司项目能用到,最好,反过来说,学习公司项目能用到的技术,最现实。
如果对某种技术特别感兴趣而公司又用不到,那就业余设计一些项目来做,只有用,才能学到手。
Q5、我是学java的,现想转大数据,再往人工工智能方向发展,有什么可以建议的?
A :想转的方向不错,行动起来吧!
建议先找几家公司的岗位作为目标,看看他们需要什么知识、技术、经验,然后你业余时间就有针对性的储备相应的知识、技术,也可以做一些练习项目来积攒经验。
Q6、做技术到30岁左右,感觉有点力不从心,想转岗但是又不知道具体转哪个好,转岗需要做哪些准备?
A :先从公司的岗位开始吧,把各种相关岗位看看,捋一边,看自己对哪个有兴趣。
然后找到做相应岗位的同事,了解他们的工作方式、工作内容、用到的知识、技能、工具,这样就可以准备起来。
Q7、我是一个创业公司的研发人员,公司主要用QT编程,界面主要用qml和widget,在公司自己的集成框架下写产品,刚毕业就来到了我们公司,这几个月以来,我认真的学习了qt核心编程一书,在学习中也遇到了很多问题,好在都一一解决了,非常感谢您的帮助!但是我有些担忧,我不知道当下在软件研发这个领域,我现在所学在外面用的多不多,以后跳槽了有没有市场(Qt在北上广深这样的城市有没有市场需要,是否和我所学的内容匹配,匹配度高不高?),在学习的路上,我充实而忧虑,请老师给我建议,非常感谢!!
A :Qt虽然是小众技术框架,在北上广深也有不少公司用,你学精,工作没问题啦。
但是我建议不要把自己和Qt绑死,视野应该放大,你应该把自己的技术和C++关联起来,这样可应用范围更广。
Q8、我是80年的,有17年的工作经验,大部分时间都是在软件公司,现在是在甲方公司做高级IT应用经理,主要技术为.Net, Web以及C++,涉及到很多企业软件比如说财务、ERP、物流、BI以及电子商务等等。我投了很多简历,但面试机会都很少,我希望能找出原因和改进的办法。
A:问这个问题的小伙伴,和我年龄相当,我也是80年的,我说的直接点。
我们这个年纪,再网投简历,基本上很难有回音了。
因为年龄不符合人家的要求,公司招人一般都是35以下啦。
所以,靠谱的做法是,走人脉推荐,或者猎头。
Q9、我是一名女程序员,在职场中明显感觉与男生相比处于弱势的地位。主要想问女IT攻城狮的职业发展路径有哪些可能?现在做前端开发,如果转行去做大数据分析,有什么好的建议?年龄28岁
A:女程和男程,职业发展路径没什么差别。只不过女程因为家庭和性别原因,有了孩子后精力牵扯比较多,后续不大容易往上走。
所以我觉得女程更应该做的是在生孩子前就确立自己的地位,这样后续就比较好办啦。如果生孩子之前就没走到核心,生孩子耽误几年,就很难再走到核心位置了。
Q10、本人女,2014年毕业,本科,目前工作了4年,之前做机器人,后来换公司后做算法研究与实现,慢慢发现,自己的逻辑思维做算法,很难得到提升,所以感觉很迷茫,不知道以后往哪个方向走比较好。之前查过一点资料,说程序员无非两条路,一个是架构师,一个是管理,但这两个的前提都是技术得达到一定的境界,心里也担心自己能不能做得来。
A :其实发展方向,有 4 种:架构师,技术专家,技术+业务综合竞争力,管理,我觉得是有这么 4 条基本的路线。
技术专家和架构师,对技术要求比较高,管理的话,倒不一定,《程序员的成长课》一书管理这块有比较多的描述。
Q11、我想问问程序员跳槽频度的职业生涯的影响,差不多多久跳一次合适?
A :没有固定说法,个人以为,不要太频繁,比如半年一次,就太过了。2年左右一次,我觉得是比较合适的。如果遇到合适的,持续做4~~5年再跳,更合适。
Q12、在一线城市工作过的程序员(android)年龄也不小了(28),为了家庭,打算回二线城市工作,该如何确立技术方向。
A :家乡有用你所用技术的公司,就继续。没有,根据需求和新技术与你现有技术的相关性来。
Q13、我想问一下就现在的市场需求来说,现在以及未来的5年内大数据和人工智能人才的需求是个什么趋势呢
A :我觉得这两个方向是很好的方向,这两年会需求旺盛,慢慢会平稳,到 5 年左右,我觉得有积累的人比价吃香,新进入会比较困难。
Q14、想知道传统项目6年32岁转互联网金融公司,怎样做才能35岁后不失业呢?
A :想不失业就要建立自己的标签,在某个方向上有优势。架构设计也好,某种技术也好,管理能力也好,有一样很牛,就不用担心失业。
Q15、你好,我是计算机毕业学生刚入门音视频编解码,有C基础,核心编程是android,有没有推荐的影音编解码相关书籍?
A :我一时想不起来,问Google,问百度。
Q16、再过一年我快35了,之前一直在做java开发,最近三年转行大数据方面,也算是经历并主导了公司的大数据平台的从无到有的建设过程,但是由于公司现阶段对数据不是特别重视,所以一直想换个平台,但是仅仅熟悉hadoop、spark生态的东西好像对我来说有点不够,想问问安老师有什么建议?
A :没数据就没得玩,果断找有数据的公司。会 hadoop、spark,可以干很多事情了,关键要看看你“会”到什么程度。我建议应该寻找对这个生态链有直接需求的机会看看。
Q17、请问老师,对图像处理和计算机视觉的前景怎么看?
A :图像处理和计算机视觉,是AI的一大方向,前景广阔。想想看,李飞飞就是做这方面研究的,现在主导Google的人工智能,还跑到中国来建公司开发业务来啦。
Q18、我是一名ios开发者,入行三年感觉不到技术提升,兴趣也没有刚入行时高了,现在想转后台开发,之前java,php很火,本来打算学的,现在突然人工智能火了,随之phthon和r语言又特别火,技术更新太快,有点跟不上,感觉很迷茫,能不能推荐一门值得入行的后端语言?
A :后端语言,考虑Java或者Go。其实选任意一个都可以,看你学得怎么样。
Q19、 一名Android程序员转自动化测试,老师您觉得是否可行?
A : 个人感觉可行。
因为这属于降维,你做过开发,学习能力没问题,学自动化测试需要的技术,应该没问题。最主要,你觉得这是你想做的,就没问题。