現在回想起來,其實路一直都在,而且有很多條,當初如果有人能夠指出一條還不錯的道,或許就能走得不那麼艱難。於是就有了這篇文章,希望對後人能有所幫助吧。
一定的程式設計經驗
這裡說的程式設計經驗是至少熟練一門程式語言,對 oop 有一定的了解,最好熟悉一些基本的設計模式。遇到過的好多 ios 開發,大多是從別的語言轉過來的,所以有一定的程式設計基礎,學起來會更容易 get the point.
如果是第一次接觸程式設計,當然也是沒問題的,只是要做好心理準備,可能會比想象的難。
英語書籍
要學習 ios 開發,自然要先學 objective-c (當然現在也可以直接上 swift,不過如果多人協作的話,oc目前還是主流),因為 oc 是 c 語言的超集,所以了解 c 語言對於學習 oc 肯定會有幫助,不過就算不了解,直接學 oc 也沒太大問題。
這裡推薦 bnr (big nerd ranch) 的這本 objective-c programming the big nerd ranch guide,講解地比較細緻,能幫助你更好的理解 oc,更重要的是教你遇到問題時,如何去解決問題,以及這個問題對應的一些知識點,如何使用文件等等。
所以一本好的入門教材很重要,要契合自己當前的水平,且常常會有收穫,這種成就感會激勵著你繼續學下去。
在看書的過程中,往往會有這樣的經歷:書中提到某個人、觀點、知識點、書、文章,然後就順著它提到的這些東西出去了,可能某個知識點又牽扯到另一些內容,然後就這樣越走越遠。想起了乙個故事
三隻獵狗追乙隻土拔鼠,土拔鼠逃跑時鑽進了乙個樹洞。這個樹洞只有乙個出口,不一會兒,忽然從樹洞裡跑出乙隻兔子。兔子飛快地向前跑,並爬上另一棵大樹。兔子因為慌亂在樹上沒站穩,掉了下來,砸暈了正仰頭看的三隻獵狗,最後,兔子終於逃脫。
對於這個故事可以從不同的角度去解讀,我更願意以初心去解讀。兔子為什麼會爬樹?為什麼能砸暈三隻獵狗?這不是重點,重點是,之前追趕的土撥鼠哪去了?看書時難免會有延伸閱讀,這個深度我覺得不宜超過 2 層,不然很容易就回不來了。
還有就是如果有可能,最好每天都看點,這其實是很難的,因為總是會有優先順序更高的事,或者之前的某些習慣在干擾。一旦斷了幾天,就不想再拿起來了。
同時推薦一本小冊子:objc-zen-book,花不長時間就能看完,裡面是一些 best practices,對於編寫優質**會很有幫助。
筆記記筆記可以加深對知識點的理解,而成為程式設計巨星的唯一秘訣就是:對所做的事情理解地越深,就會做得越好。同時如果遵循遺忘曲線去複習的話,效果更佳。對知識點了解地足夠透徹後,debug 時才更有可能知道問題出在哪,解決問題也更容易有思路。
筆記不僅可以記知識點,也可以記錄除錯過程,比如這篇筆記,有一種除錯方法:小黃鴨除錯法
許多程式設計師都有過向別人(甚至可能向完全不會程式設計的人)提問及解釋程式設計問題,就在解釋的過程中擊中了問題的解決方案。一邊闡述**的意圖一邊觀察它實際上的意圖並做除錯,這兩者之間的任何不協調會變得很明顯,並且更容易發現自己的錯誤。
生活中我們可能不會真的這麼去做,這時抽離出另乙個自己,記錄下跟ta的對話,也是個發現問題的好方法。
練習這也是乙個持續的過程,知道了些概念或原理後,總是會想著去驗證下是不是這樣,無論結果是否如自己預期,實踐的過程會降低對語言的陌生感,慢慢地培養一種駕馭這門語言的自信,如果出了錯,正好可以重新梳理一下。
目標入門之後,接下來可以折騰的東西還會有不少。
書籍ios programming: the big nerd ranch guide (4th edition),又是一本 bnr 的書,這本書的特點是通過 demo 來引出知識點,然後提一些問題,並且會細說解題思路。看書的過程中,對於元學習能力的提公升也會有一定幫助。
--- update ---
發現巧哥的 ios開發高階 已經可以在京東買到了,雖然沒有細看,但巧哥出品質量肯定有保障。
其他資源
進入這個階段後,可以去探索更大的世界了,現在的資源已經很豐富了,但還是要遵循「少而精」的原則。以下是我覺得挺不錯的源
還有,如果可能的話,多去分享自己學到的東西,教是最好的學,我試過幾次,效果真的很不錯。
目標這個階段下來,對於常用的設計模式、記憶體管理、blocks 的使用、影象操作、網路請求和管理、多執行緒應該比較熟悉了。對於 calayer、animation、uiscrollview、uitableview、uicollectionview、viewcontroller container 則非常熟悉,對「非常熟悉」的定義是:不開啟 xcode,腦子裡就能把相應的知識點複述出來 80% ,比如這個類有哪些方法,delegate / datasource 有哪些方法,怎麼使用,如果要實現某個效果,應該怎麼做(好吧, uicollectionview 除外)。
其實高階、高階、入門並沒有嚴格的界限,在入門階段也可以**高階階段的一些東西。我覺得支撐我們不斷探索和前進的動力不是興趣,而是永不滿足的好奇心,和對優雅**的追求。
if your standards are low, you're going to stop pretty early on in the process.
bnr 的這篇 leveling up 已經講得很好了,也更加細緻。
書籍原始碼
看優秀的原始碼,可以學到很多東西,使用過程中遇到問題也更容易解決。這些是我覺得值得細看的原始碼:afnetworking(nsoperation, http, block), sdwebimage(image handle, cache, nsoperation, block),svpulltorefresh(uiscrollview, state handle), jsonmodel(runtime)
資源工具
目標這個階段,對於底層的實現會有更深入的了解,各種 core 開頭的 framework 至少可以說出個大概,工具也能熟練使用,「正經的**」寫過數萬行,可能天天在翻 dash。如果別人讓你實現某個功能,能在較短的時間內給出不錯的實現方案,並且足夠細緻,甚至精細到如何使用 core graphic 去畫某個影象。
我覺得無論學習什麼,「速成」的心態是最要不得的,這只會讓自己變得浮躁,一知半解,整個過程也很難讓自己的元學習能力得到提公升。慢慢來,攻占乙個城後,再去打下乙個,這時心態也會平和許多。
--eof--
自學 iOS 開發的一些經驗
不知不覺作為 ios 開發也有兩年多的時間了,記得當初看到 oc 的語法時,愣是被嚇了回去,隔了好久才重新耐下心去啃一啃。啃了一陣,覺得大概有了點概念,看到 cocoa 那麼多的 class,又懵了,怎麼才能呼叫系統的相機?怎麼儲存資訊?怎麼做乙個像 twitter 個人頁那樣的頁面?總之就是不知道...
自學 iOS 開發的一些經驗
不知不覺作為 ios 開發也有兩年多的時間了,記得當初看到 oc 的語法時,愣是被嚇了回去,隔了好久才重新耐下心去啃一啃。啃了一陣,覺得大概有了點概念,看到 cocoa 那麼多的 class,又懵了,怎麼才能呼叫系統的相機?怎麼儲存資訊?怎麼做乙個像 twitter 個人頁那樣的頁面?總之就是不知道...
自學 iOS 開發的一些經驗
不知不覺作為 ios 開發也有兩年多的時間了,記得當初看到 oc 的語法時,愣是被嚇了回去,隔了好久才重新耐下心去啃一啃。啃了一陣,覺得大概有了點概念,看到 cocoa 那麼多的 class,又懵了,怎麼才能呼叫系統的相機?怎麼儲存資訊?怎麼做乙個像 twitter 個人頁那樣的頁面?總之就是不知道...