国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS初級開發工程師進階之路

2019-11-07 22:46:12
字體:
來源:轉載
供稿:網友

我覺得是時候,也有必要,承認一下自己的錯,壓制一下趾高氣揚的自己,在知乎上看到一個帖子,有點被打擊到了.帖子中涉及到的問題,我給貼出來,各位小伙伴們一起開探討一下,問題的答案,有知道的請在后面留言

首先帖子的地址:https://www.zhihu.com/question/39597307/answer/82285626

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

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

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

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

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一堆方法,到底都是干嘛的???你難道不好奇?這塊知識點一直是你的盲區,你能忍?我忍不了!

UIView再往深了看,下面還有CALayer,你研究過沒?為什么修改CALayer的某些property默認會有個動畫產生呢?

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

3. 還有這些大的功能點

既然用了兩年第三方類庫,那么比如圖片緩存這類,看過源碼實現沒?如果自己來實現的話,有哪些Caching Algorithms?該怎么取舍?各種常用的第三方類庫你研究過原理沒?

你的App在和服務器交流數據的過程中安全性怎么樣?你是不是要研究一下加解密?HTTP理解的夠清楚嗎?想沒想過自己來寫接口?或者更甚至一些自己來寫個簡易的HTTP服務器?接口部分甚至用CGI來實現也可以?。?/p>

要寫服務器,那應該要了解一下網絡部分吧?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多的文檔不說,發下我的部分書單給你看看吧:

頂著高級頭銜,但感覺我也只能算一個中級吧。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的教程還簡單……

修煉基本功,http://oj.leetcode.com , 現在也支持Swift了??傮w難度適中,不像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,然后掃一遍就知道怎么改。其實有時候一個老手遇到一個很簡單的問題不知道或者出錯太正常了,但很少會因為一個這樣的問題卡住。說句老實話,這幾點其實看上去要求都不高,沒有提到業界影響力,沒有提到懂算法,沒有提到會很多黑科技。但符合這幾點的人才,我接觸下來,其實并沒有那么多。說道底,因為行業不算光鮮,國內程序員群體的平均能力良莠不齊導致的。為什么很多大公司對學歷有要求,或者對在別的大公司工作過的人特別青睞。因為對他們來說,上面提到的1、3、4條,學歷好、待過大公司的人,會有更大的概率符合。其實我沒有回答題主的問題,我說了『是什么』,而沒有回答『怎么做』,如果看到的人能有點啟發,那就可以了。

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

瘋狂的造輪子。

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

嘗試用逆向工程分析APP,了解你寫的oc代碼最后都是怎樣編程匯編代碼的。深入理解iOS操作系統,理解iOS的工作原理,各種安全機制。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海宁市| 义乌市| 绥宁县| 绵阳市| 板桥市| 商河县| 和林格尔县| 房山区| 城口县| 丰原市| 锡林浩特市| 北流市| 灵丘县| 沭阳县| 赤城县| 普陀区| 富裕县| 柳河县| 诸暨市| 凤城市| 赣州市| 侯马市| 富源县| 兴业县| 高尔夫| 土默特左旗| 长丰县| 平南县| 阿勒泰市| 黄石市| 吐鲁番市| 梅州市| 包头市| 浙江省| 常熟市| 新巴尔虎右旗| 昭通市| 光泽县| 乌海市| 广东省| 长兴县|