跳到主要內容

讀書心得: 精通 Objective-C 2.0 程式設計

More about 精通Objective

原文書名: Programming in Objective-C 2.0 (2nd Edition)

以一本程式語言教學的書來說,我給這本書的評價是:水準以上,但是差了那麼一點醍醐味兒。

先談談整體的寫作的風格,可以說平實八穩,依照語言的各種特性,按部就班一個個清楚而且詳細的解釋。內容上本書總共分為三大塊,主題分別是 Objetive-C語言、Foundation Framework (objc的標準函式庫) 以及 Cocoa and iPhone SDK。第三塊的Cocoa只能算淺嘗性質的示範了一個小巧的iPhone程式,全書大部分專注於闡述objc這個"語言",沒有特定侷限於某個平台,對於想快速上手iPhone/iPad開發的人,本書不是個好選擇。

閱讀的過程算相當順暢,除了objc 2.0新增的property我覺得範例過短,必須去網路上搜尋其他資料輔助,大部分都相當清楚作者要傳達的意思。偶爾有一兩句拗口的翻譯句子出現,但整體品質還算相當不錯。全書以數個範例貫穿頭尾,藉由不斷添加功能於其上,引出各式各樣的Objc語言特性,我認為相當好。

本書把Objc當作一個全新的語言來講,而不是C語言的延伸,這對沒學過C的人算是好消息。我個人是已經學了C好多年了,所以這本書到底適不適合完全的新手,我也說不個準。書完全以OO的方式來介紹objc,對於一些舊式C語言的東西如top-level function、pointer並不鼓勵使用。所以全書只留有一章把傳統C語言的特性收集起來做個介紹,算是選讀的章節,沒唸也無傷大雅。這章揭露了一些objc底層的實做,對於熟悉C的人倒是相當有趣的一段。

我說差了點醍醐味兒的原因是我掃完第一遍後,心中有個聲音響起:又一個程式語言!我學的程式語言還不夠多嗎?其實從這本書我對objc的第一印象並不太好,對API函數的命名尤其反感,比如說 Foundation Framework 裡的 NSArray (單純就是個Array class) 存取第三個元素的方法是 [array objectAtIndex 3]; 看到這個方法我差點沒把口中的咖啡噴出來,突然覺得operator overloading真是天上傳來的福音。類似例子多不勝數,例如字串的比對 [str1 isEqualToString str2]; 哎喲,我真的得說服自己在寫程式語言而不是英文作文。

扯遠了,咳,吐槽Objective-C的話題就此打住。總之我認為本書並沒有寫出Objective-C的靈魂來。圖靈獎得主 Alan Perlis 說:「如果一門語言不能影響你寫程式的思維,那它就不值得你去學。」各種語言形形色色,總有它們優秀獨特的地方。但從這本書我看不見Objc為什麼選擇這樣子的語言設計,或者說這樣的特性有什麼好處,比如書裡第九章標題是 Dynamic Typing、Dynamic Biding 書裡寫道『這使它成為很有威力的程式語言,以及辨別它與其他程式語言(如C++)不同之處』,但章節內容舉的例子有如玩具,完全感受不到威力何在。

直到我讀了維基百科的Objective-C條目,才知道原來objc留著Smalltalk的血液,這個程式語言史上赫赫有名的古董。objc採用smalltalk的訊息傳遞(message passing)模型,所以objc帶著一些今日動態語言才有的特性。這樣來看,本書教會了我大部分objc的語法,但維基百科才畫龍點睛般的讓我抓住objc的風格。

就算不傑出,也不能說這本書不好,就是本四平八穩的程式語言入門書吧。

相關連結: Wiki條目 Objective-C

留言

張貼留言

這個網誌中的熱門文章

讀書心得: 你以為你以為的就是你以為的嗎?

當初想要接觸哲學的時候,挑上的第一本書就是「你以為你以為就是你以為的嗎?」,因為書名太好玩了。讀完後發現內容也一樣好玩,整本書的形式有點像坊間流行的心理測驗小書,每章的開頭都要讀者先做一組題目,後面接著就對你的答案做一番分析。 我自己的讀後感是,恩,這些題目對一個以前從未接觸過哲學的人來說太過犀利,第一次作答的時候,每翻過一頁都好像在呼自己巴掌,臉頰很燙。 「你以為你以為就是你以為的嗎?」書名念起來很拗口,但是很貼切,因為這些題目為的是要檢查我們腦袋內的想法是否一致,在邏輯上有沒有BUG。 我舉個例子,書裡有道題目「只要不傷害他人,任何人都有權自由追求自己的目標」要讀者回答同不同意,我認為這句話聽起來相當合理,所以勾了同意。過了幾題後,出現另一道題目是「為個人吸食而持有毒品的行為應予除罪化」,這次我的直覺是毒品這麼危險,怎麼可以除罪化呢,馬上勾不同意。 但是,我沒有發現這是刻意安排的陷阱,因為這兩句話其實講的是同一回事。 單純個人持有毒品,不散佈也不販賣,就不算傷害他人,那他就應該有自由追求自己的「吸食毒品」目標的權利,畢竟他只有傷害自己呀。這敘述聽起來有點危險,不過我必須承認一開始的確想的不夠清楚,我以為第一句話是真理,但馬上被反例打了自己的臉。 再舉一個例子,首先是「對藝術品的評斷,純粹是個人品味的問題」,接著是「米開朗基羅是史上數一數二的偉大藝術家」,這牽涉到評斷藝術的標準,不過你只能認同兩句話的其中之一。 書中我最有興趣的是「神明DIY工作室」與「信仰殺戮戰場」,這兩章擺明了直衝基督徒而來。當中有些問題圍繞著以下的敘述,如果你同意「神是全知、全能、又全然慈愛」,那該怎麼解釋世界上發生的許多苦難呢? 比如說被南亞海嘯淹沒的小女孩? 如果神沒辦法消除這些苦難,祂就不是全能。如果神沒辦法事先知道創造出來的世界會有這些苦難,祂就不是全知。如果神明知道有苦難,也有能力去掉,但是卻故意不做,那祂就不是全然慈愛。 我思考後的結論是,全然慈愛的神並不等於神希望世上的苦難越少越好,這些苦難都是在祂的允許下發生的。 書裡指出了一個基督徒的通病,被問倒了之後就嚷嚷「你不知道神是超越人所理解的嗎 」,但回頭又馬上賦予神非常明確地人的屬性。後來我也理解到這些尖銳的問題並不是故意要為難我對神的看法,而是逼迫我去反思一些比較深層的宗教議題,就像我...

UVa 10125 Sumsets

解題策略 這題的解法很直接,要找d=a+b+c 用四層迴圈下去跑a,b,c,d就好了 XDDDD 我犯了幾個錯誤 要找最大符合d (意思是數列中可能出現好幾個符合要求的解),所以迴圈應該由最大元素往下找,第一個找到的解就是答案,我一開始由最小元素往上遞增尋找,拿了WA。 沒找到解就回傳0,殊不知0也有可能是解: 0 = -5 + 3 + 2,這裡也吃了一個WA,所以我後來改回傳 INT_MAX 作為無解。 這題有負值,所以 -5 = -10 + -2 + 7 ,這樣算一組合法的解。 是比較需要小心的地方。 官網論壇上的(a+b)=(d-c)法,方法複雜很多,卻沒有比較快。