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