作者:Soroush Khanlou,原文鏈接,原文日期:2016-6-27
譯者:X140Yu;校對(duì):Crystal Sun;定稿:CMB
有一些剛剛開始編程的人會(huì)問(wèn)我,如何才能從寫代碼轉(zhuǎn)變成寫漂亮的代碼,為此,我會(huì)推薦一些書,對(duì)于剛開始編程的菜鳥來(lái)說(shuō),這些書非常贊。對(duì)于像我這種已經(jīng)有幾年編程經(jīng)驗(yàn)的老鳥來(lái)說(shuō),仍能從中學(xué)到東西。這些書有很大一部分都是用其他語(yǔ)言如 C、Ruby 或者 Java 寫的,讀這些書可能是個(gè)不小的挑戰(zhàn)。還好在大多數(shù)情況下,任何編程語(yǔ)言都可以清晰表達(dá)編程思想,況且早點(diǎn)培養(yǎng)多語(yǔ)言編程技能也不是一件壞事。
Practical Object-Oriented Design in Ruby
作者 Sandi Metz
長(zhǎng)時(shí)間關(guān)注我的讀者都了解我對(duì) Sandi Metz 的偏愛(ài)。我覺(jué)得她做的最棒的事情就是給聰明人解釋簡(jiǎn)單的概念,本書也不例外。
她用修自行車來(lái)類比面向?qū)ο?,從只包含一個(gè)方法的對(duì)象開始完整地實(shí)現(xiàn)Fowler在Refactoring一書中介紹的“用多態(tài)模式替換條件表達(dá)式”。這本書并不是一下扔給你一大堆概念,而是循序漸進(jìn)由淺入深地進(jìn)行講解。
Design Patterns
作者 Gamma、Helm、Johnson 和 Vlissides
這四位作者被大家稱為「四劍客」,這本書出版于 1994 年。是第一本介紹常見的設(shè)計(jì)模式的書,講述什么時(shí)候應(yīng)該如何使用這些設(shè)計(jì)模式,附帶使用示例代碼。我推薦的幾本書都是這種類型的,雖然看起來(lái)很像教科書,但也能可以讀普通書那樣快速翻閱,當(dāng)要使用某個(gè)設(shè)計(jì)模式時(shí),就知道應(yīng)該跳到哪一章來(lái)獲取需要的詳細(xì)知識(shí)了。
這本書創(chuàng)作于在桌面應(yīng)用時(shí)代,其中的一些設(shè)計(jì)模式也是針對(duì)那個(gè)時(shí)代的。比如命令模式,對(duì)于菜單中沒(méi)有功能,使用命令行非常有用。但是這些動(dòng)作場(chǎng)景在 iOS 和 Web 開發(fā)中很難見到,所以命令模式可能有點(diǎn)過(guò)時(shí)了。但是設(shè)計(jì)模式解決問(wèn)題的過(guò)程,有助于為你自己的問(wèn)題想出有創(chuàng)造力的解決方法。
Patterns of Enterprise Application Architecture
作者 Martin Fowler
上一本書創(chuàng)造于桌面圖形應(yīng)用的時(shí)代,而這本書誕生于 Web 年代。書名看起來(lái)很枯燥,不過(guò)我發(fā)現(xiàn)此書包含了一系列有用的模式。讀起來(lái)就像在實(shí)現(xiàn)一個(gè)類似于 Ruby on Rails 框架食譜,所以如果說(shuō) DHH 在寫 Ruby on Rails 框架之前讀過(guò)這本書,我也不會(huì)感到驚訝。
這些模式,已被用在 Web 的表單、HTML和數(shù)據(jù)庫(kù)中。前兩類很有趣,數(shù)據(jù)庫(kù)模式還可以用于編寫現(xiàn)代的 iOS 應(yīng)用。如果你想了解一下類似于 Core Data(或者 ActiveRecord)的 ORM 是如何實(shí)現(xiàn)的,那可以看看這本書。比如,Core Data 使用了標(biāo)識(shí)映射、延遲加載、元數(shù)據(jù)映射和查詢對(duì)象等模式。像「四劍客」寫的那本書一樣,在寫代碼時(shí)雖然我們不會(huì)用到書中所有的模式,但是作者解決問(wèn)題的這個(gè)過(guò)程,還是很令人興奮的。
Refactoring
作者 Martin Fowler
這本書也是由 Martin Fowler 編寫的。它給重構(gòu)下了一個(gè)準(zhǔn)確的定義:
有人問(wèn)我,“難道重構(gòu)只是清理代碼?”,在某種程度上,答案是肯定的,但我覺(jué)得重構(gòu)更進(jìn)了一步,因?yàn)樗鼮榍謇泶a提供了一個(gè)更加高效和更為可控的方式。
這本書還介紹了,重構(gòu)是如何融入通常的軟件開發(fā)過(guò)程中的:
使用重構(gòu)來(lái)開發(fā)軟件,需要把時(shí)間分為兩個(gè)部分:添加功能和重構(gòu)。添加的新功能時(shí),不應(yīng)該改變現(xiàn)有的代碼;你只是添加新的功能。
在介紹和定義了重構(gòu)之后,F(xiàn)owler 深入講解了一系列重構(gòu)的例子。從抽取方法這種簡(jiǎn)單的開始,然后逐漸深入到類似引入空對(duì)象的重構(gòu)方式。像之前的兩本書一樣,這本書從頭讀到尾也需要花些功夫。
Domain-Driven Design
作者 Eric Evans
之前四本書籍大多介紹模式,這本書有一條小小的敘事線。一個(gè)開發(fā)者和一個(gè)領(lǐng)域的專家,搭建了一個(gè)管理船行程的應(yīng)用。在這個(gè)過(guò)程中,從最初的研究階段到實(shí)際的編碼過(guò)程,你將學(xué)到如何把一個(gè)領(lǐng)域模型化。我從這本書了解到 value types 比 Swift 發(fā)布它的 value types 早了兩年。
作者在程序員和領(lǐng)域?qū)<抑g編造的蘇格拉底式對(duì)話也有助于我們理解。有人認(rèn)為,在一個(gè)理想的世界中,一個(gè)產(chǎn)品經(jīng)理可以在開發(fā)者和利益相關(guān)者之間傳話。而在真實(shí)的世界中,你(作為開發(fā)者)對(duì)于表達(dá)軟件的功能和局限也負(fù)有最終的責(zé)任,這本書展示類似的應(yīng)該是什么樣子。
如何思考 vs 思考什么
這五本書每一本都有各自的價(jià)值——你不僅能學(xué)到書里的知識(shí),還能學(xué)會(huì)如何思考面臨的問(wèn)題。這些書都遵循著同樣的結(jié)構(gòu):提出問(wèn)題,然后給出解決方案。將問(wèn)題和解決方法聯(lián)系起來(lái),能夠看清如何解決的整個(gè)過(guò)程,最終學(xué)會(huì)如何處理其他問(wèn)題。
本文由 SwiftGG 翻譯組翻譯,已經(jīng)獲得作者翻譯授權(quán),最新文章請(qǐng)?jiān)L問(wèn) http://swift.gg。