做软件开发行业的,都担心新技术浪潮不断来袭,把自己拍死在沙滩上,真是是这样吗?
我主要做Java后端开发,也感受到了其他领域的潮起潮落,给大家分享下自己的看法。
首先我把这些新技术分为4大类:渐进性,颠覆性,基础知识和新兴技术。
1. 渐进性的技术
1.1 Java 后端开发
我是Java后端开发背景,所以先从这个点开始。
二十年前,开发Web系统的技术栈非常简单,就是 Servlet + JSP +JDBC , 没有那么多层的抽象和封装。
然后在MVC领域出现了Struts , 在ORM领域出现了Hibernates ,iBatis(MyBatis)。
企业界曾经力推过EJB, 但是过于笨重,繁琐,最终被轻量级的Spring所替代。
前端的兴起,导致MVC中的View被拿走,后端专注于提供接口,输出数据。
应用架构从单体应用,过渡到微服务,再到Service Mesh。
1.2 View 层
View层最早由后端生成,可用的技术:JSP, Velocity,Freemaker 等。
界面的交互主要是程序员直接用JavaScript 操作DOM, 后来有了jQuery, Prototype等类库的帮助
后来出现了React , Vue, Angular 等框架,实现前后端分离。
1.3 编程模型
从基于Servlet的阻塞式模型 , 慢慢过渡到非阻塞的、事件驱动的、 反应式的的模型,如Node.js ,SpringWebFlux , Vert.x等
线程模型:从共享内存,逐渐发展到Actor , Go routine
编程语言从过程式,发展到面向对象,再发展到面向对象+函数式
1.4 工程实践
从瀑布发展到敏捷
部署方式:手工安装 ->持续集成 -> DevOps
代码+配置文件 -> 代码+配置文件+运行环境, 即Docker,然后是 K8s
1.5 总结
之所以说是渐进性技术,是因为这些技术是慢慢发展起来的,通常是为了解决原有技术的痛点问题而发展起来的。
只要你热爱技术,会一直不断奔跑,根本就不用惧怕。
例如你学会了面向对象这种编程泛型,自然而然地就想去看看函数式,这样当Java 8中的函数式编程来临的时候,你肯定不是惧怕,而是欣喜:Java终于支持函数式了。
再比如你发现手工做Build费时费力,容易出错,会想办法自动化,持续集成的概念和相关工具自然而然进入你的法眼。
2. 基础性的技术
特点:基本上没怎么变过,只要学会,就不怕被吃掉。
包括数据结构和算法,操作系统,计算机网络,组成原理,数据库,编译原理等。
再加上分布式的基础知识
3. 颠覆性的技术:从桌面发展到互联网
由于服务的用户规模完全不同,直接导致所使用的技术栈有天壤之别。
桌面应用主要用VB, Delphi,VC++开发单机或者C/S应用,运行在客户的电脑上。
而互联网应用使用的则是LAMP,Java,Python等技术,主要运行在服务器端,客户端变得非常薄只剩一个浏览器了。
互联网发展起来以后,桌面应用的开发极度萎缩,如果没有及时跟进转型,肯定被技术吃掉。
但是这次转型并不会那么难,因为Web系统刚开始的时候用户量小,是非常简单的,很多桌面开发的程序员都可以轻松转过来。
但是,由于和新人站在统一跑线,老家伙的优势在哪里?
我觉得在于对设计思想的理解:抽象,分层,异步,模式,OOD...... 这些东西,再加上基础知识的实践和运用,老家伙依然有能力跑到前面。
4. 新兴技术
老的技术依然存在,但是这些新的方向非常火热,薪水高,供不应求。
4.1 从互联网发展到移动互联网
这一阶段出现了全新的岗位:App开发。所需要的技能得从头儿开始学习,想转行赚大钱的老家伙们和新人站到了同一个起跑线。
但是有些掌握了基础知识,通用知识和设计思想的老家伙会跑得更快:他们本来就对界面编程很精通,对于界面布局,事件响应等信手拈来,他们对网络编程也很熟悉, 现在只需要在一个新的框架下,使用新的概念和组件来完成手机端的界面和逻辑。
随着App建设热潮的过去,App开发已经逐渐冷却下来。
4.2 大数据,人工智能
大数据是新出现的方向,包括大数据开发,大数据分析。
从后端开发转向大数据开发不是很难,也有很多成功的案例。需要学习Hadoop,Spark,Storm等相关框架的使用原理,Flume, Kafka等数据流工具,爬虫,分词,数据可视化等。
相比之前谈到的技术,大数据分析和人工智能是两个“异类”,尤其是人工智能,程序员要想转型到这里领域,需要跨过它树立的数学门槛:统计学,线性代数,微积分,概率。
现在人工智能非常火热,它会变成一种颠覆性的技术,吃掉前端开发/后端开发/大数据开发/App开发吗?现在看是不可能的,因为现在的AI还不是通用的人工智能,只能在某个领域内产生作用,在大数据的基础上做出分析,找到规律,做出判断和预测。
而人工智能和大数据分析所使用的数据其实来自于App, 网站,再加上现在慢慢兴起的物联网, 他们不是替代,而是依赖的关系。
总结一下,进入这个行业,就需要不断地夯实计算机基础知识,在工作中寻找,学习,实践那些稳定的知识,然后不断对自己做技术升级,确保在自己的领域能跟上趋势。这样即使转型的时候,依然可以占据优势,不被技术吃掉。
【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】