2015年7月5日 星期日

The C++ Programming Language 國際中文版 第四版 勘誤

其實好幾年前,大約是 Modern C++ Design 讀了一半的時候,我就放棄學習 C++ 進階技術了。倒也不是看不懂,那些技術很巧妙、確實能解決某些其他語言不易解決的實際問題沒錯,但覺得用那些技術寫程式也末免太迂迴。

舉個比較簡單的例子:用 static_assert<> 來檢查 compile time 的問題。compiler 不認得什麼是 static_assert,就乖乖的把 template 展開;視 static_assert 怎麼寫的,展開之後可能發現某 class 有問題或是陣列宣告不合語法,於是吐出一堆 template 具現化失敗的錯誤訊息。

我的意思是說,一個很 high level 的目的(也許是 static_assert,也許是判斷某個 type 是不是繼承另一個 type,或判斷 template 參數的個數……),但 compiler 不認得,寫的人只好用一堆 low level 的東西湊出那個意圖,叫 compiler 去一堆 header 檔裡找 template 定義、template matching、推導、instantiation,層層疊疊,寫的人辛苦,compiler 也花一堆時間照做,若不小心寫錯,還吐出天書一般的錯誤訊息。整個就是事倍功半。簡直是為了解決一個問題結果製造更多問題。
 (p.s. static_cast 已經在 C++11 成為語言的一部分了)

話雖如此,無論是工作還是自己寫東西自娛,我還是常常用 C++。這陣子越來越常看到有人用新的 C++ 語法,自己也開始用。雖然還不太懂整個 C++11 C++14,但就看到的部分,覺得新的 C++ 修正了許多原本的不足,也有嘗試改善前面我提到的問題。難怪有看到文章說,很多 C++ programmer 因為 C++11 對 C++ 好感度提升了。

最近看到 The C++ Programming Language 第四版的中文版剛出,就買了一本來看,想比較有系統的學學 C++ 的新東西。目前只讀了前幾章導覽的部份,覺得組織得比第三版好(其實很薄弱的印象,畢竟好幾年前讀的了)。作者 Bjarne Stroustrup 也更強調這本不是給初學者的教材,初學者應該讀他寫的另一本 Programming -- Principles and Practice Using C++。(我前陣子忘了這件事,竟然還推薦一個初學者,還好他沒聽我的話 XD)

第四版翻譯的品質沒第三版葉秉哲的那麼好。文句算通順沒問題,有些譯名不習慣還可以接受,但是錯譯不算少。讀到令人困惑之處再找原文比對,通常會發現是翻譯錯誤。整體來說,翻譯得還可以,希望出版社/譯者能花更多工夫確保書籍的正確性。原本讀中文版是想偷懶節省時間,但我查找原文比對,還做了勘誤表向譯者回報問題,最終可能沒省下太多時間 :(

以下是我自己做的勘誤表(若我有空繼續讀的話,會持續更新)
https://docs.google.com/spreadsheets/d/1d3yOOVuhAHSla6LKQLZ9QHdu1hKgGegaXO7Np5PlIV8/edit?usp=sharing
譯者在出版社的書籍網頁最下面有提供勘誤下載(err, 為什麼不是網頁,為什麼是 docx…),目前好像都是我回報的 :P (不過譯者並沒有100%接受我的建議)