一位iOS開發者的進階之旅

zhangferry· 2020-09-04

背景

這篇文章來源于v2ex上的一個帖子:"iOS開發有什么國人寫的比較好的書籍推薦?"(原文鏈接)。這里匯總的基本都是lujie2012的回答,另外我還附帶了一些他與別人的討論內容。雖然帖子題目是推薦iOS書籍,但設計內容已經超出了這個題目,在我看來其中還迸發出很多有意思的觀點,所以就想把內容整理出來。在經過其本人同意之后,有了如下內容,希望對大家有所幫助。

正文

推薦書籍

本人之前是從 Object-C 開始入門 iOS,全部自我學習寫項目找工作混飯吃。因為之前犯過大部分 iOS 開發者犯過的錯,沒有深入學習知識,沒有獲得長進。我決心重新在 iOS 方向深入認真的投入一次,看自己可以扎入的有多深。

我開始沒有關注 Swift,現在 Swift 成熟了,所以決定從頭開始學習 iOS 的一切東西。后面 19 年開啟 Swift,二次學習 iOS 開發,也感覺到突破了自己頭頂那塊天花板。我10個月看了10多本自己買的書,還為業務補充了好多知識,有堅持不下去的時候,但是就想把項目上線。最后克服了困難,回過頭有收獲和總結,我現在愛上了看技術書籍,鉆的越細越發現有趣,也想去看算法了。類似寫論文一樣,沒有秘密,直接分析到底。目前在模塊化接入 Flutter,React Native,兩端開發速度不一樣,某些功能由 H5 做,我們就很閑了?,F在的目標差不多就是把 Flutter 玩轉,基本是二次從頭學習 iOS 花了 1 年時間告一段落。

期間啃的書,有些是objccn里喵神的書,這些書對iOS開發幫助還是挺大的,其余都是些比較經典的技術書。

這些書我都看過一遍。(以下是筆者對書籍匯總成的一個表格)

分類 書名
Objective-C Objective-C程序設計
Objective-C高級編程
Effective Objective-C 2.0
Swift Swift權威指南
Swifter 100個Swift2 開發必備Tip
Swift進階
Swift常用算法
函數式Swift
iOS iOS數據庫應用高級編程
iOS動畫核心技術與案例實戰
iOS Auto Layout 開發秘籍
高性能iOS應用開發
iOS測試指南
iOS應用逆向工程
LLVM COOKBOOK 中文版
AV Foundation開發秘籍
Core Data 應用開發實踐指南
Core Data
其他計算機書籍 SQLITE權威指南
圖解數據結構與算法
數據結構與算法經典問題解析(Java語言描述)
數據結構教程
Java 9編程參考官方大全
Java并發編程實戰
深入理解Java虛擬機
深入理解Nginx
Tomcat內核設計剖析
C Primer Plus 中文版
音視頻開發進階指南

另外需要補充的內容還有,tomcat 源碼、nginx 源碼、關于 HTTP 協議后端相關的東西。很多東西,寫不成書,因為本身沒有多少內容,有些東西只有國外有,但是 400 塊,沒有翻譯版本。例如關于布局,從frame-》 constriants-》 archor-》到 StackView 其實蘋果也是在不斷的提供解決方案,目前最好的布局方案就是 stackview + anchor + constraint,但是沒有這么一本介紹這些內容的書,我也是翻邊了官方文檔,在各自項目中看到蛛絲馬跡去思考對比的。

其他學習途徑

老話長談,最好的資料是蘋果官方開發者文檔,官方的 WWDC Session。為了更深入理解蘋果產品,我把歷年的 WWDC 都看了一遍,從 2007 年 iOS6到2017年發布iphoneX,每年差不多 100 個介紹最新技術和解決方案的視頻,而且內容含金量還非常高。哈哈,學到了很多蘋果產品使用高級用法,體驗了好多產品介紹。

iOS 開發者一定要關注 boxue 網站,可以的話買個終身會員,下載博主的 app,看看他的項目架構,里面的視頻學起來。我 boxue 完成了 156 個 iOS 的視頻,終身會員。boxue 的視頻看一遍懂一點點,過段時間在看,又有一點點理解,例如 RxSwift,Protocol,Sequence 這些。另外可以結合 objccn 里喵神的那三本書,我是買了一起看的,它會使你對 swift 的寫法和運用更高階,讓你的思想更接近 apple 官方或者大牛。例如序列化,持久化,函數編程,這些流行的概念可以帶入項目中。

真心經驗分享,中文書籍的東西只能看到 30%的技術,英文書籍的東西可以看到 50%,還有 50%在官方英文文檔,各位一定要學好英語,在官方找一手資料和解決方案。這樣就慢慢可以成為 Contributor,為社區貢獻代碼和解決方案,成為開拓者了。不然永遠只是旁觀者,玩技術,就希望把它玩到極致對吧,好比玩音樂,玩音樂的的境界可以看 Vista 2002 年演唱會。

另外,以上學習最難的是什么,是英語水平?。。?! 我現在每天學習英語,英語水平上來了,感覺發動機動力杠杠的。二手知識基本過時,想要成為一流,那么英語水平就得要一流,差不多雅思 7 分這個水平。寫代碼看資料,覺得不是一個等級哦。

感謝公司提供的英語學習網站,https://english-bell.com.tw/default.aspx 。我大概充了 1 萬 8,堅持每天 25 分鐘的一節課學習 DME,現在學習了 300 天,學習英語推薦:購買朗文當代+DLL ebook + English bell,使用 SKype 上課,菲律賓老師 24 小時可以學習。

更多的討論

如果學 iOS 都沒有用過 CoreData,或者 Sqlite 進行持久化,那么幾乎不可能成為高階程序員。CoreData 固然難用,難學,但是我個人認為必須耐心學完,必須每個項目都使用,里面的設計思想和理論都很有用,每年的 WWDC 都有 session 講解這一塊。

iOS 本身知識的書籍不是很多,更多的是需要你去查閱官方文檔去理解學習。有很多內容是涉及視圖繪制技術,音頻,網絡這些,他們本身是最基礎的東西,但是蘋果沒有給你知識輔導,不自學這些,只會使用蘋果API,永遠都只懂皮毛。覺得 iOS 端沒有東西,其實東西多的很,例如 socket 編程,什么語言都可以實現,什么平臺都有,但是 iOS 沒有告訴你這個很重要,你就不學,不深入,調用一下 API 就好了。其實這才是真正的技術,再深挖就是 TCP/IP 協議,藍牙協議,學編程要不要學這個呢?學 iOS 要不要學這些呢,肯定的,做程序員,不學這些就永遠停留在初中級水平,35歲等著被淘汰。

當你學了這些底層知識,例如7層網絡協議,就會明白什么技術和語言都是起始于二進制。字節編碼,變成 Unicode,變成語言。那么語言寫好的代碼,變成什么呢?寫好的代碼變成匯編語言、command、再變成二進制,用戶安裝二進制,二進制再在運行環境變成 code,再執行邏輯。不懂編譯器原理,怎么優化代碼,怎么去做安全加固,反 hook ?

如此思考,HTTP 到數據的展示是最簡單的編程工作。最近我在想一切的數據通訊,例如家里的電視遙控器,怎么做數據交互,轉換,傳播。光波,紅外線,wifi,5G,想象最底層的實現和全路徑思考才有意思。所以,計算本科教育雖然水,但是現在想想那時候用的濾波器和調制解調器,上模電不知道干什么,現在工作后,慢慢都明白了,這就是本科專業教育的本質和作用。系統的教育才是有意義的,為什么學高數,現在才多少明白了些。

對了,你對加密了解清楚嗎? HTPPS 怎么實現的知道嗎,看過源碼實現嗎?程序員對加密都不清楚,那真的不算高階程序員。openSSL 庫,都可以讓你玩很久。iOS 也好,Android 也好,只是各自技術封裝的一個平臺,用于解決一定的問題。當你看透本質了解一個平臺真正的東西,那么你也將知道技術的發展都是有著相似的規律的。

有個題外話,iOS 有出路么?你把他當成 HTTP + 頁面來玩天花板確實很低,但你以iOS為出發點,研究整個系統體系,那天花板無限高。未來 20 年,領先技術和先進應用基本都會是移動領域帶領的變革。

不要覺得iOS開發上限很低,iOS 崗位也很細的,你可以玩日志系統,埋點系統,推送系統,crash 系統,socket 聊天系統,實時在線系統,視頻系統,相機系統,地理位置系統,三維系統,AR 系統,聲音系統,安全系統。玩的東西多了呢!沒有飯吃?沒有前途?大部分人是崗位,是項目驅動,我也是,沒有事情沒有遇到難題就不會進步。但還是要自我驅動,不斷往上拔,才能離那個最高處的天花板更近一些。

好比玩音樂,寫歌作曲,你能隨心所欲組合,基本是就是高級人才了。寫代碼一樣,要玩它,玩技術,不然白費了那些年的教育。對于業務和技術,等你技術積累到一定程度,我個人傾向于先做技術專家靠譜一點。誰是榜樣呢? JSPatch 的作者就是榜樣,被挖到螞蟻 P8 !時間對每個人都是公平的,記著不要重復勞動,要迭代你的技術,不斷思考??醋畹讓拥臅?,思考最底層的原理,你就不會迷茫。

問答環節

問:CoreData 有什么特別好的場景使用嗎,我做了五年了,都是用的 sqlite 。

答:CoreData 最大的好處是他們的設計思想和結構,可以買來 《CoreData 應用開發與實踐》+ 《Core Data》 看看。我也是看了這兩本才明白 CoreData 真正的含義,但它也有個很大的缺陷:沒有加密?。。。?! 大部分項目采用 Sqlite 是為了加密!本質 CoreData 底層也是 Sqlite,它就是對Sqlite的一層封裝。你想想手機相冊 1 萬多張照片,他們的存儲和檢索,不知相冊,官方很多APP應該都用了 CoreData 來實現。會玩 CoreData,肯定會玩 Sqlite 。最好在項目里使用,用著用著就熟練了。Sqlite 做版本管理和遷移更方便,直接 SQL 操作數據庫。我的建議是最好兩者都學一下,都用起來。

問:我也一直在學習前端跟 iOS,為以后做獨立開發者進行技術儲備。但我從來不去研究背后深入的技術原理,CSAPP(Computer Systems A Programmer's Perspective 中譯:深入理解計算機系統) 包括操作系統相關的書我至少讀了 3 遍,但這些跟 IOS 開發基本上半毛錢關系都沒有,因為 APP 跟操作系統原理至少離了十萬八千里的距離,另外就是這些底層知識根本用不上,大部分獨立開發都是業務驅動的,有錢才有技術研究的需求,除了音頻、視頻等特殊算法場景,大部分技術方面的需求都是業務驅動的 UI 交互跟業務計算。

答:不爭辯,我之前想說明一般程序員和高階程序員解決問題思路問題。學習 7 層協議,不是造輪子,是知道水的源頭。平臺語言個有喜愛,蘿卜白菜各有所愛,興趣是最好的老師,好奇心是最好的動力。小程序,Weex,React 不是不會寫,API 文檔看一下,組件模塊用一用,市面上什么樣的 APP 搞不定?但是性能優化,高級特性,沒有足夠功力你能搞定?前端目前大量時間涉及 UI 開發,后端需要算法,如果不自己去補充知識,那么所謂大前端天花板當然低。阿里前端高 P 多還是后端高 P多,當然是后端高 P 多啊。But,不管哪個方向,最重要是成為專家。成為專家只看到自己項目范圍內的知識肯定不夠,前端不能看后端知識嗎?我把 tomcat,ngnix,spring 源碼都看過,當然也忘記了,但是我就是想知道數據通道怎么建立,TCP 怎么維護。google 牛皮就是發現目前協議不行,自己改協議、加密算法、HTTP2 通信、消息協議、TCP 協議,它敢于創新和實踐。目前的我相對業務和賺錢,我更關注技術,只會應用技術是大部分人,but 要成為專家只有極少數人才可以做到,因為那要學好多東西哦。

再舉個例子吧,Rx 這個東西,Java 有 RxJava, JS 有 Rxjs,iOS 有 RxSwift?,F在各個平臺都是把對方好的設計和輪子拿過來,編程思想和設計思想是一樣的。但是因為編程語言和平臺業務特性,沒有機會接觸更好的東西。那么就需要突破官方提供的限制,用編程思想來設計和架構改造自己的項目。如果只安于會基本使用語言,不精通語言,了解背后的邏輯,那么永遠是入不了程序員門的。

移動互聯網熱的時候,培訓班培訓一下就可以干活,拿高薪。但高薪不應該是你做程序員的唯一原因,互聯網發展的本質是技術結合業務,最后帶來經濟繁榮,技術永遠是第一驅動力。而程序員就正是創造技術,運用技術,推動互聯網繁榮最關鍵的一環,作為這個時代的弄潮我們應該很光榮才對。

我個人計劃是學習英語+開發,在成為高級開發的同時,不斷提高英語水平好,開闊自己的視野。東南亞,海外市場不是沒有機會。當然,在目前巨頭林立的環境下,你自己單干,那肯定一個浪花就沒了。

問:現在 APP 成本過高,中小公司基本都不重視這一塊了,而且目前同樣三年經驗的后端、前端、移動端,iOS 可能屬于比較沒有地位的了; 看你說的只會寫應用層就不行了?一般公司本來就是面向業務編程,能解決業務問題,移動端一般公司哪管你那么多技術問題;還有一個更嚴重的問題,就是一般去面試 iOS 的公司,面試造輪船的風氣實在太重了,大部分進去不就是個 UI 仔嘛,認清現實吧,本人面過其他技術,比 iOS好的多。

答:每個公司開發 APP 都想造航母,現在的確這樣。就是大部分進去之后變成 UI 仔,所以我才建議如果從事 iOS 或者移動端開發,一定要自我學習,自我突破限制。我之前和一位同事一起做 iOS 端,后面他轉了 JAVA 還升職了。But我始終認為我們項目的技術解決方案和技術不夠強,不是沒有業務,業務好的很,但是就是感覺移動端開發節奏和技術體系太碎片,每個人一個模塊,最后重復勞動,效率還不高。對于這樣的現實,肯定需要提升自我去解決,而不是等待機會。也正因此,產生了 Weex,React Native,Flutter 這樣快速解決兩端,熱部署的技術,解放 UI 仔。

不討論了, 看 Flutter 文檔了。iOS 有沒有人要,肯定要,前提你真正的熱愛寫代碼,可以分析問題,解決問題,了解編程本質,精通OC、Swift語言,熟練前前后后一個 APP 的全部 API 和細節實現。好比相機,你只會 Github 上找一個高 Star 的庫用用是不行的,那你永遠不能體會蘋果原始 API 設計思路,做不到隨心所欲的使用。希望大家有時間多琢磨,想做一個優秀的程序員,放大了說想成為一個優秀的人,都是需要不斷學習,不斷成長的,大家加油吧!

丰禾棋牌官网1369 股票配资平台哪个正规 江西时时彩人工计划 一般人炒股能赚钱吗 海南4+1 今日天津快乐十分开奖 目前最好的炒股软件 重庆时时现场直播视频 北京11选5规则 猪肉股票走势 体育福建31选7开奖