C 語言程式設計教學:你也許不需要 C 語言

PUBLISHED ON MAY 3, 2018 — PROGRAMMING

如果各位讀者是因一些非語言本身的因素要學 C 語言,像是學校指定用 C 語言寫程式或是個人興趣等,那麼,想學就學,同樣的情境也可以套用在其他的程式語言上。不過,如果是因為單純要學一個程式語言,好像大專院校都用 C (或 C++) 做為學習的工具,那倒不急著跳進來,其實還有很多選擇。

大專院校使用 C 語言,有其考量和歷史因素。除了組合語言,C 語言大概是最貼近電腦的高階語言,C++ 則保留 C 的特質但加入許多更高階的語法特性。對資訊科系的學生來說,除了會資料結構、演算法等抽象的思考方式之外,也要學一些電腦本身的知識,像是作業系統、計算機組織等。像 C (或 C++) 這種同時有高階和低階特性的語言就會是合適的工具。不過,國外也有一些大學開始以 Python 做為入門課程的教學工具,大概是比較好上手吧。

程式碼是用來將程式設計者心中的想法轉為可執行的電腦程式的媒介,隨著市場和需求的差異化,出現許多新的程式語言,原有的程式語言也會持續進化。早期有人會用 C 語言撰寫 CGI 網頁程式,後來很多人轉用 Perl 寫 CGI 程式,但在 PHP 出現後,CGI 大概就成了歷史文物。如果去觀察 TIOBE index,可以發現一些傳統的語言,像是 C、C++、Java 等,雖然排名仍然在前面,但百分比逐漸地下滑,而一部分使用者流向其他的語言。

比起其他的高階語言,C (或 C++) 更像是基礎建設的元件,像是作業系統、驅動程式、編譯器或直譯器、資料庫、伺服器軟體等。很多高階語言的延伸套件,背後也是某個 C (或 C++) 所寫的程式提供實際的核心功能,而 Python 或 R 等高階語言,提供的是相對易於使用的界面。就像我們通常不會直接用 C 語言去處理文字檔案,而會用 C 語言寫處理文字的模組後再由其他高階語言來呼叫,許多程式其實都會混合兩三種語言,只是一些相對困難部分已經有熱心的開發者幫我們處理掉了。

現在的程式語言大抵上是朝著簡單易用的方向前進,僅在關鍵的功能仍然需要 C (或 C++) 來撰寫,甚至也有一些替代的方案來簡化這個部分。像是 Cython 就是用來取代人工撰寫的 C 程式碼,幫 Python 程式加速;同樣的例子還有用來撰寫 PHP 模組的 Zephir。許多語言都發展出 FFI (foreign function interface) 模組,用來取代原生的 C API,其實也可以用 Rust 寫元件,會比直接用 C 來得簡單一些。

有些程式運行環境沒有那麼多運算資源,像是一些嵌入式裝置,這時候,我們沒有太多選擇,甚至 C++ 都顯得過度奢華,大概還是要直接使用 C 來撰寫程式。在少數比較高階的嵌入式裝置,可以放一些比較高貴的運行環境,像是 Java 或 C# 等,但這並不是那些社群的常態。

程式語言基本上就是在效能和易用間做權衡,不同的情境會使用不同的工具,沒有一個語言可適用所有的情境。C (或 C) 的重要性是無庸置疑的,但不一定每個人都要變成 C (或 C++) 達人。我們這系列文章是以學習 C 為出發點,之後的內容會以 C 為主。

TAGS: C 語言
comments powered by Disqus