今天看到一個(gè)話題:“如果不考慮失業(yè),最推薦學(xué)哪幾門編程語言?”
新手在面對(duì)編程語言的選擇時(shí)往往會(huì)猶豫不決,總想學(xué)個(gè)最好的語言。然而,"最好" 的定義見仁見智,有人追求實(shí)用性,有人追求高薪資。
而如果你聚焦于一個(gè)更純粹的目標(biāo):提升思維邏輯,感受編程的樂趣,那么可以學(xué)習(xí)什么語言呢?
借鑒著名的“金字塔原理”,我們可以將編程語言學(xué)習(xí)拆解成若干個(gè)獨(dú)立互斥且完全窮盡的維度,從而構(gòu)建高效的學(xué)習(xí)模型。具體來說,我們可以從以下幾個(gè)方面入手:
類型系統(tǒng)
現(xiàn)代編程語言的類型系統(tǒng)大致可分為:
● 動(dòng)態(tài)類型 vs 靜態(tài)類型
● 強(qiáng)類型 vs 弱類型
動(dòng)態(tài)與靜態(tài)類型的區(qū)分相對(duì)明確,而強(qiáng)類型與弱類型之間則存在一定的爭議,這主要取決于個(gè)人對(duì)這些概念的定義和理解。
接下來,我們?nèi)绾位陬愋拖到y(tǒng)選擇性價(jià)比高的編程語言呢?這可以通過集合或矩陣分析來實(shí)現(xiàn)。
例如,對(duì)于已經(jīng)掌握 JavaScript(動(dòng)態(tài)弱類型)的學(xué)習(xí)者,學(xué)習(xí) Haskell(靜態(tài)強(qiáng)類型)的收益顯然高于 TypeScript(靜態(tài)弱類型),因?yàn)榍罢吣軌蜓a(bǔ)足 JavaScript 所缺乏的強(qiáng)類型思維模型,實(shí)現(xiàn)類型系統(tǒng)維度的“完全窮盡”。
因此,對(duì)于JavaScript開發(fā)者來說,我更推薦學(xué)習(xí)Haskell,這并非因?yàn)門ypeScript不值得學(xué)習(xí),而是Haskell在類型系統(tǒng)維度上提供了更高的性價(jià)比。
編程語言排行榜
在考慮學(xué)習(xí)或使用編程語言時(shí),可以參考一些基于編程語言人氣和熱度的排行榜,這些排行榜通常能反映出一些關(guān)鍵信息:一個(gè)語言的社區(qū)活躍度、生態(tài)系統(tǒng)的豐富性、潛在的高薪資水平以及成熟的工業(yè)標(biāo)準(zhǔn)。
例如,GitHub作為全球最大的編程社區(qū),其發(fā)布的編程語言趨勢是一個(gè)值得參考的指標(biāo)。根據(jù)2023年度數(shù)據(jù),JavaScript是目前全球最受歡迎的編程語言。
當(dāng)然,人氣高低只是參考因素,最終選擇仍需回歸到類型系統(tǒng)等核心維度。
我們真正要的是找到那些能互補(bǔ)、覆蓋所有類型系統(tǒng)的語言。就像選兩門語言,我們希望它們的結(jié)合能讓我們掌握類型系統(tǒng)的方方面面。
設(shè)計(jì)與實(shí)現(xiàn)
除了類型系統(tǒng),我們還可以從其他角度來分析和選擇編程語言,比如:
● 編譯 vs 解釋
● 內(nèi)存管理機(jī)制
這些維度可以幫助我們更全面地理解每種語言的特點(diǎn),我們可以通過畫出一維或二維的矩陣來比較不同語言。
但有時(shí)候也要注意一些邊界模糊的區(qū)域,某些語言可能同時(shí)具備多種特性,例如 JavaScript 介于解釋型和編譯型之間,Rust 則屬于半自動(dòng)內(nèi)存管理。
編程范式
編程范式是指編程的思維方式,例如面向?qū)ο缶幊蹋∣OP)、函數(shù)式編程(FP)等。
現(xiàn)代編程語言大多支持多種編程范式,因此在選擇時(shí),我們應(yīng)優(yōu)先考慮能夠涵蓋盡可能多編程范式的語言,例如 JavaScript。
當(dāng)然,如果想要深入學(xué)習(xí)某種特定的編程范式,也可以選擇專門為此設(shè)計(jì)的語言。例如,想要學(xué)習(xí)邏輯編程,可以選擇 Prolog。
無論是選擇精通一門語言,還是博采眾長,學(xué)習(xí)多種語言,最終目的都是為了提升自身的編程思維和解決問題的能力。