Qt設計模式(第二版):誰最需要本書?

dbzhang800發表於2012-03-10
  • 情人節前夕,突然受邀作為本書中文版的審校,心中在驚喜之餘,也有些誠惶誠恐。能與閆老師(yfx2003)合作,共同學習與探討,確是一件幸事;但是自己真的能勝任該工作麼?一開始心裡還真是沒底。不過靠著各位譯者的辛勤與認真地工作,本書翻譯工作按時完成,並已交稿。該書究竟如何,我們說了不算,最終還需要大家自己進行評判。只希望一點:在當前國內計算機類圖書魚龍混雜的情況下,本書不至於會讓你失望。

Qt設計模式(第二版),英文名: An Introduction to Design Patterns in C++ with Qt™, 2nd Edition。

對於這樣一本書,我想大家關心的可能就是:

  • 這本書有什麼亮點?
  • 這本書有什麼劣勢?
  • 這本書是否適合我?
  • ... ...

特點?

  • 它是一本在美國Suffolk大學已使用十餘年的C++和Qt教程(當然,其內容也一直在演變)。
    • 這是一本教材,一本C++的教材,所以不要求你有其他先修課程的基礎。
  • 它是Nokia Certified Qt Developer和Nokia Certified Qt Specialist認證的指定參考書籍之一,全書內容基本都是下面3項考試的考點
    • Qt Essentials
    • Widget UI with Qt
    • Core C++ for Qt Developers
  • Qt首席架構師 Lars Knoll(Qt Project的 Chief Maintainer)為之作序。這能說明些問題吧?
  • ...

誰需要這本書?

要搞清這個問題,實在挺難,不過我們可以試著看看它是一本什麼書

這是一本C++和/或Qt的入門書

如果你由於某種原因需要使用Qt,但是卻沒有C++的基礎(一個簡單的判斷標準:比如C++ Primer中的大部分內容都不瞭解)。那麼本書絕對你是所需要的,它藉助短小例子講解C++的基礎概念,但又不涉及那些屬於C++標準,但是對於Qt使用者來說基本不會用到的東西。

如果你在學習C++,而卻正在為C++的自身類庫的侷限性所苦惱。比如:C++98/C++03沒有對unicode提供任何支援,一般只有一個非常含糊的wchar型別可用,儘管C++11和C1X提供了unicode支援,但現在卻仍沒有編譯器支援。比如:C++標準中沒有介面庫,而呼叫系統API來寫圖形介面非常痛苦,而且不能跨平臺。比如:儘管C++的標準模板庫功能相當強大,但是你可能無法容忍這堆東西寫的程式碼,你可以對比STL中的容器和Qt的容器,可以對比C++11中的正規表示式和QT中的正規表示式來感受一些。

如果你正準備學C++,但面對繁多的書籍無所適從,那麼本書是比較適合你的書籍之一(其他值得推薦的書籍也很多,一般來說,翻譯的書籍會比國內原創的要好很多)。如果你學習C++不是為了應付學校的考慮,而是真的想學習些東西,並還想涉足一下跨平臺介面,那麼本書是絕佳選擇。

如果你想學習一下Qt,且有一定的C++基礎;如果你使用過Qt的其他語言繫結,比如PyQt4/PySide等,想涉足C++ Qt;如果你... 。不妨去書店找到本書,然後快速瀏覽,以確定本書是否適合於你。Qt是C++的庫,你對某一語言的掌握可能足以讓你做出決定。

如果你對C++沒有任何興趣,只是想批駁C++和Qt,那麼本書值得買回家(不然,自己不瞭解的東西,怎麼批判呢,對吧?)。

如果你只是想裝扮一下自己的書櫃,...

...

這是一本設計模式的入門書

如果你有一定的C++和Qt的基礎,但是對設計模式不瞭解,也沒有看過 設計模式精解 或 四人幫的設計模式一類的書籍,那麼本書值得你考慮。

如果你對C++和設計模式都沒概念,但只要你有興趣,那麼從本書開始,一塊進行學習吧。

...

這也是一本C++和Qt進階的書

矛盾麼?

說它是入門的書,是因為它介紹都是常用的、有用的,但是比較基礎的內容。說它是進階的書,而因為如果這些你真的都掌握了,那麼你至少會對Qt有全新的瞭解。別忘記,它是Nokia Certified Qt Specialist認證的指定參考書籍之一(儘管,該認證以後有什麼用,以及是否繼續存在,我也不清楚。so, 別問我這方面的問題哈)。

剛跨入Qt門檻的同仁可能會遇到各種比較困惑的問題:比如何時必須要重新qmake,為什麼需要等。本書中包含的各類小技巧和提示,可能會有助於你跨過此類難關。C++是一個非常複雜的語言,很容易讓人有挫敗感!希望你不會被各類小困難嚇倒。

馬上就Qt5,這本書還有用麼?

在看這個訊息時,我也在考慮這個問題:Qt5都都是qml了,C++還有用麼。而最近,似乎心底有了確切的答案。當然需要!

在Qt5中,javascript類語言QML(Qt Meta object Language)將和C++並列作為Qt的一等公民。而且可以預見,將來的Qt的書籍,開篇將是QML開始的例子,這不難理解,畢竟QML比C++簡單很多,也易用很多。

但是當你想稍微深入一點時,那麼你進入的將仍然是C++的世界。這個有點兒類似於(C)Python和C語言的關係,當你出於效能或其他方面的考慮想擴充套件Python,或者在一個C語言程式中嵌入Python程式時,你都是在和C語言和Python的api(也是C介面)打交道。

在Qt中,最突出的特色就是它的原物件系統。而現在,這一特色直接體現在名字中了:QML。

當前社會似乎是非常地浮躁,Qt開發者整體來說已經好很多了(大部分都是靠興趣自學的,而不是通過課堂被灌輸的),但是依然還是有些浮躁,在Qt4時代,突出表現就是搞不清類庫Qt和語言C++的關係,求速成而忽略C++的學習。

在Qt5中,隨著qml的流行,大家可能會更忽視其底層C++的學習,當然這也不見得是個壞事。

劣勢?

金無足赤,人無完人。這本書也是如此

沒有中文相關的內容

當然,這是國外書籍最大的問題之一。比如你看不到:

QTextCodec::setCodecForCString(...);
QTextCodec::setCodecForTr(...);
QTextCodec::setCodecLocale(...);

這種東西。

不過,說實話,這真的是一件好事。因為用這種程式碼的同仁,90%以上肯定都不清楚自己在幹嘛:程式碼是如何作用的,為什麼在簡體的windows上這樣就可以工作,有沒有副作用。[一旦你使用了這種程式碼,你就無法保證程式碼的跨平臺性!]

不過Qt5給大家帶來了好訊息,前兩個函式直接取消了。而第三個,我們可能都清楚,我們在99%以上的情況下都沒有理由會用到它。所以Qt5下,大家基本可以徹底和這3個函式byebye了。

由此一來,C++自身在中文方面(Unicode)的缺陷也直接暴露給大家了。

Qt很多東西沒有涉及

術業有專攻。一本書包羅永珍的書並不適合當教材使用,一般也不適合通讀(當作參考書可能不錯,但是Qt內容更新又太快)

QML相關內容、stylesheet,QtScript、webkit等等,書中都沒有提及。但換句話說,它講解的都是Qt和C++中的核心內容。掌握這部分內容後你可以藉助其他資源對自己感興趣的領域進行學習 (比如Qt5中新增加了大量的模組,全新的多媒體模組、3D模組,等)。

沒有涉及如何為Qt做貢獻

這是最遺憾的,它沒有介紹如何向Qt Project專案提交Bug、提供補丁、參與討論等內容。

當前 qt-project.org 已經完全開放,任何人都可以直接提交補丁,通過郵件列表或IRC頻道(比如#qt-labs等)直接參與討論。


相關文章