iOS 開發初期之後怎麼提升?怎麼才能叫精通?方向在哪?

現在工作一年,基本的都會了,基礎知識應該還算紮實,但是不知道怎麼繼續提升。如果只是跟著公司的項目走,做一個項目學一點、遇到一個坑填一個這樣,太慢了,也很沒方向。換個思路就是,什麼樣才算精通、才是真大神?

1、開發效率高、快?

2、項目結構好,添加新模塊、修改甚至給其他類似項目都很輕鬆

3、熟悉iOS開發的許多領悟,哪怕是比較偏門的都有了解,遇到需要的項目能迅速展開。或者掌握一些相對較難的技術,比如安全問題(反編譯神馬的)、圖形圖像處理

4、對移動互聯網或說App開發的產品、用戶體驗有較好把握

5、還有什麼,比如git上那些著名的開源庫,說實話我可能都看不懂,那這些人寫出來是基於他們具有什麼樣的能力,他們是怎麼做到的?

或許還可以換個思路,從僱主角度說,公司招更好的iOS程序員,是看中了他們能提供哪些普通程序員給不了的呢?這也就是更好的iOS程序員的價值在哪?

還是現在的公司並不願意花大價錢請一個只做App的程序員,iOS的天花板挺低的?

如果解決了這些問題,我也就知道該朝哪個方向有了。路怎麼走之前,還是得先看清該朝哪走。

最後,是不是只做iOS會很局限,是否具有一點其他方面的能力會有顯著提升,比如配合安卓、比如配合後台開發?


iOS開發如何快速成長?

NO.1 毫無疑問,做有難度的項目.

當時正在快樂的當一隻小菜雞的我沉浸在了解了delegate原來是回調的意思正充滿著滿滿的幸福感的時候,被產品告知必須完成以下幾個功能.

  1. 完成類似於vine的短視頻錄製功能和畫中畫(我記得當時vine的版本只到1.X),而且AVFoundation什麼的完全沒聽過.
  2. 完成City Guides里的地圖動畫.(如果有不清楚這個的去appstore下一個國家地理雜誌出的City Guides,你可以觀摩一下地圖的交互設計)
  3. 做一個扇形的menu,開啟和閉合的動畫參考真實世界的扇子打開和收起.
  4. TableView的background用實時動態模糊效果(當時是iOS6.0,完全不知道動態模糊大概是什麼樣的)
  5. 尋找不規則範圍里的所有基於GPS的搜索結果.(當時我們有個創意是用戶隨便用指頭上一划,我們提供這個區域內的所有相關搜索結果).

    所有的東西在兩個月內完成.

    結果是,不管完成度如何,我在兩個月後東拼西湊都給他弄出來了.

通過找短視頻錄製,我知道了AVFoundation,視頻剪輯.

通過模仿CityGuides的地圖,我知道了他們的地圖是用一個叫做mapbox的第三方地圖做的.因為我用了google地圖,高德地圖,百度地圖和原生地圖,都不支持custom tiles.大致了解了LBS的東西.

通過做實時動態模糊,我知道了有個第三方庫叫GPUImage,也知道了有個東西叫CADisplayLink.

通過做扇形menu,我學會了CoreAnimation和貝賽爾曲線.

通過搜索在不規則範圍內的所有點,我知道了射線法.

試想一下,如果你做的是一個界面粗糙,邏輯簡單,交互乏味的app, 那麼相應的,從中獲取的東西肯定是不多的.所以,當你的技術進步緩慢的時候,很可能就是缺乏挑戰的時候.

NO.2 盡量少抱大腿,或者壓根就別抱大腿

不知道你們有沒有這種體會,在你尋找問題A的答案,不停的網上搜索,閱讀代碼的時候很多時候可能會順帶的把困惑已久的問題B和問題C的答案找到了.這時候往往會恍然大悟,哦,原來還能這麼寫.

那麼如果你的公司恰巧有個大牛,基本功紮實,業務邏輯爛熟於胸,態度溫和,來者不拒.你每每碰到什麼問題過去問,總能得到完美的解答,甚至大牛會幫你"結對編程",直接代碼都給你敲了.你肯定會感到幸福爆棚.

但是,這意味著,你喪失了很多觸類旁通的機會.

我當年也是比較迷信各種大牛的,加了很多開發群,有問題積極提問.後來就感覺這樣很蠢.

1是答者寥寥,頂多給你提個方向.

2是感覺就算是技術很好地人,在不了解你代碼的情況下也不大可能直接告訴你正確答案.

所以,凡事靠自己,是個很好地習慣.少麻煩別人,還能促使自己進步.何樂而不為呢?

NO.3 多讀源碼

大家對讀源碼有個錯誤的認知,覺得不讀懂每句話就不叫讀源碼.

其實不是這樣的,你完全可以用讀網路小說的態度來讀源碼,覺得這段寫的看不懂,你看的不爽,直接略過.用五柳先生的話就是,不求甚解.

這樣反覆看反覆看,而且隨著平時代碼量的增加,有些以前看不懂的地方也會慢慢豁然開朗,當然,該查的地方還是要查,也不能略過略過的把所有代碼都略過了.

但是讀源碼也不能盲目的看,最好是看和最近的工作相關的.比如,你最近在搞一些與網路聯繫比較緊的項目,那肯定要找AFNetworking這種經典的來看.如果最近在搞圖像處理,那肯定要找GPUImage或者CoreImage方面的源碼來看.

因為這樣和項目結合比較緊,你看的代碼和你寫的代碼很容易結合在一起,事半功倍.

NO.4 多讀國外的iOS開發網站和blog

翻牆軟體肯定是要有的.你要知道,第一手的開發資料永遠都是英文的,而且以英語為母語的開發者學起新技術來有天然的優勢.舉個例子,最早我有個法國同事(雖然法國人的英語普遍比較爛),學習新技能可以用神速來形容,以前開發的一個模塊需要用到cocos2d,他花了不到一個周的時間就自學cocos2d把東西搞出來了.

要把看Raywenderlich和nshipster還有http://objc.io當做生活習慣來看.而且現在的國人開發環境真的比早年的程序員幸福太多了.swift剛出沒到一個月就有團隊全部翻譯完了那本官方指南.所以,現在學不好編程是沒有任何借口的.

而且,說自己英語不好而拒絕看英文文檔的人,我感覺完全是態度有問題.這種文檔類的資料,基本沒有俚語或者日常用語,高中的那些英文基礎都夠用了,隨時備一本詞典,隨看隨查,是完全沒有問題的.

NO.5 要孜孜不倦的學習

有句話叫技多不壓身,編程本來就是一個更新換代非常快的工作.每年都有新的技術出現,我認為要成為一個出色的程序員只掌握一門語言肯定是不行的.

那麼,要怎麼選擇自己的第二門,甚至第三門語言呢?

我覺得要靠自己多試試,從12月份一直到15年2月,我一直在嘗試不同的語言和框架,從node.js到golang到python,中間還學了一點點erlang.

我覺得最適合iOS開發的第二門語言是python,python真的是太好用了,而且天然的適合unix系統,語法簡單,各種五花八門的庫,不誇張地說,應有盡有.學好了python,用處極大.

1是python與unix系統結合的特別好,你可以用python寫很多腳本來提高自己的工作效率.

2是python入門極快,買一本headfirst的python教程,很快就能學會.

3是python的就業前景也非常好,就算你以後想轉行,python的待遇也不比iOS差多少.

希望大家在閑暇的時候可以找一門自己感興趣的語言學習.

最後在新的一年,祝大家技術每天都有進步,技術和money雙豐收.


這個階段算是碼農的第一個迷茫期了。日常的需求都可以應付得來,對什麼東西都大概知道一些,覺得自己也能搞得定。

我建議你,後面的工作從「極致」方面去下功夫。

1、極致的體驗。按鈕怎麼擺放是合理的?顏色的搭配有什麼道理可講么?頁面之間的邏輯是否完整?用戶按照自己的習慣來使用軟體時,是否有不爽的地方?這些都是要做到極致體驗需要面對的問題。碼農必須要懂體驗,才能承擔更大的責任,這些都是常年累月,一點一滴去積累的。

2、極致的質量。你的Crash到0.1%的底線了么?如果沒有,先把這個基礎目標做吧。往往最難解決的Crash才是鍛煉實力的。

3、極致的性能。你的App是否運行N個小時也沒有內存泄漏?你的App的網路請求速度是否可以再提升?是否還在干著每打開一個頁面都需要N個請求同時發送的事?

是否可以用IP替換域名?請求是否可以合併,冗餘數據是否可以再縮減,為用戶再節省一些流量和時間?

4、極致的結構。業務層和基礎架構層的解耦是否做的比較徹底?能否最大程度上表現出了業務擴展的靈活性?是否存在相似的代碼來回copy的情況。如果業務需要立即來啟動一個新的App項目的話,能否使用現在的積累快速啟動起來?


我沒有開發過IOS,不過我覺得技術大都是相同的,提高的方法也異曲同工

無外乎看書-做項目-看書-做項目

到了後期,基本的技術已經不是問題了,更重要的是解決問題的思路,諸如演算法,底層,優化,就是這一類東西,更上一層,還有技術反哺產品的思考。

其實我覺得各行各業最頂尖的人才都是相似的,除了各自的專業技術外,還需要優秀的領導,合作,溝通能力,以及責任心。

回到技術這來,我認為提高技術最快的方法就是做項目,不要去一般的威客網站找那些沒難度的項目,浪費你的世界,賺的錢也不多。要做對自己有挑戰的項目,經驗有時候比錢更重要,當然,如果還有不菲的報酬就更好了。

最後打個硬廣,我們正在做的項目叫做 程序員客棧 - 為程序員服務 做好程序員的經紀人 ,前期對接我們篩選過的靠譜外包和優秀程序員,還有程序員之間的交流平台,希望對你有幫助。


羅列N本書、M種技術、Github、寫博客啥的,還有各種雞湯都不靠譜

找一個技術氣氛好的團隊,團隊的交流和學習氣氛才是最快速、最靠譜的提高方式


iOS開發的門檻在降低,但天花板卻原來越高,永遠都有學不完的新東西出現。

如何提升:

1.提升代碼質量,讓自己的代碼不斷的變得可讀性強且邏輯嚴密

2.提升架構能力,架構設計是個循序漸進的事情,好的架構一定是最符合當前項目的階段且具有一定的靈活性,能適應半年內項目的變化。不要想著一步到位,這種很容易變成過度設計。

3.深入研究牛逼的框架,要知其然並知其所以然。

4.以上所有,包括寫任何一行代碼,都請動腦子想清楚。不動腦子,就算寫10年代碼水平也不會有多大提高。

如何算精通:

1.只要看到別的app里可以實現的,你就知道如何實現,或者知道從哪裡入手。

2.看到需求後,能在短時間內評估工作量,且能按時或提前完成,且無bug

優秀的工程師,不只是能夠解決問題,更應該不要創造bug


我覺得iOS的天花板並不低

作為移動端開發的標杆 蘋果一直在推出新的技術 iWatch 智能家居 NFC等等

未來想像空間很大

iOS開發並不簡單等於開發個手機APP


李明傑弄的一個進階圖


提升自己沒有什麼太大的捷徑

動手和思考是最最重要的,想想自己有沒有什麼想做的創意,順著開發的流程,思考整個項目,嘗試開發整個項目,個人覺得做自己感興趣的東西是提升比較快的


推薦閱讀:

網易最成功的移動互聯網產品是什麼?
你看過哪些最具諷刺意義的圖片?
谷歌是怎樣的一家公司?
如何看待手機QQ部落的興趣社交?
戰艦少女台服是否成功了?

TAG:移動互聯網 | 程序員 | 編程 | iOS開發 | 信息技術IT |