iOS初級開發工程師進階之路(福利資料多多)

更多精彩盡在原文地址

iOS開發之家

我以爲是時候,也有必要,認可一下本身的錯,壓制一下趾高氣揚的本身,在知乎上看到一個帖子,有點被打擊到了.帖子中涉及到的問題,我給貼出來,各位小夥伴們一塊兒開探討一下,問題的答案,有知道的請在後面留言前端

iOS高級工程師是怎麼進階的?

我從事iOS 兩年了,感受只會搭建view,用第三方庫,還有些機械代碼?真的迷茫了。求大神賜教。想進階,具體從什麼大點入手呢?跪謝!!ios

說實話,兩年時間只會搭建view、使用第三方類庫,真的不能稱爲一個合格的iOS開發工程師!git

1. 先說OC部分程序員

  • 既然作了兩年了,對Objective-C足夠了解嗎?OC是如何基於C來進行的封裝?解釋一下這兩行代碼啥意思?github

    typedef __attribute__((NSObject)) CGGradientRef GradientObject;@property (nonatomic, strong) GradientObject storedGradient;
    複製代碼
  • protocol、category這樣的東西應該要手到擒來纔是? 多線程部分的知識點掌握是否紮實?runtime這種黑魔法研究過沒?代碼足夠優雅、後續維護容易嗎?各類設計模式也得會吧?面試

2. 再說UI部分算法

  • 既然寫了兩年的view,那麼能快速仿造市面上這些主流App的UI嗎?使用Reveal分析過微信、豆瓣、網易新聞、知乎、QQ、蘇寧、淘寶、支付寶的UI嗎?使用Charles去抓過他們的接口嗎?編程

  • UI研究稍微深一點,好比側滑菜單這種要怎麼實現?若是你要作實現應該要了解UIView和UIViewController的關係了吧?我嘞個草,UIView一堆方法,UIViewController一堆方法,到底都是幹嗎的啊?你難道很差奇?這塊知識點一直是你的盲區,你能忍?我忍不了!swift

  • UIView再往深了看,下面還有CALayer,你研究過沒?爲何修改CALayer的某些property默認會有個動畫產生呢?設計模式

  • 那麼Animation、UIKit Dynamics、Drawing、Graphics這些隨便拎出來一個,夠你研究一陣了吧?你看看好比網易新聞,在新聞詳情頁面上拉,回到新聞列表頁面的這個動畫作的出來嗎?你看看QQ在電話通訊頁面,點擊右下角縮放圖標,縮放成一個頭像的這種動畫,你會作不?

3. 還有這些大的功能點

  • 既然用了兩年第三方類庫,那麼好比圖片緩存這類,看過源碼實現沒?若是本身來實現的話,有哪些Caching Algorithms?該怎麼取捨?各類經常使用的第三方類庫你研究過原理沒?

  • 你的App在和服務器交流數據的過程當中安全性怎麼樣?你是否是要研究一下加解密?HTTP理解的夠清楚嗎?想沒想過本身來寫接口?或者更甚至一些本身來寫個簡易的HTTP服務器?接口部分甚至用CGI來實現也能夠啊!

  • 要寫服務器,那應該要了解一下網絡部分吧?TCP/IP 協議得熟悉吧?而後Wireshark各類抓包得會吧?

  • 網絡這塊順帶過來以後,即時聊天類的App採用的什麼技術?選 xmpp 仍是 mqtt 仍是本身寫?正好能夠順勢瞭解一下吧!

  • iOS SDK裏面的各類API你掌握到了什麼程度?這些功能模塊排除地圖、通信錄這種,說些高級的好比CloudKit、Extensions、TextKit、AirDrop、PassKit?以爲這些模塊在自家公司的項目中壓根沒用過?但是看看你手邊的App!

4. 其它專業化的方向

  • 視音頻處理作過嗎?此類諸如豆瓣FM、蝦米音樂、喜馬拉雅、QPlayer這類的App你去研究過他們嗎?還有VoIP這類的,我實習的時候作過這種╮(╯_╰)╭

  • 遊戲開發方向有沒有興趣?本身有沒有去研究過呢?(反正這個我是真沒有╮(╯_╰)╭)

5. 項目安全優化等

  • 項目中寫單元測試嗎?UI Automation 自動化測試作的怎麼樣?持續集成平臺諸如Jenkins等會用嗎?

  • App的各類性能優化、Crash的統計分析等等你作了沒?

  • App本地數據儲存夠安全嗎?你對逆向瞭解多少?敏感部分是否作了代碼混淆?

6. 知識體系要持續更新

  • 官方的文檔、國外的相關書籍採用的語言都是Swift,難道你不許備學學?除了native的,如今的HTML5也很火啊,難道不許備學?

  • 英文練習的怎麼樣了?官方全部的開發者文檔以及歷年的WWDC視頻看完了?這麼多書,這麼多大牛的博客,你難道從中一無所得?

官方1k多的文檔不說,發下個人部分書單給你看看吧:

image

頂着高級頭銜,但感受我也只能算一箇中級吧。

1. 會熟練使用Profiler來調試應用性能。好比其中有一個很好的模板叫Time Profiler,會告訴你應用當中哪行代碼花了最長時間,當你界面卡頓的時候,用這個能夠很快找到優化點。 2. 寫測試,寫測試不只僅能夠幫助你找BUG,更重要的時會讓你去思考如何更好地架構你的應用,其實不少好的工程師,代碼架構能力都是很不錯的。同時也會用OS X Server和XCode配置 Continuous Integration。 3. 能夠輕鬆編寫多線程代碼,熟悉NSOperation,GCD等 4. 熟知一些經常使用的系統類庫的原理和Best Practics,好比Core Data,這個玩意兒要玩得好,也是很花時間的。 5. iOS應用,UI佔很重要的一部分,可能大部分時候你只須要使用默認的UI組件就行,可是有些時候,你必需要本身去實現一些UI組件和動畫,這個時候Core Animation啊,UIDynamics啊都是很值得去學習的點。

我通常的路徑是,當要解決一個問題或實現一個功能的時候,我儘可能本身去實現,但當本身寫的東西沒法達到預期的時候(性能太差,實現不了或代碼邏輯過於複雜)我纔會去找第三方庫。

還有就是,若是你作了兩年都以爲本身沒啥大進步的話,那問題多是你手頭的項目並無什麼高的要求,沒有性能問題要你解決,公司也對不少細節問題無所謂,那做爲有要求的工程師,你要麼本身有項目能夠幫助本身提升(好比我老是會本身寫應用來學習一些新API和技術);要麼就換家公司吧。

1. 對計算機基礎知識的瞭解很全面。網絡協議TCP,UDP概念要懂伐...Base64不是加密要知道伐...線程和進程區別要知道伐...諸如此類 2. 對iOS開發的基礎知識瞭解的很紮實。Runtime大概幾個概念,msg_send怎麼找方法的流程,大概能比較清晰講一遍伐...多線程有幾種寫法、各個場景下的不一樣用法知道伐...hittest和respond chain的流程能講清楚伐... 3. 良好的溝通能力、需求理解能力,乃至對將來需求的修改的判斷能力。這個能省下N多由於理解不對或者改需求引發的加班時間。這個在大公司很重要,不過不少時候程序員的溝通能力取決於PD和交互的能力。 4. 學習能力很強,看一個技術文檔,很快能抓到重點,看一個bug,一分鐘內能找到stackoverflow,而後掃一遍就知道怎麼改。其實有時候一個老手遇到一個很簡單的問題不知道或者出錯太正常了,但不多會由於一個這樣的問題卡住。

憋鬧,高階人士說本身精通多線程GCD編程,你跟着去研究了一番,熟練掌握了dispatch_async的用法,以爲多線程也不過如此嘛……但以後你會發現,你除了知道了幾個新api,其實技能並無獲得實際的提高,你仍是不知道爲何有的代碼在main_queue裏執行以及在worker queue裏執行會有不一樣的結果……

事實就是,不少問題你沒有親自遇到並解決,是沒辦法真正掌握的。

扯遠了,說回如何進階的問題。從操做性的層面,我以爲主要能夠有如下幾個方向:

瞭解蘋果的新技術,絕大多數蘋果的新技術都是爲了提升開發效率而服務的(雖然有的也有坑,好比@IBInspectable這玩意兒,但畢竟是少數。),整體絕對是性價比很高的學習。

「那文檔,好長啊,看不完怎麼辦T_T」

請移步app store,搜索WWDC。裏面有歷年WWDC技術會議的內容,近兩年的還配有字幕 以及demo project,學起來趣味性十足,比看Ray wenderlich的教程還簡單……

修煉基本功,oj.leetcode.com , 如今也支持Swift了。整體難度適中,不像ACM那麼刁鑽。很是適合當作瞭解語言特性以及鍛鍊本身基本編碼能力的地方。 雖然算法沒有用……但能寫出算法的能力,頗有用。這個訓練可以潛移默化的提升你在平時寫代碼的速度。

瞭解FRP(FunctionalReactive Programming),對應框架就是ReativeCocoa和RxSwift,沒錯,這並非必須的。但我仍是忍不住要安利一下。這是可以最直接,最顯而易見的提供你工做效率的框架。

學習別人造的輪子, github上有不少優秀的開發者的源碼,其中很大一部分都有極高的學習價值。matteocrippa/awesome-swift 這裏是一個集合的,你能夠根據本身感興趣的庫進行學習。(記住是學習……是研究怎麼實現……是思考換你來作的話,你會如何作……不是pod install而後跟着readme使用一下就完了……),國內也有不少大神的框架值得學習,好比ibireme的YYKit。

造輪子。 學得差很少了,就該本身造了。當你第一次以框架/Api設計者而不是使用者的角度來思考問題,也可以得到不少的收穫。這一步能帶給你能力的提高是最明顯的,若是說1-4 ,都是在韜光養晦的積累階段。那造輪子,就是你在成爲高階工程師之路的收穫階段。

@optional

貢獻你的知識,把你的心得,領悟的東西寫成博客。或者把你看過優秀的英文文章翻譯成中文,方便後來的國內開發者們快速掌握。這並非單純的作好事,分享的過程,你能讓你有新的感悟,學到新的知識。利人利己。

在我我的的概念裏面,高級 iOS 工程師的定義,其中 iOS 只佔了一半,這一半是熟悉 Objective-C、Swift、Cocoa、Xcode、App Store 等等,其實就是語言 + 工具鏈 + 生態  另外一半,是 高級工程師,高級工程師是什麼樣的已經有不少的討論了。

我算不上什麼高級工程師,但我在BAT在二線互聯網公司創業公司都呆過,見過一些算得上『高級iOS工程師』的人,我就先談談他們的共性吧。這些共性不是成爲『高級』的充分條件,但確定是必要條件。若是這些都作不到,那也算不上高級。 1. 對計算機基礎知識的瞭解很全面。網絡協議TCP,UDP概念要懂伐...Base64不是加密要知道伐...線程和進程區別要知道伐...諸如此類 2. 對iOS開發的基礎知識瞭解的很紮實。Runtime大概幾個概念,msg_send怎麼找方法的流程,大概能比較清晰講一遍伐...多線程有幾種寫法、各個場景下的不一樣用法知道伐...hittest和respond chain的流程能講清楚伐... 3. 良好的溝通能力、需求理解能力,乃至對將來需求的修改的判斷能力。這個能省下N多由於理解不對或者改需求引發的加班時間。這個在大公司很重要,不過不少時候程序員的溝通能力取決於PD和交互的能力。 4. 學習能力很強,看一個技術文檔,很快能抓到重點,看一個bug,一分鐘內能找到stackoverflow,而後掃一遍就知道怎麼改。其實有時候一個老手遇到一個很簡單的問題不知道或者出錯太正常了,但不多會由於一個這樣的問題卡住。

說句老實話,這幾點其實看上去要求都不高,沒有提到業界影響力,沒有提到懂算法,沒有提到會不少黑科技。但符合這幾點的人才,我接觸下來,其實並無那麼多。說道底,由於行業不算光鮮,國內程序員羣體的平均能力參差不齊致使的。 爲何不少大公司對學歷有要求,或者對在別的大公司工做過的人特別青睞。由於對他們來講,上面提到的一、三、4條,學歷好、待過大公司的人,會有更大的機率符合。

其實我沒有回答題主的問題,我說了『是什麼』,而沒有回答『怎麼作』,若是看到的人能有點啓發,那就能夠了。

我一直認爲最出色的移動端程序員(其實全部的程序員)應該是個全棧程序員,由於我認識的好多優秀的ios開發工程師都是有必定的服務端開發背景,搭的了服務端架構,寫的了前端js,和產品撕的了逼,作設計有本身的理由,寫的了ppt,作的了演講,一個優秀的開發工程師,成爲一個全棧,我在路上

瘋狂的造輪子。

基原本看,就是你對這個東西沒什麼興趣,2年時間,其實能玩出挺多花的了。我一個月大概才摸1-2天,也有2年多了,都研究出瞭如何讓矢量設計師以最小的工做量輸出所有界面元素,而且生成觸摸的代碼,剩下作好動畫和邏輯就行了。

嘗試用逆向工程分析APP,瞭解你寫的oc代碼最後都是怎樣編程彙編代碼的。 深刻理解iOS操做系統,理解iOS的工做原理,各類安全機制

若是你依然在編程的世界裏迷茫,不知道本身的將來規劃,小編給你們推薦一個iOS高級交流羣:458839238 裏面能夠與大神一塊兒交流並走出迷茫。小白可進羣免費領取學習資料,看看前輩們是如何在編程的世界裏傲然前行! 羣內提供數據結構與算法、底層進階、swift、逆向、整合面試題等免費資料 附上一份收集的各大廠面試題(附答案) ! 羣文件直接獲取 各大廠面試題

iOS開發之家

推薦文章

【重磅來襲】史上最全iOS面試題及答案

相關文章
相關標籤/搜索