沒(méi)學(xué)過(guò)C語(yǔ)言的代價(jià)
C語(yǔ)言確實(shí)顯得有些老舊。最近一版權(quán)威性的C語(yǔ)言還是1988年發(fā)布的;在接近30年的時(shí)間里,這個(gè)語(yǔ)言的作者一直都沒(méi)有對(duì)它進(jìn)行過(guò)更新,可見(jiàn)它有多過(guò)時(shí)了?,F(xiàn)在,一說(shuō)到必須有所了解的編程語(yǔ)言,大家都會(huì)想到Rust、Go或是Clojure,卻很少有人會(huì)想到C語(yǔ)言。
但是我的同事Myles和我都不是追求潮流的人,因此我們堅(jiān)持讓所有學(xué)生都熟練掌握C語(yǔ)言。
之所以要求學(xué)生學(xué)習(xí)這門(mén)古老的編程語(yǔ)言,我們有下面4個(gè)理由:
- 在灣區(qū)的web和移動(dòng)初創(chuàng)企業(yè)之外的地方,C語(yǔ)言依然是一個(gè)被廣泛應(yīng)用的編程語(yǔ)言;
- 許多現(xiàn)代編程語(yǔ)言都受到了C語(yǔ)言的影響;
- C語(yǔ)言能讓你像計(jì)算機(jī)一樣思考;
- 在編寫(xiě)軟件的時(shí)候,你現(xiàn)在所使用的大部分工具,都是使用C(或C++)語(yǔ)言所開(kāi)發(fā)的。
對(duì)于***條理由,如果你就是想在灣區(qū)的web或是移動(dòng)初創(chuàng)企業(yè)找一份工作的話(huà),你可以忽略它。但是第二條原因是你無(wú)法回避的。而大多數(shù)工程師,都應(yīng)該重視第三條理由,要想做好計(jì)算機(jī)工作,你就必須要理解計(jì)算機(jī)的思考方式。對(duì)于第四條理由,它也是非常難以忽略的。
掌握C語(yǔ)言,意味著你可以更好的理解你所使用的各種工具。例如,對(duì)于web開(kāi)發(fā)者來(lái)說(shuō),他們必須要透徹的理解瀏覽器、操作系統(tǒng)以及所使用的各種語(yǔ)言,而這一切都是以C語(yǔ)言為基礎(chǔ)的。
我們的大多數(shù)學(xué)生,在使用直譯式語(yǔ)言的時(shí)候,都會(huì)同時(shí)使用那些用C語(yǔ)言所編寫(xiě)的流行的實(shí)施工具。我們經(jīng)常做這樣一個(gè)聯(lián)系:讓學(xué)生們編寫(xiě)一個(gè)Python字節(jié)碼解釋器,從而讓他們更好的理解堆棧式機(jī)器和直譯式語(yǔ)言;在進(jìn)行這個(gè)練習(xí)的時(shí)候,學(xué)生需要仔細(xì)閱讀CPython的部署。另外,ruby的實(shí)施參考也是用C語(yǔ)言編寫(xiě)的,還有大部分JavaScript部署,他們是用C++編寫(xiě)的。
在學(xué)習(xí)hashmaps和動(dòng)態(tài)數(shù)組的時(shí)候,我們有兩種方式:***,自己進(jìn)行部署,使用一種能讓我們具體對(duì)內(nèi)存布局進(jìn)行思考的語(yǔ)言;第二,閱讀相關(guān)優(yōu)秀的部署實(shí)例。學(xué)生要想理解Python列表或是ruby數(shù)組的工作方式,我們同樣有兩種方式:***,讓他們從頭自己編寫(xiě)一個(gè)版本;第二,閱讀標(biāo)準(zhǔn)庫(kù)部署的資源——在沒(méi)有接觸過(guò)C語(yǔ)言的情況下,要想徹底理解這些概念,基本上是不可能的事情。
如果不掌握C語(yǔ)言,要想了解操作系統(tǒng)也會(huì)變得更加困難。我們現(xiàn)在所使用的大部分操作系統(tǒng),都是用C語(yǔ)言編寫(xiě)的,C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)與syscall接口緊密相連,而且大部分與操作系統(tǒng)相關(guān)的概念都需要你先熟悉C語(yǔ)言。
在計(jì)算機(jī)網(wǎng)絡(luò)方面,雖然對(duì)C語(yǔ)言不熟練并不會(huì)影響你的日常工作,但是那些要想了解操作系統(tǒng) TCP/IP 堆棧的從業(yè)者,會(huì)逐漸意識(shí)到C語(yǔ)言的重要性。
***再來(lái)說(shuō)說(shuō)數(shù)據(jù)庫(kù),關(guān)鍵值存儲(chǔ),消息隊(duì)列和其他分布式操作系統(tǒng)技術(shù),要想獲得較高的性能,它們都需要你對(duì)C語(yǔ)言有所了解。
很多軟件工程師可能對(duì)C語(yǔ)言并不了解,在某一個(gè)狹小領(lǐng)域內(nèi)的日常工作,或許并不需要你掌握基礎(chǔ)知識(shí)。但是我們要求學(xué)生必須要打好基礎(chǔ),而C語(yǔ)言就是計(jì)算機(jī)科學(xué)工作的先決條件。如果你也有著較高的目標(biāo),那么我建議你暫時(shí)擱置那些潮流語(yǔ)言,花幾個(gè)周末的時(shí)間去學(xué)學(xué)看上去有些過(guò)時(shí)的C語(yǔ)言。