June 16 23:11~23:59
前幾天收到出版社贈送的一本書《我的程式碼會說話》,書名取得很好,程式碼的確會說話,而且大部分說的都是「髒話」。
收到出版社送的書,很高興。但是也有一個小困擾,雖然對方沒有要求,但是收到贈書,禮貌上應該要抽空讀一下,幫忙在部落格上介紹一下。但是最近實在是太忙了,一方面是公司要搬家,花了Teddy很多時間,另一方面這一個多月以來頸椎不舒服的老毛病又犯了,一個禮拜要去復健5~6天,也不敢花太多時間看書,因為低頭太久脖子會不舒服。
***
昨天晚上無意間翻到這本書第6.2小節:「例外」,看到這兩個關鍵字Teddy的眼睛就亮了起來。快速讀一下這一小節,書中提到「在Java中,繼承自RuntimeException的都是UncheckedException,而其他的則都是CheckedException」。疑!那Error跑去哪裡了?請參考下圖,RuntimeException和Error都是Unchecked Exception。嚴格講起來,書上對於checked與unchecked exception的這句描述是錯的。
後來翻到這本書的審校序,發現作者是大陸同胞。這一點引起Teddy的「大家來找碴好奇心」,花了一小時快速瀏覽一下,看看書中還有沒有什麼很明顯的「嫌疑犯」。
- 4.1.2繼承—在程式碼中建構繼承關係是為了「提高程式碼的重複使用性」:這句有問題,早期的物件導向觀念,繼承的目的的確是為了重複使用程式碼。但後來這種說法已經慢慢被推翻,繼承的主要目的應該是polymorphism,而不是code reuse。參考〈什麼是物件導向(4):Inheritance〉
- P106頁—不要catch基本的Exception,catch基本的Exception意味著那些UncheckedException也被catch了:這句也有問題,捕捉unchecked exception並無不可,只要這個unchecked exception具備recoverable exception(可恢復例外)的語意即可。基本的Exception也不是不能捕捉,捕捉基本Exception的做法稱為「blanket catch」,有其特定的用途。關於這兩點的詳細說明,可參考Teddy的新書《笑談軟體工程:例外處理設計的逆襲》。
- P112:關於Flyweight、Interpreter、State等pattern的說明,都有點怪怪的。
***
因為只花一小時,而且是以「找碴」的心態來看這本書,所以今天只能大略提幾點比較明顯可能有爭議之處。日後有時間再來戴上「推薦」的眼鏡,介紹值得參考的地方。
***
友藏內心獨白:寫書還是要嚴謹一點的好。
沒錯,在寫一些有關技術觀念的書真的要嚴謹,這一點我與老師心有戚戚焉.自己會錯意不打緊,誤人子弟是罪過阿....
回覆刪除