做软件开发行业的, 都担心新技术浪潮不断来袭, 把自己拍死在沙滩上, 真是是这样吗?
我主要做 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, 网站, 再加上现在慢慢兴起的物联网, 他们不是替代, 而是依赖的关系.
总结一下, 进入这个行业, 就需要不断地夯实计算机基础知识, 在工作中寻找, 学习, 实践那些稳定的知识, 然后不断对自己做技术升级, 确保在自己的领域能跟上趋势. 这样即使转型的时候, 依然可以占据优势, 不被技术吃掉.
来源: http://zhuanlan.51cto.com/art/201907/600292.htm