我所經(jīng)歷的二十年技術(shù)演變,一路狂奔到今天
做軟件開發(fā)行業(yè)的,都擔心新技術(shù)浪潮不斷來襲,把自己拍死在沙灘上,真是是這樣嗎?
我主要做Java后端開發(fā),也感受到了其他領(lǐng)域的潮起潮落,給大家分享下自己的看法。
首先我把這些新技術(shù)分為4大類:漸進性,顛覆性,基礎(chǔ)知識和新興技術(shù)。
1. 漸進性的技術(shù)
1.1 Java 后端開發(fā)
我是Java后端開發(fā)背景,所以先從這個點開始。
二十年前,開發(fā)Web系統(tǒng)的技術(shù)棧非常簡單,就是 Servlet + JSP +JDBC , 沒有那么多層的抽象和封裝。
然后在MVC領(lǐng)域出現(xiàn)了Struts , 在ORM領(lǐng)域出現(xiàn)了Hibernates ,iBatis(MyBatis)。
企業(yè)界曾經(jīng)力推過EJB, 但是過于笨重,繁瑣,最終被輕量級的Spring所替代。
前端的興起,導(dǎo)致MVC中的View被拿走,后端專注于提供接口,輸出數(shù)據(jù)。
應(yīng)用架構(gòu)從單體應(yīng)用,過渡到微服務(wù),再到Service Mesh。
1.2 View 層
View層最早由后端生成,可用的技術(shù):JSP, Velocity,F(xiàn)reemaker 等。
界面的交互主要是程序員直接用JavaScript 操作DOM, 后來有了jQuery, Prototype等類庫的幫助
后來出現(xiàn)了React , Vue, Angular 等框架,實現(xiàn)前后端分離。
1.3 編程模型
從基于Servlet的阻塞式模型 , 慢慢過渡到非阻塞的、事件驅(qū)動的、 反應(yīng)式的的模型,如Node.js ,SpringWebFlux , Vert.x等
線程模型:從共享內(nèi)存,逐漸發(fā)展到Actor , Go routine
編程語言從過程式,發(fā)展到面向?qū)ο?,再發(fā)展到面向?qū)ο?函數(shù)式
1.4 工程實踐
從瀑布發(fā)展到敏捷
部署方式:手工安裝 ->持續(xù)集成 -> DevOps
代碼+配置文件 -> 代碼+配置文件+運行環(huán)境, 即Docker,然后是 K8s
1.5 總結(jié)
之所以說是漸進性技術(shù),是因為這些技術(shù)是慢慢發(fā)展起來的,通常是為了解決原有技術(shù)的痛點問題而發(fā)展起來的。
只要你熱愛技術(shù),會一直不斷奔跑,根本就不用懼怕。
例如你學會了面向?qū)ο筮@種編程泛型,自然而然地就想去看看函數(shù)式,這樣當Java 8中的函數(shù)式編程來臨的時候,你肯定不是懼怕,而是欣喜:Java終于支持函數(shù)式了。
再比如你發(fā)現(xiàn)手工做Build費時費力,容易出錯,會想辦法自動化,持續(xù)集成的概念和相關(guān)工具自然而然進入你的法眼。
2. 基礎(chǔ)性的技術(shù)
特點:基本上沒怎么變過,只要學會,就不怕被吃掉。
包括數(shù)據(jù)結(jié)構(gòu)和算法,操作系統(tǒng),計算機網(wǎng)絡(luò),組成原理,數(shù)據(jù)庫,編譯原理等。
再加上分布式的基礎(chǔ)知識
3. 顛覆性的技術(shù):從桌面發(fā)展到互聯(lián)網(wǎng)
由于服務(wù)的用戶規(guī)模完全不同,直接導(dǎo)致所使用的技術(shù)棧有天壤之別。
桌面應(yīng)用主要用VB, Delphi,VC++開發(fā)單機或者C/S應(yīng)用,運行在客戶的電腦上。
而互聯(lián)網(wǎng)應(yīng)用使用的則是LAMP,Java,Python等技術(shù),主要運行在服務(wù)器端,客戶端變得非常薄只剩一個瀏覽器了。
互聯(lián)網(wǎng)發(fā)展起來以后,桌面應(yīng)用的開發(fā)極度萎縮,如果沒有及時跟進轉(zhuǎn)型,肯定被技術(shù)吃掉。
但是這次轉(zhuǎn)型并不會那么難,因為Web系統(tǒng)剛開始的時候用戶量小,是非常簡單的,很多桌面開發(fā)的程序員都可以輕松轉(zhuǎn)過來。
但是,由于和新人站在統(tǒng)一跑線,老家伙的優(yōu)勢在哪里?
我覺得在于對設(shè)計思想的理解:抽象,分層,異步,模式,OOD...... 這些東西,再加上基礎(chǔ)知識的實踐和運用,老家伙依然有能力跑到前面。
4. 新興技術(shù)
老的技術(shù)依然存在,但是這些新的方向非常火熱,薪水高,供不應(yīng)求。
4.1 從互聯(lián)網(wǎng)發(fā)展到移動互聯(lián)網(wǎng)
這一階段出現(xiàn)了全新的崗位:App開發(fā)。所需要的技能得從頭兒開始學習,想轉(zhuǎn)行賺大錢的老家伙們和新人站到了同一個起跑線。
但是有些掌握了基礎(chǔ)知識,通用知識和設(shè)計思想的老家伙會跑得更快:他們本來就對界面編程很精通,對于界面布局,事件響應(yīng)等信手拈來,他們對網(wǎng)絡(luò)編程也很熟悉, 現(xiàn)在只需要在一個新的框架下,使用新的概念和組件來完成手機端的界面和邏輯。
隨著App建設(shè)熱潮的過去,App開發(fā)已經(jīng)逐漸冷卻下來。
4.2 大數(shù)據(jù),人工智能
大數(shù)據(jù)是新出現(xiàn)的方向,包括大數(shù)據(jù)開發(fā),大數(shù)據(jù)分析。
從后端開發(fā)轉(zhuǎn)向大數(shù)據(jù)開發(fā)不是很難,也有很多成功的案例。需要學習Hadoop,Spark,Storm等相關(guān)框架的使用原理,F(xiàn)lume, Kafka等數(shù)據(jù)流工具,爬蟲,分詞,數(shù)據(jù)可視化等。
相比之前談到的技術(shù),大數(shù)據(jù)分析和人工智能是兩個“異類”,尤其是人工智能,程序員要想轉(zhuǎn)型到這里領(lǐng)域,需要跨過它樹立的數(shù)學門檻:統(tǒng)計學,線性代數(shù),微積分,概率。
現(xiàn)在人工智能非?;馃幔鼤兂梢环N顛覆性的技術(shù),吃掉前端開發(fā)/后端開發(fā)/大數(shù)據(jù)開發(fā)/App開發(fā)嗎?現(xiàn)在看是不可能的,因為現(xiàn)在的AI還不是通用的人工智能,只能在某個領(lǐng)域內(nèi)產(chǎn)生作用,在大數(shù)據(jù)的基礎(chǔ)上做出分析,找到規(guī)律,做出判斷和預(yù)測。
而人工智能和大數(shù)據(jù)分析所使用的數(shù)據(jù)其實來自于App, 網(wǎng)站,再加上現(xiàn)在慢慢興起的物聯(lián)網(wǎng), 他們不是替代,而是依賴的關(guān)系。
總結(jié)一下,進入這個行業(yè),就需要不斷地夯實計算機基礎(chǔ)知識,在工作中尋找,學習,實踐那些穩(wěn)定的知識,然后不斷對自己做技術(shù)升級,確保在自己的領(lǐng)域能跟上趨勢。這樣即使轉(zhuǎn)型的時候,依然可以占據(jù)優(yōu)勢,不被技術(shù)吃掉。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請通過作者微信公眾號coderising獲取授權(quán)】
























