在瞬息萬(wàn)變的編程世界里,知識(shí)更迭速度之快令人咋舌,程序員所積累的編程知識(shí)在十年后將有多少變得沒(méi)用?
如何才能不被時(shí)代拋棄,是每個(gè)程序員都需要思考的問(wèn)題。
我認(rèn)為,編程知識(shí)可以分為經(jīng)驗(yàn)型知識(shí)和原理型知識(shí),而經(jīng)驗(yàn)型知識(shí)的貶值速度要快于原理型知識(shí)。
要驗(yàn)證這一觀點(diǎn),我們不必預(yù)測(cè)未來(lái)十年哪些知識(shí)將變得過(guò)時(shí),而是可以回顧過(guò)去,觀察哪些知識(shí)已經(jīng)貶值或變得不那么重要。
以當(dāng)今熱門(mén)的Web前端工程師為例,我們可以清晰地看到兩種知識(shí)的區(qū)別。
經(jīng)驗(yàn)型知識(shí)
經(jīng)驗(yàn)型知識(shí)側(cè)重于具體的技術(shù)和操作,其價(jià)值會(huì)隨著技術(shù)迭代而衰減。
1.瀏覽器兼容性和系統(tǒng)兼容性知識(shí)
包括對(duì)IE5.x至IE7的兼容性技巧,特別是CSS hack,不同DOM級(jí)別的API兼容性,以及異步請(qǐng)求技術(shù)(如AJAX/CORS)的兼容性問(wèn)題。還有iOS 5/6和Android 1.x至3.x瀏覽器中的各種兼容性問(wèn)題,這些經(jīng)驗(yàn)可能隨著時(shí)間推移而變得不再重要。
2.技術(shù)演進(jìn)導(dǎo)致的淘汰方案
比如曾經(jīng)流行的table布局方式,HTTP 1.x協(xié)議,以及早期的緩存和離線應(yīng)用技術(shù)方案,都可能因?yàn)榧夹g(shù)進(jìn)步而被淘汰。
3.平臺(tái)綁定的開(kāi)發(fā)經(jīng)驗(yàn)
比如針對(duì)特定平臺(tái)如Windows RT的前端開(kāi)發(fā)解決方案,或者特定平臺(tái)擴(kuò)展的開(kāi)發(fā),以及特定手機(jī)品牌瀏覽器的兼容性問(wèn)題處理。
4.第三方庫(kù)/框架的使用
比如對(duì)ExtJS或AngularJS 1.x等框架的API使用經(jīng)驗(yàn),這些框架可能隨著新技術(shù)的出現(xiàn)而變得不那么流行。
原理型知識(shí)
側(cè)重于對(duì)技術(shù)本質(zhì)和原理的理解,其價(jià)值更加持久,能夠遷移到新的技術(shù)領(lǐng)域。
1.業(yè)務(wù)模式選擇
能夠根據(jù)不同的業(yè)務(wù)需求選擇合適的業(yè)務(wù)模式,是架構(gòu)設(shè)計(jì)的基礎(chǔ),不會(huì)隨著技術(shù)更迭而改變。
2.深入理解核心技術(shù)
比如在NodeJS等技術(shù)的研發(fā)過(guò)程中,對(duì)HTTP協(xié)議、Stream、系統(tǒng)調(diào)用、文件系統(tǒng)和進(jìn)程管理等有深刻理解。
3.編程語(yǔ)言理解
比如在研究ECMAScript及其衍生語(yǔ)言時(shí),對(duì)語(yǔ)法、語(yǔ)義和編程方式有深入的理解。
4.框架設(shè)計(jì)與模式
了解框架設(shè)計(jì)原理,并在業(yè)務(wù)開(kāi)發(fā)中掌握各種設(shè)計(jì)模式的工程意義。
5.工程化思維
比如在前端工程化過(guò)程中,培養(yǎng)工程化思維,理解構(gòu)建、持續(xù)集成和DevOps的真正意義。
6.軟件開(kāi)發(fā)實(shí)踐
形成良好的軟件開(kāi)發(fā)實(shí)踐習(xí)慣,如TDD(測(cè)試驅(qū)動(dòng)開(kāi)發(fā)),積累協(xié)同開(kāi)發(fā)和開(kāi)源代碼維護(hù)的經(jīng)驗(yàn)。
------
當(dāng)然,原理型知識(shí)也并非一勞永逸,它也可能會(huì)被顛覆性的技術(shù)革命所淘汰,就像圖靈機(jī)出現(xiàn)后,很多計(jì)算理論都需要重新構(gòu)建。
但相比于經(jīng)驗(yàn)型知識(shí),原理型知識(shí)的保質(zhì)期無(wú)疑更長(zhǎng)。
除了上述這些,算法/數(shù)學(xué)能力等硬知識(shí)的重要性更是不言而喻,它們是構(gòu)建強(qiáng)大編程能力的基石,也是最不可能過(guò)時(shí)的知識(shí)。