久久久精品2019免费观看_亚洲国产精品成人久久久_69国产成人综合久久精品91_国产精品久久精品视

如何掌握所有的編程語(yǔ)言?

我想在這里討論的不是如何掌握一門(mén)編程語(yǔ)言,而是掌握所有的編程語(yǔ)言。

許多初學(xué)者會(huì)寫(xiě)信給我,問(wèn)我應(yīng)該學(xué)習(xí)哪種編程語(yǔ)言,以及如何學(xué)習(xí)編程語(yǔ)言。起初我總覺(jué)得這個(gè)問(wèn)題太低級(jí)。但是漸漸地,我發(fā)現(xiàn)不僅是初學(xué)者,即便是許多知名科技公司的高級(jí)工程師實(shí)際上也對(duì)這個(gè)問(wèn)題頗為不解。

今天,我打算花點(diǎn)時(shí)間回答這個(gè)擱置了很久的“低級(jí)”問(wèn)題。我也希望與更多開(kāi)發(fā)者分享我的想法。

如果你有以下幾種困惑,那么本文會(huì)對(duì)您所有幫助:

你是初學(xué)者,不知道選擇哪門(mén)語(yǔ)言入門(mén)。

你是高級(jí)程序員或團(tuán)隊(duì)負(fù)責(zé)人,但你對(duì)新興語(yǔ)言感到困惑,不知道該投資哪門(mén)語(yǔ)言。

你的團(tuán)隊(duì)針對(duì)使用哪門(mén)語(yǔ)言爭(zhēng)論不休,甚至發(fā)生了一些不必要的沖突。

你選用了一些時(shí)尚的編程語(yǔ)言,但是兩個(gè)月后發(fā)現(xiàn)它們都很坑。

就我個(gè)人而言,如果遇到?jīng)]見(jiàn)過(guò)的語(yǔ)言,我會(huì)直接使用,而不會(huì)花很長(zhǎng)時(shí)間學(xué)習(xí)。閱讀本文后,也許你會(huì)明白為什么我可以做到這一點(diǎn)。通過(guò)了解語(yǔ)言的特征,每個(gè)程序員都可以像我一樣實(shí)現(xiàn)這個(gè)目標(biāo)。至少我希望如此。

▌關(guān)注語(yǔ)言的特征,而非語(yǔ)言本身

許多開(kāi)發(fā)人員很在意他們或別人是否可以熟練使用某種語(yǔ)言,他們常常會(huì)對(duì)不同語(yǔ)言的優(yōu)點(diǎn)和缺點(diǎn)爭(zhēng)論不休。然而,對(duì)于我來(lái)說(shuō)這些問(wèn)題都不存在。盡管我撰寫(xiě)了很多批評(píng)語(yǔ)言的文章,但我很少在實(shí)際工作中爭(zhēng)論語(yǔ)言本身。我發(fā)現(xiàn)最根本的原因是相對(duì)于語(yǔ)言本身,我更加重視語(yǔ)言的特征。我可以用任何語(yǔ)言甚至很糟糕的語(yǔ)言寫(xiě)出優(yōu)秀的代碼。

任何語(yǔ)言都是各種語(yǔ)言特征的集合。例如,編程語(yǔ)言就像一臺(tái)計(jì)算機(jī)。其品牌可能是IBM、戴爾或蘋(píng)果。但是,你能說(shuō)蘋(píng)果的

對(duì)于編程語(yǔ)言來(lái)說(shuō),這些計(jì)算機(jī)的配置則等同于語(yǔ)言特征。以下是語(yǔ)言特征的一些例子:

  • 變量定義
  • 數(shù)學(xué)運(yùn)算
  • for循環(huán)語(yǔ)句,while循環(huán)語(yǔ)句
  • 函數(shù)定義,函數(shù)調(diào)用
  • 遞歸
  • 靜態(tài)類(lèi)型系統(tǒng)
  • 類(lèi)型推斷
  • Lambda表達(dá)式
  • 面向?qū)ο?/li>
  • 垃圾收集
  • 指針運(yùn)算
  • Goto語(yǔ)句

語(yǔ)言特征與計(jì)算機(jī)配置類(lèi)似。在選擇計(jì)算機(jī)的時(shí)候,沒(méi)人會(huì)說(shuō)戴爾的計(jì)算機(jī)就一定是最好的,他們會(huì)說(shuō)這臺(tái)計(jì)算機(jī)的CPU是Intel i7處理器,比i5好,DDR3的內(nèi)存比DDR2快很多,SSD硬盤(pán)的讀寫(xiě)速度比普通硬盤(pán)快很多,ATI的顯卡性能很差,等等。

編程語(yǔ)言也是如此。每種語(yǔ)言都有一組通用的特征,例如變量、函數(shù)、條件語(yǔ)句和循環(huán)語(yǔ)句。只要你學(xué)習(xí)一種編程語(yǔ)言,并掌握基本概念,就可以將這些知識(shí)應(yīng)用到其他語(yǔ)言中。因此,我們可以掌握語(yǔ)言的特征,而不用浪費(fèi)時(shí)間來(lái)選擇語(yǔ)言。

當(dāng)一個(gè)聰明的程序員開(kāi)始接觸一種新的編程語(yǔ)言時(shí),他們通常不會(huì)花費(fèi)很多時(shí)間閱讀語(yǔ)言的手冊(cè)或書(shū)籍,而是選擇直接使用該語(yǔ)言來(lái)解決實(shí)際問(wèn)題。例如,我用R語(yǔ)言執(zhí)行一些復(fù)雜計(jì)算時(shí)遇到了一個(gè)問(wèn)題。首先我會(huì)花幾分鐘瀏覽R語(yǔ)言手冊(cè),了解該語(yǔ)言的特征。然后我會(huì)從網(wǎng)上找到與該問(wèn)題相關(guān)的R語(yǔ)言的程序,并對(duì)其進(jìn)行修改,直到解決問(wèn)題。在解決問(wèn)題的過(guò)程中,你可以很快掌握該語(yǔ)言。

▌選擇一門(mén)合適的入門(mén)語(yǔ)言

作為初學(xué)者,你應(yīng)該選擇一門(mén)沒(méi)有明顯缺陷的合適的編程語(yǔ)言。首先你應(yīng)該掌握這門(mén)語(yǔ)言的特征,然后將這些語(yǔ)言特征應(yīng)用到其他編程語(yǔ)言上。哪種語(yǔ)言作為入門(mén)最合適呢?我個(gè)人認(rèn)為可以從下列語(yǔ)言著手:

  • Scheme
  • C
  • Java
  • Python
  • JavaScript

相反,我不推薦用下列語(yǔ)言作為入門(mén):

  • Shell
  • PowerShell
  • AWK
  • Perl
  • PHP
  • Basic
  • Go

一般來(lái)說(shuō),不應(yīng)該使用腳本語(yǔ)言作為入門(mén)語(yǔ)言,尤其是那些源自早期的Unix系統(tǒng)的語(yǔ)言。雖然與Unix shell相比,PowerShell有所改進(jìn),但它依然沒(méi)有擺脫腳本語(yǔ)言的根本問(wèn)題——他們的設(shè)計(jì)者不知道自己在干什么。

初學(xué)者利用腳本語(yǔ)言學(xué)習(xí)編程時(shí)無(wú)法掌握到關(guān)鍵點(diǎn),這是一個(gè)非常嚴(yán)重的問(wèn)題。腳本語(yǔ)言經(jīng)常會(huì)將一些系統(tǒng)工具的知識(shí)(例如正則表達(dá)式、互聯(lián)網(wǎng)等)添加到語(yǔ)法中,這不僅浪費(fèi)了初學(xué)者的很多時(shí)間,而且導(dǎo)致他們無(wú)法真正掌握編程最關(guān)鍵的概念:變量、函數(shù)、遞歸、類(lèi)型等等。

▌?wù)莆贞P(guān)鍵特征,忽略次要特征

初學(xué)者應(yīng)該關(guān)注編程語(yǔ)言最關(guān)鍵的特征,而不要為次要內(nèi)容分神。我發(fā)現(xiàn)在許多編程課的開(kāi)頭,經(jīng)常有學(xué)生在學(xué)習(xí)用“printf”函數(shù)輸出“Hello World!”時(shí),老師要求他們記住“printf”函數(shù)的諸多復(fù)雜的輸出格式,例如%d、%F、 %. 2f等等。

然而,眾所周知,輸入和輸出操作根本不是語(yǔ)言的主要部分。與核心的特征相比,這都是次要的。一些初學(xué)者在學(xué)習(xí)了幾周的Java后,仍然對(duì)“printf”功能感到惱火。雖然他們寫(xiě)了幾百行“printf”函數(shù),但仍然不明白變量和函數(shù)是什么,甚至不知道如何使用算數(shù)語(yǔ)句和循環(huán)語(yǔ)句!

許多初學(xué)者認(rèn)為編程很難學(xué)的最大的一個(gè)原因是,他們以為記不住%d、%F、 %. 2f就不可能深入學(xué)習(xí)!

▌自己動(dòng)手實(shí)現(xiàn)語(yǔ)言的特征

在學(xué)習(xí)了基本的語(yǔ)言特征并使用它們編寫(xiě)代碼之后,下一步就是實(shí)現(xiàn)這些特征。只有你動(dòng)手實(shí)現(xiàn)不同的語(yǔ)言特征,才能算是完全掌握了它們。

一位編程大師曾經(jīng)說(shuō)過(guò),理解一門(mén)編程語(yǔ)言的最佳方式是自己動(dòng)手實(shí)現(xiàn)它,這意味著你需要編寫(xiě)一個(gè)解釋器來(lái)實(shí)現(xiàn)它的語(yǔ)義。但是我認(rèn)為可以對(duì)這句話(huà)做略微的改動(dòng):完全掌握語(yǔ)言的一個(gè)特征的最佳方式是自己動(dòng)手實(shí)現(xiàn)它。你不需要實(shí)現(xiàn)整個(gè)語(yǔ)言,因?yàn)闅w根結(jié)底我們要使用是語(yǔ)言的特征。只要你自己動(dòng)手實(shí)現(xiàn)了語(yǔ)言的一個(gè)特征,那么你就可以掌握所有語(yǔ)言中這個(gè)特征的實(shí)現(xiàn)與使用。

例如,在學(xué)習(xí)SICP時(shí),很多人可能會(huì)選擇使用Scheme來(lái)實(shí)現(xiàn)一個(gè)面向?qū)ο笙到y(tǒng)。面向?qū)ο笙到y(tǒng)的Scheme的語(yǔ)法與其他語(yǔ)言(如Java、C ++、Python等)有很大的不同。但是,它可以幫助你理解所有面向?qū)ο螅∣OP)語(yǔ)言中面向?qū)ο蟮母拍?。它甚至可以幫助你理解各種面向?qū)ο髮?shí)現(xiàn)方法之間的差異。

直接學(xué)習(xí)面向?qū)ο缶幊陶Z(yǔ)言無(wú)法掌握這一點(diǎn),因?yàn)樵谀銓W(xué)習(xí)Java、C ++、Python等語(yǔ)言時(shí),你只是一個(gè)用戶(hù),在使用Scheme親自動(dòng)手實(shí)現(xiàn)面向?qū)ο笙到y(tǒng)之后,你就成為了創(chuàng)造者。

▌總結(jié)

無(wú)論是初學(xué)者還是高級(jí)程序員,你都應(yīng)該更加關(guān)注語(yǔ)言的特征,而不是使用哪種語(yǔ)言。只有這樣,你才能快速掌握新語(yǔ)言并編寫(xiě)高質(zhì)量的代碼。

 

未經(jīng)允許不得轉(zhuǎn)載:445IT之家 » 如何掌握所有的編程語(yǔ)言?

贊 (1) 打賞

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

微信掃一掃打賞