做開發到一定程度後就會面臨「轉職」,是轉向更深的技術還是工程管理值得考慮啊。。
雖然近幾年有大量的開發者湧入移動端,社會上的各種培訓機構也越來越多,但是優秀的 ios 開發者在行業內仍然很少,這一方面是由於創業者很多,另一方面是因為技術更新換代很快,而且開發也需要長時間的經驗積累,以近幾年的 wwdc 大會為例,11年發布的 ios5 與 ios4 相比簡直就是跨越性的更新,雖然使用者可能感覺不到,但是從 sdk 的變化來說,開發者的壓力是很大的;12年發布的 ios6 帶來了 autolayout 、coreimage這些新的技術以及像 passkit、collectionview、state preservation 這些大量的新的 apis;ios7 的變化大家都看在眼裡,ui 的調整往往意味著過去經驗的結束,你要重新思考對細節的處理;ios8 也有理由說是變化最大的版本,帶來了像 extensions、size classes、metal、watch、swift 等等這些全新的東西。
要學習的東西很多,但是總得來說行業前景還是很好,而且你每年都有機會實現彎道超車。
能對產品進行需求分析,設計適合的架構,分解模組等,其次開發,開發中需要有產品觀,畢竟要想從幾十萬的開發者中脫穎而出,除了技術還要有對產品本身的激情,對工作只是當成乙個班去上是萬萬不行的。
能做好技術選型(需要用到的技能在下面的【技能列表】中),保證系統的穩定度。後者會比較麻煩,因為產品不了解**本身的情況,對一些可能出現的問題並不清楚,而這些只有開發者最清楚,如果開發者不說的話就沒人知道了,這也就是專案中的第二種需求,即非功能性需求,處理好這20%的非功能性需求才是真正體現乙個開發者能力的地方。
扯了這麼多,說說實際的工作內容:
前期:
* 需求分析
* 框架搭建,技術選型,如選擇本地化儲存方案 ,網路層的架構設計,可以在這個階段把一些好用的第三方框架引起來,如 fmdb、flex、afnetworking、asyncsocket 等,這個階段非常重要,因為維護**的時間永遠比開發功能的時間長,要盡力建立有彈性、易維護的系統
* 與後台對接,磨合期間偶爾會有「前端後端打架」的情況發生
* 可能還會有其他的前期準備,如建立 rsa/aes 的安全方案、國際化的策略等
中期:
* 參與產品設計
* 完成功能性需求
* 重構與優化
後期:
* 修復 bugs
* goto 中期:
* change 是軟體開發中的真理,不會有結束的時候,除非是乙個只有10行**的程式
不要敷衍自己開發的產品,否則就是浪費自己的生命。
直接物件:
* 產品
* ui
* ux
* 測試
* 後台
* 其他前端
間接物件:
* 所有和公司有直接關係或間接關係的人。
如果你以為只管「打點好」和產品相關的7、8個人你就錯了,討論小組的背後可能有上百人的暗中參與,有些沒有節操的產品會在你面前固執己見、冠名堂皇,在領導面前「通敵**」。
其實開發中大多數問題都是「臨時」遇到的問題,只有平時積累的夠多,才能游刃有餘的解決。上面的這些技能只能算是拋磚引玉,更多地學習主要還是在自己遇到問題或者遇到不懂的知識點的時候,每乙個困難都是財富,都是乙個學習的機會,像 coredata、設計模式之類的技能你難道不學嗎?興趣和遇到問題的切入點很重要,不要敷衍自己,多看書,書看的越多,越會覺得自己無知。
另外,技能這塊也不要把關注點全放在 ios 的平台技術上,做開發的一定不能偏科,有時候你覺得自己只是某一方面比較薄弱,比如說「我就是記憶力不行」,其實差距是全面的,在下面的【學習資源】裡我除了列舉 ios 相關的資源以外,也會列舉一些我看過的、覺得對開發提公升有幫助的書籍。
怎樣成為乙個高手?顯然高手總是通過自學產生的。
對目前的 swift 來說,我是堅定的反對者,這種立場其實和我最開始時不一樣:
swift 目前非常不穩定,連 xcode 都對它相容的不好,每次 swift 有個稍大的更新就像是把專案推倒重來,而且也不可能完全只用 swift 來開發乙個專案,基於 objective-c 和 c 的框架有很多,ios 是開發離不開 c 的。
除此之外,我覺得 oc 比 swift 更加靈活,前者更依賴執行時,後者幾乎就是編譯時,oc 能做很多 swift 做不了的事情,如執行時的關聯物件等,不過這並不是說 swift 不重要,只是一定要排乙個優先順序的話,我覺得短期內 swift 無法對 objective-c 造成太大影響,所以先學好 oc 還是更好一些,而且技多不壓身嘛
xcode 對 swift 的支援越來越好了,特別是 7.1.1 這個版本,對基本的型別判定、文件檢索,甚至是對列舉型別的支援,比如像這樣的語法:.scaleaspectfill
,支援的已經很好了,這在之前是不敢想的。
ray wenderlich
objc.io
mattt thompson
《objective-c基礎教程》
the big nerd ranch的英文原版教程:《objective c programming the big nerd ranch guide 2nd edition》、《ios programming - the big nerd ranch guide 4ed》,後者有中文版
《objective-c高階程式設計:ios與os x多執行緒和記憶體管理》,對於 oc 的記憶體管理和 block 的實現來說,該書是必讀之書
《effective objective-c 2.0 編寫高質量ios與os x**的52個有效方法》,涵蓋的點很多,但是有些地方該深入的時候沒有深入
《head first 設計模式》,比「四人幫」的《設計模式》門檻低、容易消化,對於想提公升模組設計能力來說,該書是必讀之書
《**大全》,這本書很厚,建議選擇自己感興趣的部分跳讀,技術性的東西雖然不多,偏理論,但是當你想在團隊中推廣某些觀點的時候,你絕對需要用到裡面的理論知識,否則很難推廣或者讓人信服
《uml和模式應用》,想做架構師嗎? 不會 uml 哪行
《深入理解計算機系統》
在社群中交流,如 stackoverflow、github 或國內的一些論壇,交流總是有用的。
iOS 聊聊第一響應
當檢視中有uitextfield或者uitextview等這些可以輸入的檢視時,可以用以下 獲取第一響應 uiview firstresponder keywindow performselector selector firstresponder uiview firstresponder key...
iOS 聊聊加密的那些事
情景 網頁載入快取可能會用到nsurlcache,每次請求會返回乙個urlcacheresponse.現在我們需要將每個url儲存在caches檔案中,為了加密,要對每個url使用md5加密技術。相應的 段是 const char cstr str utf8string unsigned char ...
mac開發 ios開發
但是,任何乙個作業系統上,只使用開發語言就去開發程式是不行的。還需要有介面庫。尤其是支援object c的介面庫。mac上使用oc開發應用程式,都會使用xcode這個ide,整合開發工具,xcode中整合了gui介面庫。可以直接拖動控制項到介面上。objective c是一門語言,而cocoa 是這...