小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

如何學(xué)會所有的編程語言?

 西北望msm66g9f 2020-02-27
語言、框架、工具都只是實(shí)現(xiàn)目的的手段,開發(fā)者的核心競爭力是學(xué)習(xí)能力和找到多種實(shí)現(xiàn)方案的本事,這就是本篇文章想告訴你的事。

新手在開始學(xué)習(xí)編程時通常會問這個問題:

“我要從哪一門編程語言開始學(xué)起?”

在學(xué)會了幾門編程語言之后,很多開發(fā)者會問這個問題:

“哪一門編程語言是最好的?”

我將會在這篇文章里給出我的答案。不過,比得到答案更重要的是:掌握學(xué)習(xí)新編程語言的能力。

1 授之以魚不如授之以漁

對于一個編程老手來說,學(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í)踐。

下面讓我來具體解釋一下。

2 如果把編程語言比作汽車

要記住,編程語言只是工具,它們也是由程序員發(fā)明出來的。世界上有幾千種編程語言,其中只有 20 多種在 IT 界里被廣泛使用。如果你稍微想一想,就會發(fā)現(xiàn)這些編程語言有一些共同點(diǎn)。

我們以汽車為例,世界上有很牌子的汽車。有些車子緊湊但動力十足,有些車子笨重開得慢,不同牌子的車子具有不同的駕駛體驗。

如果你知道怎么開其中一種車型,也就知道怎么開其他大部分車型,盡管它們的牌子不一樣。

為什么這么說呢?因為不同牌子的車子有一些共同點(diǎn)——它們都有發(fā)動機(jī)和輪胎。它們的作用都是一樣的:把你送到目的地。

編程語言的作用是幫助程序員表達(dá)想法。

3 為什么會有這么多編程語言

編程語言是一種表達(dá)工具,包含了兩個方面:

  1. 向其他程序員表達(dá)想法,這樣別人就可以了解你寫的代碼,并一起參與代碼維護(hù)。

  2. 把你的想法傳達(dá)給計算機(jī)(通過編譯器或者解釋器),讓計算機(jī)執(zhí)行你的指令。

所以,代碼實(shí)際上就是你傳達(dá)給人類和計算機(jī)的“消息”。這也是在設(shè)計和實(shí)現(xiàn)編程語言時需要考慮的權(quán)衡點(diǎn)。因為:

  1. 硬件和計算機(jī)語言在發(fā)展演化。一般來說,編程語言應(yīng)該越來越容易使用,在表達(dá)想法方面越來越強(qiáng)大。

  2. 隨著計算機(jī)應(yīng)用越來越廣泛,越來越多的領(lǐng)域需要使用計算機(jī),于是不同的編程語言被發(fā)明出來,用于解決不同領(lǐng)域的問題。

  3. 不同的編程語言代表了不同的思維風(fēng)格。

不同的編程語言有不同的語法和特性,但它們都是圖靈完備的。通俗地說就是:所有的編程語言都可以用來實(shí)現(xiàn)任意一種算法。

當(dāng)然,你不需要學(xué)會所有的編程語言,但學(xué)會的編程語言越多,就越容易為要完成的任務(wù)選擇合適的語言。

4 編程語言基礎(chǔ)

幾乎所有的編程語言都包含了幾類元素,它們都與“抽象”有關(guān):

  1. 數(shù)據(jù)類型和數(shù)據(jù)抽象;

  2. 控制流程和控制抽象;

  3. 底層抽象;

  4. 對特定領(lǐng)域的補(bǔ)充和抽象。

編程語言有很多公共特性,因此,我們能夠?qū)W會所有編程語言的主要原因是:編程語言的概念其實(shí)是很有限的。常用的編程語言概念不會超過 15 個:

  • 過程;

  • 遞歸;

  • 靜態(tài)類型;

  • 動態(tài)類型;

  • 類型推斷;

  • lambda 表達(dá)式;

  • 面向?qū)ο螅?/span>

  • 垃圾回收;

  • 指針;

  • 連續(xù)性;

  • 元編程;

  • 宏;

  • 異常。

編程語言的概念基本上是不怎么變的,就像設(shè)計原則一樣。

編程語言的作者們相互借鑒想法,只是實(shí)現(xiàn)不一樣罷了。有時候,我們可以說語言 C 是語言 A 和 B 的兒子,那么整個編程語言的家譜可能像這樣:

理解好這些概念,不僅可以幫你快速學(xué)會編程語言,還會讓你寫出更好的代碼。例如,函數(shù)式編程語言和過程式編程語言的代碼風(fēng)格和抽象方式是非常不一樣的,如果沒有領(lǐng)會到它的重點(diǎn),可能就寫不好代碼。

5 專注在語言概念上,而不是語法

因此,我們要學(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言就會容易得多。

6 自己發(fā)明或?qū)崿F(xiàn)一門編程語言

如果語法不是很復(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í)編程語言的書。

7 學(xué)習(xí)一門新語言的步驟

如果你遵循以下這些步驟,就可以快速“學(xué)會所有的編程語言”。

第一步:理解這門語言的設(shè)計理念和通用的語言特性

例如,如果你要學(xué) Ruby,那就先看一下 Ruby 有什么特別的?

Ruby 是一門開源的動態(tài)編程語言,專注易用性和效率。它的語法很優(yōu)雅,代碼讀起來很自然,寫起來也很自然。

讓我們更深入地看一下:

http://www./en/about/

那么,在學(xué)習(xí) Ruby 之前,需要了解的重點(diǎn)是:

  • Ruby 專注于易用性和效率,代碼容易閱讀;

  • Ruby 是解釋執(zhí)行的,所以使用了 GC,也就是說對于某些任務(wù),性能可能會是個問題;

  • 在 Ruby 中,所有東西都是對象,所以它是面向?qū)ο缶幊陶Z言,而且是純面向?qū)ο蟮模?/p>

  • Ruby 很靈活,我們可以重新定義它的一些東西。

了解這門語言最重要的特性,包括它的優(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。

8 那么,我應(yīng)該先學(xué)哪一門語言?

好吧,現(xiàn)在我們來回答這個問題。這個問題的答案取決于很多因素,但簡單地說就是:

 1:有人教你嗎?或者說你在上編程語言課程嗎?

如果你的老師要你學(xué)習(xí) C 語言,那么 C 語言就是你的第一門需要學(xué)習(xí)的編程語言,因為有人教你,你還有同學(xué),學(xué)習(xí)起來會更容易。

 2:你打算用它來做什么?

如果你要開發(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。

 3:你需要用它來找工作嗎?

如果是這樣,按照崗位的要求來學(xué)就好了。

9 哪一種編程語言是最好的?

這個也取決于實(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


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多