新手在開始學(xué)習(xí)編程時通常會問這個問題:
在學(xué)會了幾門編程語言之后,很多開發(fā)者會問這個問題:
我將會在這篇文章里給出我的答案。不過,比得到答案更重要的是:掌握學(xué)習(xí)新編程語言的能力。 對于一個編程老手來說,學(xué)習(xí)新的編程語言應(yīng)該很容易。他們只需要一個周末甚至是幾個小時就可以開始用新學(xué)的編程語言寫代碼了。優(yōu)秀的程序員可以為了完成某個任務(wù)使用任何一門編程語言。畢竟,編程語言只是工具。 話是沒錯,不過更重要的你要學(xué)會“如何學(xué)習(xí)新的編程語言”,而不只是學(xué)會某一門具體的語言。要掌握“學(xué)會所有編程語言”的能力,你不需要是一個天才,你要做的是掌握編程語言的核心知識,并知道所以,代碼實(shí)際上就是你傳達(dá)給人類和計算機(jī)的“消息”。這也是在設(shè)計和實(shí)現(xiàn)編程語言時需要考慮的權(quán)衡點(diǎn)。因為:一些最佳實(shí)踐。 下面讓我來具體解釋一下。 要記住,編程語言只是工具,它們也是由程序員發(fā)明出來的。世界上有幾千種編程語言,其中只有 20 多種在 IT 界里被廣泛使用。如果你稍微想一想,就會發(fā)現(xiàn)這些編程語言有一些共同點(diǎn)。 我們以汽車為例,世界上有很牌子的汽車。有些車子緊湊但動力十足,有些車子笨重開得慢,不同牌子的車子具有不同的駕駛體驗。 如果你知道怎么開其中一種車型,也就知道怎么開其他大部分車型,盡管它們的牌子不一樣。 為什么這么說呢?因為不同牌子的車子有一些共同點(diǎn)——它們都有發(fā)動機(jī)和輪胎。它們的作用都是一樣的:把你送到目的地。 編程語言的作用是幫助程序員表達(dá)想法。 編程語言是一種表達(dá)工具,包含了兩個方面:
所以,代碼實(shí)際上就是你傳達(dá)給人類和計算機(jī)的“消息”。這也是在設(shè)計和實(shí)現(xiàn)編程語言時需要考慮的權(quán)衡點(diǎn)。因為:
不同的編程語言有不同的語法和特性,但它們都是圖靈完備的。通俗地說就是:所有的編程語言都可以用來實(shí)現(xiàn)任意一種算法。 當(dāng)然,你不需要學(xué)會所有的編程語言,但學(xué)會的編程語言越多,就越容易為要完成的任務(wù)選擇合適的語言。 幾乎所有的編程語言都包含了幾類元素,它們都與“抽象”有關(guān):
編程語言有很多公共特性,因此,我們能夠?qū)W會所有編程語言的主要原因是:編程語言的概念其實(shí)是很有限的。常用的編程語言概念不會超過 15 個:
編程語言的概念基本上是不怎么變的,就像設(shè)計原則一樣。 編程語言的作者們相互借鑒想法,只是實(shí)現(xiàn)不一樣罷了。有時候,我們可以說語言 C 是語言 A 和 B 的兒子,那么整個編程語言的家譜可能像這樣: 理解好這些概念,不僅可以幫你快速學(xué)會編程語言,還會讓你寫出更好的代碼。例如,函數(shù)式編程語言和過程式編程語言的代碼風(fēng)格和抽象方式是非常不一樣的,如果沒有領(lǐng)會到它的重點(diǎn),可能就寫不好代碼。 因此,我們要學(xué)習(xí)編程語言概念,但該怎么學(xué)呢? 我建議去了解某個語言概念或特性要解決的問題是什么,它有哪些好處和不足,而且最好可以知道它是怎么實(shí)現(xiàn)的。 我們以 GC 為例,那么第一問題就是:GC 是什么東西? 在網(wǎng)上搜一下,可以找到這個維基百科的解釋。GC 是用來解決內(nèi)存管理問題的,可以減少程序的內(nèi)存錯誤。有了 GC,代碼寫起來更容易了,因為我們不需要手動管理內(nèi)存,但這是以犧牲性能為代價的。如果你的編程語言使用了 GC,要注意 GC 是如何幫你處理內(nèi)存的。 隨后,你需要知道 GC 的工作原理。它們使用了什么算法?GC 有很多種,而且它們的種類還在不斷發(fā)展演化中。 開始學(xué)習(xí)新的編程語言正是學(xué)習(xí)編程語言概念的一個好時機(jī)。例如,如果 Ruby 是你的第一門面向?qū)ο缶幊陶Z言,就可以借這個機(jī)會深入了解一下面向?qū)ο缶幊痰膬?yōu)點(diǎn)和不足。 對面向?qū)ο缶幊逃辛撕芎玫睦斫猓偃W(xué)習(xí)其他面向?qū)ο缶幊陶Z言就會容易得多。 如果語法不是很復(fù)雜,要實(shí)現(xiàn)一門編程語言并不需要做太多工作。可以看看這個項目: https://github.com/kanaka/mal 任何一門語言都可以被用來實(shí)現(xiàn) Lisp。8cc 是 C 語言的一個編譯器,如果你想自己寫一個編譯器,可以參考這個: https://github.com/rui314/8cc 除了這些,還有一些書可以看: 《編程語言要領(lǐng)》介紹了很多種解釋器,《編程語言編譯器實(shí)踐》也是一本適合用來學(xué)習(xí)編程語言的書。 如果你遵循以下這些步驟,就可以快速“學(xué)會所有的編程語言”。 第一步:理解這門語言的設(shè)計理念和通用的語言特性 例如,如果你要學(xué) Ruby,那就先看一下 Ruby 有什么特別的?
讓我們更深入地看一下: http://www./en/about/ 那么,在學(xué)習(xí) Ruby 之前,需要了解的重點(diǎn)是:
了解這門語言最重要的特性,包括它的優(yōu)點(diǎn)和不足。 第二步:通過教程或書籍學(xué)習(xí)語法和最佳實(shí)踐 在第二步,你需要掌握語法、基本的 IO、調(diào)試工具和單元測試。 如果你剛開始學(xué)習(xí)編程,最好找那種“權(quán)威指南”之類的書籍,比如語言作者寫的書,或者在網(wǎng)上書店搜索這門編程語言,找到好評如潮的書。 如果你是個編程老手,只需要找一些簡單的指南或示例代碼就可以了,可以看看這個: https:/// 記住,在學(xué)習(xí)語法時,你需要動手寫代碼,不要只是拷貝黏貼。你可以在這個網(wǎng)站上練習(xí)寫代碼,有人會審閱你的代碼,并免費(fèi)為你提供建議: https:/// 第三步:使用新學(xué)的語言寫更多的代碼 現(xiàn)在,你需要使用新學(xué)的語言開始一個項目,包括與這門語言有關(guān)的生態(tài)系統(tǒng)、工具和庫。你可以從簡單的開始,比如一個猜數(shù)字小游戲、簡單的網(wǎng)上書店或者 TODO 應(yīng)用程序。在 GitHub 上可以找到很多類似的項目。 第四步:了解語言的實(shí)現(xiàn)細(xì)節(jié) 這一步并非都是必需的。不過,有追求的程序員對編程語言的實(shí)現(xiàn)細(xì)節(jié)會感興趣。有時候,因為對編程語言的實(shí)現(xiàn)細(xì)節(jié)不是很了解,容易寫出 bug。 好吧,現(xiàn)在我們來回答這個問題。這個問題的答案取決于很多因素,但簡單地說就是: 如果你的老師要你學(xué)習(xí) C 語言,那么 C 語言就是你的第一門需要學(xué)習(xí)的編程語言,因為有人教你,你還有同學(xué),學(xué)習(xí)起來會更容易。 如果你要開發(fā) Web 應(yīng)用程序,就學(xué)習(xí) JavaScript/Python/Ruby。如果你要開發(fā)游戲,就學(xué)習(xí) C++。如果你要處理數(shù)據(jù),就學(xué)習(xí) Python/R 語言。如果你要開發(fā) Android App,就學(xué) Java/Kotlin。 如果是這樣,按照崗位的要求來學(xué)就好了。 這個也取決于實(shí)際情況。每一門編程語言都有自己的優(yōu)點(diǎn)和不足。適合用來處理所有任務(wù)的編程語言是不存在的。如果存在,我們只需要學(xué)習(xí)一門就夠了,不是嗎?記住,這個世界上沒有萬靈丹。 對于我個人而言,我最喜歡的語言是 C 語言 /Ruby/Lua/OCaml。 有人說,在掌握 5 門編程語言之前,不要把自己當(dāng)成高級程序員。當(dāng)正如之前所說的,不要專注于學(xué)習(xí)更多的編程語言,而是試著學(xué)習(xí)更多的編程語言概念和設(shè)計原則。 如果你在工作中使用的是結(jié)構(gòu)化的編程語言,為什么不試著學(xué)習(xí)一門函數(shù)式編程語言?如果你的語言是動態(tài)類型的,為什么不試著學(xué)習(xí)一門靜態(tài)類型的語言? 參考鏈接: https:///how-to-learn-all-programming-languages-yes-all-c41j3t8l |
|
來自: 西北望msm66g9f > 《編程》