说明:
-《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语言可是使用率第一的编程语言啊(译者注:已经排名第二了,泪)!希望今后可以看到更多这样的书籍!