給那些剛入行的 iOS/Android 開發新手們的一些建議

前言

       最近我司春雷招聘計劃開展的如火如荼。我天天要去面試好多 iOS  Android 開發者,幾圈下來感慨萬千,有的初出茅廬,有的已經工作了三四年,但是卻總覺得那么不可心。根本滿足不了我的要求。我感覺并不是我要求太高,而是他們并沒有意識到這行應該怎么做。最近到處刷臉,經?;嵊型飾胰綰窩Ш?iOS,如何才能成為中級、高級的工程師,那么就借此機會說說我的看法。供大家參考。


持續學習

       軟件開發這個行業是一個持續學習的行業,并不是像有些傳統行業那樣。我學會了技能這輩子就靠重復這個技能吃飯了。所以我們面試完有時會打趣地說某個面試者,他這個三年經驗實際上是三個月的工作經驗重復了三年。

       我總愛拿 Node.js 舉例子,這貨半年不關注,分家出來一個 io.js。再過一段又合并了,版本號上 1 了。如果你再拿著上古的 Nodejs 經驗去找工作,肯定會被批為與時代脫軌的。(當然 Python3 呵呵就好)


  iOS 開發這個社區,除了互相捧臭腳以外還是有非常大的活力的。ReactiveCocoa 如今 Github Star 數已經破萬,Swift 已經在語言排行榜里和 OC 名次差不多。已經不再是面向對象一黨專政,而是面向協議、函數式、函數響應式編程百家爭鳴。


  我們在這樣煥發著活力的社區環境下,怎么能吃老本呢?

該如何學習

      那么作為一個初級的 iOS 開發者,只會用用系統庫,遇到不會的問題只能做到面向 StackOverflow 編程,甚至面向百度編程。我們該如何提升呢?面試官總會百般刁難 什么 RunLoop 啊,什么 Runtime 啊,這玩意開發的時候我們從來不會遇到啊,我該怎么學呢?


科學上網

  學會科學上網是至關重要的,雖說貌似犯法了。但是,如果你善于用 Google 的話,你會發現你遇到的所有問題?;舊隙薊嵊邢熱擻齙?,能大幅節省在開發上所浪費的時間。以及 StackOverFlow 是英文問答社區,所以耳濡目染的也會變得不會那么頭疼看英文,畢竟當你知道你眼前這坨鬼畫符能解決你卡了好久的 Bug 的時候。一個字一個字的查,也要逼自己看懂的。而能勉勉強強看懂英文對技術的提升至關重要。


精通一門武藝

       11 年,我在觸控有幸和他們的 COO 聊天,他是技術出身。和我講了講技術到底該怎么做。現在想來那一晚和他的談話改變了我的未來。


       他說游戲開發非常龐大,要學的地方非常多,很難學好,他推薦我看 Cocos2d-iPhone 的源碼(那時候還沒有 -x)。一遍遍的看,直到能完全看懂的時候,你會發現自己再寫游戲既不會有問題了。畢竟自己引擎都能寫,那游戲還算個啥?


      通過閱讀引擎,可以看到 Cocos2d 是如何和 UIView 交互的;如何做的觸摸事件分發;如何做的渲染;如何做的 Schedule;如何做的 Action。這些都會涉及各種設計模式,各種底層函數的使用,各種多線程的問題。有了這個例子作為范本來模仿著設計框架,優化性能,代碼功底會大幅提升。


       當然這個過程是非常非??菰鍇壹枘訓?,畢竟一個四萬行的引擎,從哪里下手怎么堅持下去都是問題。有些地方為了優化效率還選擇了純 C 來做,看懂他更為頭疼。于是要持之以恒的一點點的啃,而不是一朝一夕的。


        對于 iOS / Android 開發來說,網絡引擎是個很不錯的選擇,一萬行代碼左右,龐大的社區支持不會遇到太大的坎。AFNetworking,Volley,AsyncHTTPRequest,Alamofire 都是很不錯的范本。這些代碼我都讀過,學到了很多東西。很多新手頭疼的 GCD 應用、多線程、接口設計、Runloop 之類都有使用。


       當把這套框架吃透了之后,技術不僅會上升很多,也會更有自信一些。再找其他的框架看看 例如 YYKit 系列是個很不錯的選擇。也可以去嘗試看看 CoreFoundation 的實現,對于 RunLoop 的理解還是要看 CFRunLoop 這個東西。以及 NSArray NSString 他們每個方法具體實現時間開銷,都可以略知一二。當然去看看 OC 的實現也是不錯的,等該了解了OC 這門語言的本質的時候。對于什么 Runtime 啊,isa 啊,都成了小兒科。哪怕沒看懂,這時再去看 Sunnyxx 和 郭耀源 的那些底層文章,就不再是天書或者道聽途說了,而是有自己的知識體系去理解這些東西。


了解其他領域


       當有了更多的精力,可以去看看 Android 的框架,甚至 WinPhone 的框架,這些東西不需要精通,只需要看看其他平臺是怎么設計的。大部分是一樣的,但同時也有自己的特色。他們的設計理念,API 封裝,也是十分值得借鑒的,可以為自己所用的。以及,我們經常和 Android 的同事一起討論框架設計,甚至對于不知道該怎么實現的地方去看看 Android 源碼怎么做的,畢竟開源,直接抄過來。


      前端和后端的東西同樣可以借鑒,像 Redux 這個前端框架已經有了 Swift 版本。RX 系列框架已經覆蓋了全部語言。蘋果以及 OC 并不是世界上最好的語言,有很多糟粕,當你看多了其他的語言,再去做自己的業務視野會寬闊很多。


        學習一門腳本語言也是十分有必要的,大多數 OC 程序員只會 OC 這門語言。做一些工具的時候還是不愿離開自己舒適區,繼續用 OC 來做。這明顯是不對的,太過于低效。Python 二十行就能寫一個簡單的爬蟲?;蛔?OC 估計要寫二百行以上,還只能在蘋果的系統上跑。 


反思

      上面 blabla 說了那么多,其實這個是最重要的。要多反思,反思體現在各種地方,比如當初寫了一段臟代碼,就要不斷去思考,如何去優化如何去解決掉這個問題,而不是過了就過了。學到了一個新的設計模式,就不斷去思考,這個設計模式有啥用,能否用于重構之前的代碼??吹攪?AFN 一段奇怪的代碼,就要去思考為什么會這么設計,這么設計有什么特殊的意義么。當不斷去反思去問自己為什么的時候,就不會覺得自己到了瓶頸了,因為有太多的東西不會了,有太多的東西可以學了。從而讓自己堅持不懈地學下去。

  

最后

這是我對學習技術的一些看法,希望能對大家有所幫助。如果你喜歡,請關注此公眾號,我會將我平時開發遇到的小技巧,研究出來的黑科技,寫在這個公眾號上。內容不見得是 iOS,有可能是 Android 逆向 后端,也有可能是創業的感受。謝謝


來源:糖炒小蝦-微信公眾號

上一篇: 一路走來,從自學到工作這一年我學到了什么?

下一篇: 這款產品曾被認為是 Google 的未來支柱,現在卻淪為一個小工具

分享到: 更多
幸运飞艇全天六码三期计划 小霸王精选36码中特 麻将的玩法和规则 取胆码的方法准确95% 二串一进球稳赚技巧 网上棋牌二人麻将技巧 帮别人买重庆时时犯法吗 免费通用透视棋牌插件下载 式专打闲投注法500元 北赛车pk10直播链接 时时彩全麦有稳赚的吗 二八杠棋牌游戏平台 重庆时时开奖直播app 重庆时时计划稳赚计划 球探体育即时比分 北京pk官方开奖结果