標籤:ios 開發 開發人員
行業現狀
雖然近幾年有大量的開發人員湧入移動端,社會上的各種培訓機構也越來越多,但是優秀的 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個人你就錯了,討論小組的背後可能有上百人的暗中參與,有些沒有節操的產品會在你面前固執己見、冠名堂皇,在領導面前“通敵賣國”。
技能列表
- 記憶體管理,不需要防禦式編程,但是大腦一定要清晰的知道自己使用的對象的記憶體情況。
- UIKit,熟練掌握,能不看文檔就知道常用的控制項有哪些方法以及能做什麼。
- Storyboard(xib)
- Auto Layout 和 Size Classes,前者更重要
- 各種手勢處理
- KVO\KVC
- GCD
- delegate(不要與代理設計模式混淆)
- Block
- Notification
- APNs,遠程通知
- 檢視狀態儲存
- …
其實開發中大多數問題都是“臨時”遇到的問題,只有平時積累的夠多,才能遊刃有餘的解決。上面的這些技能只能算是拋磚引玉,更多地學習主要還是在自己遇到問題或者遇到不懂的知識點的時候,每一個困難都是財富,像CoreData、設計模式之類的技能你難道不學嗎?興趣和遇到問題的切入點很重要,不要敷衍自己,多看書,書看的越多,越覺得自己無知。
對了,混合開發也要關注一下。
關於Objective-C 和 Swift
對目前的 Swift 來說,我是堅定的反對者,這種立場其實和我最開始時不一樣:
Swift 目前非常不穩定,連 Xcode 都對它相容的不好,每次 Swift 有個稍大的更新就像是把項目推倒重來,而且也不可能完全只用 Swift 來開發一個項目,基於 Objective-C 和 C 的架構有很多,iOS 是開發離不開 C 的。
除此之外,我覺得 OC 比 Swift 更加靈活,前者更依賴運行時,後者幾乎就是編譯時間,OC 能做很多 Swift 做不了的事情,如運行時的關聯對象等,不過這並不是說 Swift 不重要,只是一定要排一個優先順序的話,我覺得短期內 Swift 無法對 Objective-C 造成太大影響,所以先學好 OC 還是更好一些,畢竟技多不壓身嘛
學習資源
- 官方資源
- 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多線程和記憶體管理》
- 《Effective Objective-C 2.0 編寫高品質iOS與OS X代碼的52個有效方法》,涵蓋的點很多,但是有些地方該深入的時候沒有深入
- 《深入理解電腦系統》
- 在社區中交流,如 Stackoverflow、GitHub 或國內的一些論壇,交流總是有用的。
關於 iOS 開發