沒學過C語言的代價

sdk.cn發表於2016-11-16

  本文作者Ozan Onay為Bradfield電腦科學學院教師

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

  但是我的同事Myles和我都不是追求潮流的人,因此我們堅持讓所有學生都熟練掌握C語言。

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

  1.  在灣區的web和移動初創企業之外的地方,C語言依然是一個被廣泛應用的程式語言;
  2.  許多現代程式語言都受到了C語言的影響;
  3.  C語言能讓你像計算機一樣思考;
  4.  在編寫軟體的時候,你現在所使用的大部分工具,都是使用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語言。

相關文章