我所經歷的二十年技術演變,一路狂奔到今天
做軟件開發行業的,都擔心新技術浪潮不斷來襲,把自己拍死在沙灘上,真是是這樣嗎?
我主要做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獲取授權】