天天看點

沒學過C語言的代價

沒學過C語言的代價

c語言确實顯得有些老舊。最近一版權威性的c語言還是1988年釋出的;在接近30年的時間裡,這個語言的作者一直都沒有對它進行過更新,可見它有多過時了。現在,一說到必須有所了解的程式設計語言,大家都會想到rust、go或是clojure,卻很少有人會想到c語言。

但是我的同僚myles和我都不是追求潮流的人,是以我們堅持讓所有學生都熟練掌握c語言。

之是以要求學生學習這門古老的程式設計語言,我們有下面4個理由:

在灣區的web和移動初創企業之外的地方,c語言依然是一個被廣泛應用的程式設計語言;

許多現代程式設計語言都受到了c語言的影響;

c語言能讓你像計算機一樣思考;

在編寫軟體的時候,你現在所使用的大部分工具,都是使用c(或c++)語言所開發的。

對于第一條理由,如果你就是想在灣區的web或是移動初創企業找一份工作的話,你可以忽略它。但是第二條原因是你無法回避的。而大多數工程師,都應該重視第三條理由,要想做好計算機工作,你就必須要了解計算機的思考方式。對于第四條理由,它也是非常難以忽略的。

掌握c語言,意味着你可以更好的了解你所使用的各種工具。例如,對于web開發者來說,他們必須要透徹的了解浏覽器、作業系統以及所使用的各種語言,而這一切都是以c語言為基礎的。

我們的大多數學生,在使用直譯式語言的時候,都會同時使用那些用c語言所編寫的流行的實施工具。我們經常做這樣一個聯系:讓學生們編寫一個python位元組碼解釋器,進而讓他們更好的了解堆棧式機器和直譯式語言;在進行這個練習的時候,學生需要仔細閱讀cpython的部署。另外,ruby的實施參考也是用c語言編寫的,還有大部分javascript部署,他們是用c++編寫的。

在學習hashmaps和動态數組的時候,我們有兩種方式:第一,自己進行部署,使用一種能讓我們具體對記憶體布局進行思考的語言;第二,閱讀相關優秀的部署執行個體。學生要想了解python清單或是ruby數組的工作方式,我們同樣有兩種方式:第一,讓他們從頭自己編寫一個版本;第二,閱讀标準庫部署的資源——在沒有接觸過c語言的情況下,要想徹底了解這些概念,基本上是不可能的事情。

如果不掌握c語言,要想了解作業系統也會變得更加困難。我們現在所使用的大部分作業系統,都是用c語言編寫的,c語言的标準庫與syscall接口緊密相連,而且大部分與作業系統相關的概念都需要你先熟悉c語言。

在計算機網絡方面,雖然對c語言不熟練并不會影響你的日常工作,但是那些要想了解作業系統 tcp/ip 堆棧的從業者,會逐漸意識到c語言的重要性。

最後再來說說資料庫,關鍵值存儲,消息隊列和其他分布式作業系統技術,要想獲得較高的性能,它們都需要你對c語言有所了解。

很多軟體工程師可能對c語言并不了解,在某一個狹小領域内的日常工作,或許并不需要你掌握基礎知識。但是我們要求學生必須要打好基礎,而c語言就是計算機科學工作的先決條件。如果你也有着較高的目标,那麼我建議你暫時擱置那些潮流語言,花幾個周末的時間去學學看上去有些過時的c語言。

作者:ozan onay

來源:51cto