時(shí)光荏苒座菠,轉(zhuǎn)眼 iOS 開(kāi)發(fā)已經(jīng)從最狂熱時(shí)的“人傻狸眼,錢(qián)多,速來(lái)浴滴!”拓萌,變成了如今的“iOS 沒(méi)人要了!”升略。前段時(shí)間也了解到了一些老牌的培訓(xùn)機(jī)構(gòu)已經(jīng)在削減 iOS 班級(jí)的數(shù)量甚至停掉了 iOS 培訓(xùn)班微王。一想到未來(lái)有可能后(zhao)繼(bu)無(wú)(dao)人(ren),我的心中甚是惶恐品嚣。
這就是我寫(xiě)下這篇文章的原因:一方面希望能給在如此艱難的時(shí)期炕倘,仍然選擇做一名 iOS 開(kāi)發(fā)者的萌新們一些指導(dǎo)。另一方面也是對(duì)我之前兩年工作的一個(gè)總結(jié)和反思翰撑,希望能在三年之期激才,自身技術(shù)能夠有所進(jìn)境。
學(xué)習(xí) iOS 開(kāi)發(fā)的方法論
首先需要明白的是额嘿,iOS 開(kāi)發(fā)是工程問(wèn)題瘸恼,而非科研問(wèn)題。每一位 iOS 開(kāi)發(fā)工程師要做的是把現(xiàn)有的工程組件(各種框架)和公司自身的業(yè)務(wù)結(jié)合起來(lái)册养,做出一款產(chǎn)品(APP)东帅。所以對(duì)于初學(xué)者來(lái)說(shuō),真的沒(méi)必要特別深究其中的底層原理球拦。尤其對(duì)于一些非計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的同學(xué)來(lái)說(shuō)靠闭,更是如此。就算你想要知其所以然坎炼,也要先知其然不是嗎愧膀?
當(dāng)然如果你已經(jīng)是一名熟練的 iOS 開(kāi)發(fā)者了,那么我想底下這篇文章可以為你的夯實(shí)理論基礎(chǔ)之路提供一些指導(dǎo):
按照上文的學(xué)習(xí)路線(xiàn)堅(jiān)持走下來(lái)谣光,對(duì)于軟件工程師所必須的一些理論基礎(chǔ)學(xué)習(xí)大有裨益蟀悦,而且也會(huì)對(duì)整個(gè)計(jì)算機(jī)科學(xué)行業(yè)有一定的了解。
其次询张,在剛?cè)腴T(mén) iOS 開(kāi)發(fā)這個(gè)行業(yè)的時(shí)候份氧,一些業(yè)內(nèi)大 V 推薦的諸如斯坦福 iOS 開(kāi)發(fā)課程和蘋(píng)果官方文檔等學(xué)習(xí)材料在我看來(lái)非常不適合入門(mén)蜗帜,甚至斯坦福這門(mén)課是完全沒(méi)有必要去看的钮糖。斯坦福的 iOS 課程是用來(lái)給已經(jīng)有一定面向?qū)ο笳Z(yǔ)言經(jīng)驗(yàn)的人學(xué)習(xí) iOS 開(kāi)發(fā)用的店归,一上來(lái)就是 MVC 了消痛,要是不熟練的人一定一臉懵逼秩伞。而蘋(píng)果官方文檔則是缺乏實(shí)戰(zhàn)例子纱新,如果是初學(xué)者看過(guò)一遍之后可能連印象都會(huì)沒(méi)有脸爱。況且文檔本身是英語(yǔ)簿废,對(duì)于非英語(yǔ)母語(yǔ)的人來(lái)說(shuō)族檬,還是有一定的障礙的单料,最好是留在有一定工作經(jīng)驗(yàn)的時(shí)候再看。
最好的學(xué)習(xí)編程的方法(工程向递鹉,不僅限于 iOS ),就是把理論與實(shí)踐相結(jié)合狰域,兩手都要抓兆览,兩手都要硬塞关》基于這一點(diǎn)椰于,并結(jié)合自身的工作經(jīng)驗(yàn),做出了一套學(xué)習(xí)路線(xiàn)圖蜻牢。
第一階段:教學(xué)視頻
對(duì)于入門(mén)級(jí)的 iOS 開(kāi)發(fā)者來(lái)說(shuō)抢呆,通過(guò)視頻來(lái)學(xué)習(xí)是最好的方式了抱虐。因?yàn)槿绻ㄟ^(guò)看書(shū)或者是其他途徑梯码,往往只能一遍又一遍的學(xué)習(xí)到編程的語(yǔ)法知識(shí)好啰,而對(duì)于如何開(kāi)發(fā)工程項(xiàng)目卻還是保持在一臉懵逼的狀態(tài)框往。在大四最后一個(gè)學(xué)期的時(shí)候,我光靠啃書(shū)(大概三五本)學(xué)習(xí)了
Python 這門(mén)語(yǔ)言瓤鼻,結(jié)果畢業(yè)設(shè)計(jì)絞盡腦汁也只做出來(lái)一個(gè)極其簡(jiǎn)單的即時(shí)通訊項(xiàng)目茬祷,學(xué)習(xí)效率可想而知。
對(duì)于視頻的選擇祭犯,個(gè)人推薦李明杰講的視頻(舊版的是傳智播客的滚停,新版的是小碼哥的)最盅。這也是看過(guò)很多之后做出來(lái)的選擇起惕,授課順序也較為科學(xué)疤祭,一路跟著學(xué)下來(lái)就好了勺馆。為了避免侵權(quán),請(qǐng)大家自行前往淘寶購(gòu)買(mǎi)灌灾。(逃
對(duì)于視頻學(xué)習(xí)有一個(gè)建議锋喜,就是最好是先看視頻嘿般,看完一段視頻之后再憑借回憶把視頻里的代碼寫(xiě)出來(lái)炉奴,如果實(shí)在是想不起來(lái)再稍微回過(guò)去翻看一下瞻赶。
iOS 開(kāi)發(fā)中有些技術(shù)點(diǎn)是每個(gè)項(xiàng)目都必用的砸逊,而有些雖然火熱(比如直播)师逸,但在實(shí)際工作中未必能用到对湃,所以我總結(jié)了項(xiàng)目中必用的知識(shí)點(diǎn)和相對(duì)熱門(mén)但卻未必會(huì)用上的知識(shí)點(diǎn),供大家參考:
必用知識(shí)點(diǎn)
- C心傀、Objective-C 和 Swift 語(yǔ)言語(yǔ)法脂男。 (Swift 可以放一放弃甥,反正還要變)
- UI 搭建(主要是 UIKit 框架淆攻、繪制瓶珊、動(dòng)畫(huà))
- 多線(xiàn)程(多線(xiàn)程并發(fā)的理論知識(shí)伞芹、NSOperation 和 GCD 的應(yīng)用)
- 網(wǎng)絡(luò)(網(wǎng)絡(luò)請(qǐng)求的理論知識(shí)唱较、如何優(yōu)雅的發(fā)起網(wǎng)絡(luò)請(qǐng)求)
- 版本管理(SVN南缓、Git 的使用)
- 依賴(lài)管理(Cocoapods 的使用)
- 持久化(SQLite西乖、Core Data获雕、Realm)
熱門(mén)知識(shí)點(diǎn)
- 富文本
- 直播
- React Native(Facebook 悶聲作大死庵楷,馬上藥丸了~)
- 即時(shí)通訊
- 函數(shù)響應(yīng)式編程
- ……
對(duì)于初學(xué)者而言尽纽,最重要的是掌握那些在每個(gè)項(xiàng)目中都會(huì)用到的知識(shí),而那些熱門(mén)的知識(shí)可以留作課余時(shí)間或者工作中遇到了再學(xué)差凹,也是都來(lái)得及的危尿。
第二階段:閱讀書(shū)籍
在第一階段完成之后,再閱讀一些書(shū)籍予以補(bǔ)充可以鞏固所學(xué)的開(kāi)發(fā)知識(shí)济欢。iOS 的書(shū)籍不算少攀例,在亞馬遜上大體上有兩百多本挖胃,但是良莠不齊梆惯。經(jīng)過(guò)我多年的閱(cai)讀(keng)酱鸭,推薦幾本書(shū)供大家鞏固基礎(chǔ)和進(jìn)階使用,請(qǐng)按照順序閱讀垛吗。
1凹髓、Objective-C 編程
《Objective-C 編程》講述 Objective-C 編程語(yǔ)言和基本的 iOS/Mac 開(kāi)發(fā)知識(shí)。作者首先從基本的編程概念講起(變量怯屉、條件語(yǔ)句蔚舀、循環(huán)結(jié)構(gòu)等)饵沧,接著用淺顯易懂的語(yǔ)言講解 Objective-C 和 Foundation 的知識(shí),包括 Objective-C 的基本語(yǔ)法赌躺、 Foundation 常用類(lèi) 礼患、內(nèi)存管理肤粱、常用設(shè)計(jì)模式等,最后手把手教讀者編寫(xiě)完整的瓢姻、基于事件驅(qū)動(dòng)的
iOS/Mac 應(yīng)用褥傍。作者還穿插介紹了 Objective-C 的高級(jí)內(nèi)容朋贬,包括屬性糠亩、分類(lèi)和 Block 對(duì)象等知識(shí)腕柜。全書(shū)篇幅精煉唉铜,內(nèi)容清晰灰嫉,適合無(wú)編程經(jīng)驗(yàn)的讀者入門(mén)學(xué)習(xí)根盒。
看完《Objective-C 編程》之后册赛,關(guān)于 iOS 開(kāi)發(fā)中用到的 C 和 Objective-C 語(yǔ)言相關(guān)的知識(shí)就基本掌握了,接下來(lái)就是:
2、iOS 編程
《iOS 編程》榮獲 Jolt 生產(chǎn)力大獎(jiǎng)官硝。第 4 版更新了 iOS 7 和 Xcode 5 的內(nèi)容。全書(shū)涵蓋了開(kāi)發(fā) iOS 應(yīng)用的方方面面扇雕。從 Objective-C 基礎(chǔ)知識(shí)到新增加的語(yǔ)言特性;從 UIKit 庫(kù)到常見(jiàn)的 Cocoa 設(shè)計(jì)模式迹缀;從
Xcode 技巧到 Instruments 等盆色。如果讀者剛接觸 iOS 編程仅父,閱讀本書(shū)前兩章可以快速入門(mén)。如果讀者已經(jīng)有 iOS 編程經(jīng)驗(yàn),閱讀本書(shū)可以拾遺補(bǔ)缺煌茴。
看完《iOS 編程》之后龄句,獨(dú)立開(kāi)發(fā)一個(gè) iOS APP 基本不成問(wèn)題了靶草,但是如果想要做到極致,你還需要:
本書(shū)深入介紹 iOS 7 新特性和新功能,涵蓋 iOS 7 大部分新增特性,包括新的后臺(tái)操作智玻、Core Bluetooth召边、UIKit 動(dòng)力學(xué)以及 TextKit。另外還介紹了如何處理新的扁平化 UI隧熙,并新增了一章你可能不知道的“小技巧”幻林。如果讀者熟練掌握 C 和 C++贞盯,讀完本書(shū)即可創(chuàng)建性能優(yōu)異的
iPhone、iPad 和 iPod touch 應(yīng)用沪饺。
本書(shū)主要內(nèi)容包括:
? iOS 7 新特性和新功能概覽躏敢;
? 深入解析多任務(wù)整葡、多平臺(tái)、安全服務(wù)遭居、應(yīng)用內(nèi)購(gòu)買(mǎi)、自動(dòng)布局等高級(jí)主題镀首;
? 全面介紹 REST鼠次、高級(jí) GCD更哄、本地化和國(guó)際化腥寇、Core Bluetooth;
? 細(xì)致講解 UIKit 動(dòng)力學(xué)麻敌、自定義過(guò)渡及其他內(nèi)容掂摔。
本書(shū)助你充分利用 iOS 7 新特性,挑戰(zhàn)編程極限乙漓,打造非凡應(yīng)用。
《iOS 編程實(shí)戰(zhàn)》是一本進(jìn)階向的圖書(shū)叭披,第一遍看一臉懵逼是很正常的,因?yàn)槠渲械暮芏鄡?nèi)容你需要結(jié)合實(shí)際開(kāi)發(fā)中的經(jīng)驗(yàn)嚼贡,對(duì)應(yīng)著去看,才能獲得最佳的效果粤策。
《Effective Objective-C 2.0:編寫(xiě)高質(zhì)量 iOS 與 OS X 代碼的 52 個(gè)有效方法》是世界級(jí) C++ 開(kāi)發(fā)大師 Scott Meyers 親自擔(dān)當(dāng)顧問(wèn)編輯的“Effective Software Development Series”系列叢書(shū)中的新作掐场,Amazon 全五星評(píng)價(jià)。從語(yǔ)法萍膛、接口與 API 設(shè)計(jì)蝗罗、內(nèi)存管理蝌戒、框架等 7
大方面總結(jié)和探討了 Objective-C 編程中 52 個(gè)鮮為人知和容易被忽視的特性與陷阱。書(shū)中包含大量實(shí)用范例代碼北苟,為編寫(xiě)易于理解、便于維護(hù)傻昙、易于擴(kuò)展和高效的 Objective-C 應(yīng)用提供了解決方案彩扔。
《Effective Objective-C 2.0》是 iOS 進(jìn)階書(shū)籍中最經(jīng)典的一本,不管是用于優(yōu)化工程還是準(zhǔn)備面試虫碉,都是不二之選,但是本書(shū)偏工程向敦捧,如果希望了解技術(shù)細(xì)節(jié),請(qǐng)看:
本書(shū)在蘋(píng)果公司公開(kāi)的源代碼基礎(chǔ)上济蝉,深入剖析了對(duì)應(yīng)用于內(nèi)存管理的ARC 以及應(yīng)用于多線(xiàn)程開(kāi)發(fā)的 Blocks 和 GCD。這些新技術(shù)看似簡(jiǎn)單贺嫂,實(shí)則非常容易成為技術(shù)開(kāi)發(fā)的陷阱雁乡,開(kāi)發(fā)者僅靠閱讀蘋(píng)果公司的文檔是不夠的。
本書(shū)適合有一定基礎(chǔ)的iOS 開(kāi)發(fā)者閱讀踱稍。
《Objective-C 高級(jí)編程》是從源碼角度講解了 ARC 、Block 和 GCD 這三種技術(shù)的底層實(shí)現(xiàn)扩淀,非常適合刨根問(wèn)底啤挎,可以說(shuō),看完這本書(shū)這三方面的技術(shù)已經(jīng)沒(méi)有可以講的了庆聘。
我認(rèn)為值得一看的書(shū)籍只有如上五本,如果你還有好的書(shū)象对,可以在評(píng)論里推薦給我宴抚。
第三階段:網(wǎng)絡(luò)資料
到了這個(gè)階段,常規(guī)的 iOS 開(kāi)發(fā)技術(shù)你已經(jīng)都掌握了酱塔,但是編程中的技術(shù)變更是很快的,光靠書(shū)和視頻是遠(yuǎn)遠(yuǎn)不夠的唐全,這時(shí)候只能去網(wǎng)上尋找對(duì)應(yīng)的資料了蕊玷。
如果你開(kāi)發(fā)中想尋找對(duì)應(yīng)的資料,推薦使用 Google垃帅。不是說(shuō)百度搜索技術(shù)不行,問(wèn)題在于百度搜索出的內(nèi)容重復(fù)率太高贸诚,不推薦厕吉。但是如果有人跟你說(shuō)讓你用 Bing械念,那么你可以直接讓他 Go Die
了,本人親測(cè)還不如百度项钮。
如果你在開(kāi)發(fā)中想找一個(gè)現(xiàn)成的第三方庫(kù)希停,請(qǐng)去 Github
如果你在開(kāi)發(fā)中遇到了你解決不了的問(wèn)題,請(qǐng)去 Stackoverflow
如果你聽(tīng)說(shuō)了一種新技術(shù)并想學(xué)習(xí)一下亚隙,請(qǐng)去 Raywenderlich
如果你想看看大神(AFNetworking 作者)最近在研究些啥棍潘,請(qǐng)去
NSHipster
當(dāng)然還有 Objcio,是一個(gè)博客集合站亦歉,你不容錯(cuò)過(guò)。
當(dāng)然肴楷,隨著你工作經(jīng)驗(yàn)的增長(zhǎng)赛蔫,一定會(huì)遇到許許多多的 iOS 開(kāi)發(fā)者,多跟他們交朋友呵恢,你得到的提升將不只是技術(shù),還有人生渗钉。
希望隨著寒冬過(guò)去,我們每個(gè)人都能找到心儀的工作声离,收獲美好的人生瘫怜。
祝好。
PS:不要問(wèn)我 Swift 應(yīng)該怎樣找資料鲸湃,我馬上也要第四次學(xué)習(xí)了子寓,一起吧世囊。
PPS:昨晚文章發(fā)到朋友圈之后,有非科班的開(kāi)發(fā)者給我提了一些意見(jiàn),我放在下面晒衩,供非科班的開(kāi)發(fā)者們參考。
以我個(gè)人經(jīng)驗(yàn)來(lái)說(shuō)(非計(jì)算機(jī)):
1贝奇、推薦網(wǎng)易云課堂翁愷老師的C語(yǔ)言靠胜,和何以欽老師數(shù)據(jù)結(jié)構(gòu),也許看不懂浪漠,不過(guò)沒(méi)關(guān)系,這兩門(mén)課使我的思維從其他行業(yè)切換到計(jì)算機(jī)该镣。
2响谓、推薦斯坦福課程基本上一直在更新從OC到Swift都包含,從語(yǔ)法到項(xiàng)目娘纷,有字幕有代碼,邏輯清晰律适。
3嬉探、各種視頻資源(但是時(shí)間效率太低,進(jìn)度好慢涩堤,從我一路看過(guò)來(lái)之后我覺(jué)得這一步其實(shí)意義不大)特別是李明杰老師的更多的是給我一個(gè)思想,為了就業(yè)大多知識(shí)點(diǎn)到為止吁系,并不深入。
4汽纤、高質(zhì)量博客,文檔,github源碼肴掷。
5背传、最后也是最重要學(xué)習(xí)的能力,資料檢索能力径玖,學(xué)會(huì)學(xué)習(xí)。僅個(gè)人經(jīng)驗(yàn)赞赖,相互探討冤灾。
其實(shí)第一點(diǎn),現(xiàn)在還是我反復(fù)看话侄,新的好多技術(shù)只是皮囊学赛,要尋找不變量年堆。每天都是業(yè)務(wù)UI又是會(huì)很迷茫变丧,內(nèi)心也不踏實(shí)绢掰,反過(guò)頭來(lái)補(bǔ)補(bǔ)基礎(chǔ)知識(shí)使內(nèi)心平靜,也能寫(xiě)出更好的代碼
如果覺(jué)得我寫(xiě)的還不錯(cuò)滴劲,請(qǐng)關(guān)注我的微博@小橘爺,交個(gè)朋友吧~