為什么建議同時學多門編程語言
晨讀一本名叫《4點起床》的書,書中有一段描述與最近學習編制語言時自己的感受完全一致。算是一個小經驗,分享給大家。
書中有一章的標題為《同時學六國語言記起來比較快》,其中有兩段描述如下:
為什么我推薦大家同時學不同的語言呢?實不相瞞,我這幾年在學西班牙語時發(fā)現(xiàn),在學英語的時候,如果你腦子里能有些關于其他外語的知識,掌握語言的速度會變快許多。
西班牙語和英語看似風馬牛不相及,其實兩者還是很相似的。比如“重要”,在英語里是“important”,西班牙語也是“important”,只是念法不一樣罷了。
看到這里,感覺跟自己學習編程語言的感覺完全一致。Java語言用了十多年了,因為工作需要,快速學習了Python和Golang,并精專Golang學習。在學習的過程中,最大的收獲不是學會了Golang這門編程語言,而是對Java的編程有了更深入的理解。不僅如此,對整個軟件編程都有了更進一步的理解。
舉例講幾個方面:
第一,在Java中,我們常用ArrayList來存儲一些列數(shù)據(jù),而在Golang中常用slice來存儲一些列數(shù)據(jù)。在Java和Golang中,都存在數(shù)組,但基本上都很少用數(shù)組,而采用列表或切片。而像ArrayList或slice本身又是基于數(shù)組來實現(xiàn)的。
對照起來會發(fā)現(xiàn),基本的底層原理都一樣,只不過不同語言的實現(xiàn)思路不同而已。
第二,關于HTTP請求。但單純使用Java進行API請求時,我們往往關注的是API如何使用。當學習多種語言時,你會發(fā)現(xiàn)不同的語言有不同的實現(xiàn)形式,但萬變不離其宗,都是基于HTTP協(xié)議來實現(xiàn)。這樣也對HTTP協(xié)議本書有了更深入的理解。當然,其他協(xié)議也是如此。
第三,關于框架。比如注冊中心,在Java中有Nacos、Eureka等實現(xiàn),而在Golang中,有Consul、Etcd等實現(xiàn)。雖然它們可以跨語言混用,但有了這樣橫向的對比,對原本語言和框架的學習和掌握更加深刻了。
當然,還有其他許多例子。最根本的是,當你學習了多門語言時,每一個實現(xiàn)都有一個或多個對照,這樣對實現(xiàn)的底層就更加理解,而不會過多關注語言本身的語法。不僅拓寬了思路,當有了對照,也能更好理解各自實現(xiàn)的優(yōu)缺點,以及為什么如此實現(xiàn)。