學習計劃

2016年過的很快,回顧這一年發現自己的能力并沒有提升多少,曾經有位老司機給我說,每天都在寫代碼,但是寫的核心代碼很少,也就是說我們都在寫義務,寫UI,寫一些重復的代碼。對此我也發現了這個問題,如何才能提升自己的核心編碼能力呢,首先就是要有穩固的基礎知識。因此在2017年我也為自己定下第一個目標,看書,做記錄。

1.讀書計劃

對于我來說,我不是一個特別喜歡讀書的孩子。網上很多關于iOS進階的書籍推薦,對于我來說 根據我自己想讀的,我列出了幾本,有些我已經看過了,但是都是籠統的看了一遍,我需要的是精讀,所以今年給自己訂一個目標,每看完一本書,就堅持寫幾篇對應的博客,加深一下理解。下面這幾本書是我看的公眾號,有一個列出的書單,我覺得和自己的很像,就直接拿過來了。

  • 編寫高質量iOS與OS X代碼的52個有效方法 (Effective Objective-C 2.0)
    這本書介紹了一些OC的語法技巧,runtime,內存管理等方面的知識,確實很不錯,陸陸續續算是看了一遍,但是都沒有認真記錄,所以趁著2016還沒有結束,我打算再認真的看一遍這本書。非常推薦!
  • iOS與OS X多線程和內存管理(Pro Multithreading and Memory Management for iOS and OS X)
    這本書詳細介紹iOS的內存管理,不厚,200多頁好像,之前也算讀過一遍,不過是過目就忘,但是不妨礙我認為這本書絕對算是想要學習iOS內存管理,block的最好的書,沒有之一。 重點推薦!
  • iOS.Animations.by.Tutorials.v2.0
    這是Raywenderlich出版的一本關于iOS動畫的書,Raywenderlich的書是真不錯,基本上每一本都是精品。不管是入門的書或者是進階的書,強烈推薦去Raywenderlich的網站里面找找你想要學的。今年花了不少時間在動畫學習上面,但是如果有時間,這本書我想我應該要再認真讀一遍。
  • iOS Core Animation: Advanced Techniques
    這本書同樣是介紹iOS動畫,但是側重于介紹CALayer等各種原理行的東西,Raywenderlich的書則側重在實踐上面,各取所需吧,但是如果想要深入了解iOS動畫的實現,這一本看完,基本沒問題,推薦!
  • HTTP權威指南
    這本HTTP權威指南我一直都想找時間讀一遍,可惜每次都是讀了一點點就進行不下去了。但是就是這一點點我也認為對我幫助非常大。如果想弄懂iOS中的網絡相關知識,強烈推薦先看一下這本書,絕對事半功倍!
  • iOS網絡高級編程(Professional IOS Network Programming)
    這本書我沒看過,網上有人推薦,因為我也想深入了解一下iOS的網絡知識,所以先列入清單。
  • Cocoa設計模式
    設計模式平時在工作中用到的總是那兩三種,單例,代理,我想這方面也是我的弱項,需要補一補了。
  • OS X與iOS內核編程
    這本書同樣是網上有人推薦的,如果我能把上面所有的書讀完,我想我會更加深入的想要了解iOS背后的東西了,不過這本書優先級我應該會放在最低。
  • Swifter - 100 個 Swift 必備 tips
    在之前的項目中一直是使用OC語言開始,但是現在swift這個語言已經很成熟了,如果啟動新項目的話,肯定是要啟動swift的,所以我應該盡可能熟悉swift的一些使用姿勢。

2.代碼計劃

代碼技術,主要是在新的一年里,應該注重自己的代碼質量,從代碼規范,代碼設計,代碼封裝,代碼重構等方面,提升自己的代碼的質量,在項目開發中要做到一些幾點

  • 要有一顆懷疑的心態
    對于引入的第三方的框架,一定要把源碼看明白,保證在使用時出現問題時能夠快速解決。
  • 要有一個造輪子的心態
    在開發項目的過程中,在很多頁面會用到相同的代碼,如何能夠提高開發效率,就需要我們把相同功能的代碼抽取到一個類中。需要注意的是在造輪子的時候,這個類的設計要盡可能的規范,讓別人在使用的使用能夠比較順手。比如封裝一個View的時候,需要注意同事支持Frame以及AutoLayout,既能鍛煉自己寫代碼的能力,又能讓調用者舒服。
  • 要有一個自信以及大膽嘗試的心態
    我們要對自己的代碼有信心,信心來源于哪里,這就要求我們對自己的代碼要足夠的熟悉,另外對自己的代碼質量要求很高的要求,大膽嘗試的心態,指的是我們要接到一個復雜的交互或者從沒有涉及到的技術的時候,要給自己先打個氣,自己先去從各個方面先去思考一下,先動手去做,不要直接退縮,這樣的話,永遠都不會有成長,而且時間久了,會讓自己有一個退縮的心態。
  • 保存一顆底層的心
    很多時候,我們都是去調用API去實現自己的需求,但是有的時候,我們并不知道為什么要這樣做,這樣就會帶來一個問題,如果某一個我們調用某一個API突然達不到我們的要求,這個時候我們應該怎么做。這就要求我們對這個方法,或者對這個框架有深入的了解。

3.開源代碼學習

從開始做程序猿的時候,心里就有一個夢想,就是要像github上面的那些大牛一樣,寫出一個個牛逼的框架,有n多start,但是到現在這個夢想還始終只是夢想。我在看這個開源的框架的時候,并沒有從根本上弄到這個框架設計的精妙之處,因此無法寫出像他們一樣牛逼的代碼。因此新的一年需要給自己頂一個目標,去看一些優秀的開源框架。

  • iCarousel
    這樣擁有8000多個start的框架,是一個實現各種旋轉木馬的效果的框架,它集成了我們常用類的功能,比如:UIScrollView,UITableView,UICollectionView ,具體牛逼之處只可意會不可言傳。
  • ReactiveCocoa
    這個框架有多么厲害,我想不用我多說大家都知道了。以美團為首的第一陣營是這個框架的重度使用者,而且他帶來的方便也是有目共睹的,因此必須要學會用它。
  • YTKNetwork
    為什么要學習這個框架,首先在我們的項目中的網絡框架使用的就是這個,所以為了更好的使用這個框架,我必須弄懂它。這個是猿題庫團隊基于AFNetWorking封裝的一套網絡框架,我們使用MVVM,然后結合這個框架使用感覺很好用。相比 AFNetworking,YTKNetwork 提供了以下更高級的功能:
    • 支持按時間緩存網絡請求內容
    • 支持按版本號緩存網絡請求內容
    • 支持統一設置服務器和 CDN 的地址
    • 支持檢查返回 JSON 內容的合法性
    • 支持文件的斷點續傳
    • 支持 block 和 delegate 兩種模式的回調方式
    • 支持批量的網絡請求發送,并統一設置它們的回調(實現在 YTKBatchRequest 類中)
    • 支持方便地設置有相互依賴的網絡請求的發送,例如:發送請求 A,根據請求 A 的結果,選擇性的發送請求 B 和 C,再根據 B 和 C 的結果,選擇性的發送請求 D。(實現在 YTKChainRequest 類中)
    • 支持網絡請求 URL 的 filter,可以統一為網絡請求加上一些參數,或者修改一些路徑。
      定義了一套插件機制,可以很方便地為 YTKNetwork 增加功能。猿題庫官方現在提供了一個插件,可以在某些網絡請求發起時,在界面上顯示“正在加載”的 HUD。
  • Aspects
    這個神奇的類,在我們的項目中我們有用到這個類去做一些埋點的操作。Aspects是一個輕量級的面向切面編程的庫。它能允許你在每一個類和每一個實例中存在的方法里面加入任何代碼。可以在以下切入點插入代碼:before(在原始的方法前執行) / instead(替換原始的方法執行) / after(在原始的方法后執行,默認)。通過Runtime消息轉發實現Hook。Aspects會自動的調用super方法,使用method swizzling起來會更加方便。

4.組件化之路

  • 組件化的來源
    隨著移動互聯網的不斷發展,很多程序代碼量和業務越來越多,現有架構已經不適合公司業務的發展速度了,很多都面臨著重構的問題。
    在公司項目開發中,如果項目比較小,普通的單工程+MVC架構,或者MVVM就可以滿足大多數需求了。但是像淘寶、蘑菇街、微信這樣的大型項目,原有的單工程架構就不足以滿足架構需求了。
    就拿淘寶來說,淘寶在13年開啟的“All in 無線”戰略中,就將阿里系大多數業務都加入到手機淘寶中,使客戶端出現了業務的爆發。在這種情況下,單工程架構則已經遠遠不能滿足現有業務需求了。所以在這種情況下,淘寶在13年開啟了插件化架構的重構,后來在14年迎來了手機淘寶有史以來最大規模的重構,將其徹底重構為組件化架構。
  • 為什么要組件化?
    在一個項目越來越大,開發人員越來越多的情況下,項目會遇到很多問題。
    業務模塊間劃分不清晰,模塊之間耦合度很大,非常難維護。
    所有模塊代碼都編寫在一個項目中,測試某個模塊或功能,需要編譯運行整個項目。
  • 洋蔥組件化
    目前我們業務線只有洋蔥數學,但是隨著業務線的不斷擴大,洋蔥物理,洋蔥化學,等各個學科就會慢慢涌現出現,如果把這些學科都放到一個項目中,就會造成整個項目的邏輯異常復雜,代碼量也會急劇性的飆升,因此今年可能會嘗試組件化。

5.總結

其實上面列出了這么多之后,我還有一些自己的想法,比如做一個屬于自己的項目,抽時間熟悉一些蘋果官方的設計文檔,深入了解蘋果的設計風格,以及深入了解iOS sdk的一些框架的實現原理,上面四條一定要完成的。如果有時間我會在繼續做更多的想法。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容