【譯(日)】讀完了《C現代程式設計》!全面的現代C語言嵌入式開發技術!

楊文軒發表於2016-04-14

說明:
-《C現代程式設計》終於出版了,這裡隨手翻譯一份日本網友的讀書感想,算是對本書的推薦。希望能幫助持幣觀望的朋友下定決心^_^。
《C現代程式設計》
- 原文地址:「モダンC言語プログラミング」を読んだ!C言語の組込みエンジニアのためのモダンテクニックが満載


本書適合嵌入式領域開發人員

本書的適合嵌入式領域開發人員,書中的示例也含有嵌入式的內容。不過好像使用C語言的人幾乎都是嵌入式開發人員。書中介紹瞭如何將現代開發方法引入到嵌入式開發過程中。

通過檢視TIOBE的程式語言統計可以發現使用C語言進行程式設計的程式設計師佔到了兩成左右。我也是第一次知道這個資料,作為C程式設計師由衷地感到高興。書中首先分析了C語言為何這麼重要。
● www.tiobe.com/content/paperinfo/tpci/index.html

本書的內容

雖然我希望在內容上能夠更加深入些,但實際上各章的內容雖廣但不深,感覺與本書的宗旨略有不符。(譯者注:我可以不小心漏譯這句話嗎?^_^)

本書所講解的內容正是我在每天的開發工作中所煩惱問題,因此讀完後非常激動。下面將我每章的讀書筆記進行了整理和彙總。

開發環境

關於開發環境,本書講解了Ubuntu(譯者注:實際上是Xubuntu)的安裝方法和Eclipse的使用方法。到目前為止好像沒什麼收穫。以下是一些參考資料:

● 全C/C++ プログラマに捧ぐ!Eclipse CDTを使う時のオススメ機能/プラグインまとめ | Futurismo
● Windows上のCentOSをVmwarePlayerからVirtualBoxへ移行した手順 | Futurismo
● WindowsでVMware Player上のUbuntuを動かしてみたメモ | Futurismo

物件導向程式設計

本書介紹了使用C語言進行物件導向程式設計的技巧。我自己原本對此一知半解,作者教會了我們使用C語言也是可以進行物件導向程式設計的。

如果想要學習C語言物件導向程式設計,本書再合適不過了。當然,我也推薦下面這本書:
● C言語によるオブジェクト指向プログラミング入門
C語言物件導向程式設計入門

設計模式

自己明年(譯者注:這篇文章寫於2013年底,現在作者應該是設計模式高手了吧^_^)重點學習的目標之一就是要掌握設計模式。本書介紹了使用C語言實現設計模式的方法。我對本章中的知識瞭解不多,因此非常感興趣。

本章介紹了以下設計模式:

⚫︎  狀態模式
⚫︎  模板方法模式
⚫︎  觀察者模式
⚫︎  職責鏈模式
⚫︎  訪問者模式

我還沒有看到過其他介紹C語言設計模式的日語書籍。在我看過的書中,本書可能是最好的。下面這本書雖然我還沒有讀過,但今後我打算也學習一下。

● Patterns in C by Adam Petersen Tornhill [Leanpub PDF/iPad/Kindle]

不管怎樣,我都會再學習一遍本章中的內容。

TDD與重構

本書介紹了測試框架GoogleTest。另外,本書還以嵌入式例項講解了如何針對遺留程式碼進行重構。當然,作者也分析對效能問題的影響。

書中還介紹了利用namespace強制包含static函式來對其進行測試的技巧。該技巧同樣適用於C++的單元測試中。

namespace unit_test {
    #include "hogehoge.c"

    TEST(hoge,hogehoge) {
        EXPECT_EQ(3, hoge(1, 2));
    }
}

書中談及的mock和stub的定義與我的理解有些差異就算了,但是書中說沒有好的Mock測試框架,這一點我就不同意。不是有CMock和fff嗎?(譯者注:關鍵是怎麼理解這“好框架”這幾個字^_^)

● 恐るべきレガシーコードの救世主になるか?!ドロドロ依存なモジュールたちを『CMock』ですっ裸にする | Futurismo
● レガシーコードをC言語のTDD用フレームワーク『Fake Function Framework (fff)』ですっぽんぽんにする | Futurismo

如果你想用C語言進行TDD開發,那麼下面這本本書不容錯過。
● テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で學ぶアジャイルな設計
C語言測試驅動開發

持續整合

本章介紹了jenkins,這部分也沒有什麼新東西。
● C言語/C++でJenkins実踐入門してみるよ | Futurismo

本章介紹了使用sCons編寫構建指令碼。最讓我有感觸的是用冒煙測試中用到Python程式碼連線串列埠進行驗收測試。作者可能喜歡用Python吧。我打算用ruby也這麼試一下。

● C言語のビルドでほのぼのrakeでmakeするよ | Futurismo
● 組込み開発のシステムテスト・機能テストを自動化できるか?Rubyのminitestで非同期テストを実施する方法を本気出して考えてみた | Futurismo
● これぞテストの最終形態!FitNesseとRubySlimで実現するエンドツーエンドテスト | Futurismo

另外,本章還花了不少篇幅介紹在嵌入式開發過程中使用Valgrind排查記憶體洩漏和訪問非法記憶體地址等問題的方法。Valgrind是Linux上的工具,所以我還沒有用過(譯者注:作者可能是在Win上進行嵌入式開發的,不過你至少應該玩下虛擬機器吧^_^),不過我打算查閱下相關資料。
● 地獄の苦しみ、メモリ破壊をCppcheckで華麗に食い止めよう! | Futurismo

總結

為什麼在嵌入式開發領域這些技術沒有普及呢?Eclipse沒有普及也就算了。畢竟就程式碼編輯器而言,不是隻有Eclipse,Emacs和Vim並不比Eclipse差。

物件導向程式設計和設計模式沒有普及可能是因為擔心效能問題。而TDD(特別是Mock) 只有在進行物件導向程式設計時更容易實施。CI沒有普及則可能是程式設計文化的原因。

⚫︎ C程式設計師中固守傳統思想的人太多了
⚫︎ 認為維護遺留系統不需要新技術
⚫︎ 認為遺留程式碼是以過去的開發手法編寫的程式碼,沿用這些程式碼時不適合新的技術

話雖如此,但沒有一條理由是足夠充分的。我認為歸結為一點就是 “缺少新技術的相關知識”。

我自己也收集過一些C語言的相關資訊,個人感覺與其他程式語言相比,C語言的資訊差了幾個數量級。Eclipse也一樣,TDD也一樣,Jenkins也一樣。

對於C程式設計師而言缺少的是指引方向的資訊和書籍。C語言可是使用率第一的程式語言啊(譯者注:已經排名第二了,淚)!希望今後可以看到更多這樣的書籍!

相關文章