本人也是衆多Android開發道路上行走的一員,聽了很多大神的知乎live,本身也看了很多書,也和很多前輩交流過,因此在這裏分享一下Android開發應該學習的書籍以及知識,固然,也包括一些方法,但願對更多想進入這個行業的人有所幫助。
衆所周知,如今移動開發早就不是最熱門的程序員職業了,若是你沒一點真功夫,僅僅靠兩三個月的集訓已經很難在這個行業中佔有一席之地了。所以,想擁有真正的「真本事」是要花至關長時間的,個人這篇學習計劃主要面向的人羣是勇於花時間,切能堅持下來的同窗,好比說:想從事Android開發的在校大學生,想進階的在職開發人員,以及由於我的緣由想從其它方向轉向Android開發的程序員。程序員
怎樣作可讓初學者以爲編程是容易學的,是有趣的?那天然就是獲得一些能快速看到結果的反饋,本身寫的程序能馬上運轉起來並實現一些效果,是很是鼓舞人心的,所以這個階段的第一目的是經過學習能真正動手寫兩個程序,並能獲得快速反饋,所以推薦一些相對簡單的書籍。面試
推薦書籍:《Head First Java》,《Java從入門到精通》
《Head First Java》不用多說,業界公認的Java入門佳做,若是你的編程底子很是薄,能夠經過這本書快速學習Java。而對於這本《Java從入門到精通》,也許不少人嗤之以鼻,以爲是隻教表面,不深挖原理的淺薄書籍,不必看,可是這本書的好處在於,當你徹底沒接觸過編程,沒接觸過計算機知識的時候,這本書是能夠帶你快速上道的,它不只僅只教如何使用Java語言,它連如何搭建開發環境這種對於出入門的人來講很是頭痛的事都有詳細教程,所以,它對於剛剛入門的人來講,是很是友好的,若是,你沒有任何編程經驗,但想從Java入門編程,這本書是很是好的。理論上來講,這兩本書選一本閱讀便可。算法
推薦書籍:《第一行代碼》
若是要開始這一階段,請務必把Java初級階段入門完成後再嘗試。那怎樣算是完成呢?起碼用書中的知識本身寫過Demo,而且測試成功,例如,最基本的Java知識,包括:繼承,接口,字符串,內部類,匿名類,集合,簡單的多線程,Socket網絡通信等等都有過親自的實踐,第一階段就算是完成了,你說反射,範型,枚舉,多線程,註解等知識你沒辦法理解?沒有關係,這些都是第二階段攻克的主要目標之一。
至於第一行代碼這本書,已經無需我廢話,這在中國基本已經成了Android入門的標準教材,書中涵蓋了Android開發知識的方方面面,例如如何搭建Android開發環境,Android四大組件的使用,Android網絡通訊的基礎,如何使用開源庫,如何使用Git,如何進行本地存儲等等。只要跟着這本書,把書中的每個Demo都本身手動實現一遍,並在學習完本書後,本身試着綜合全部已學的知識開發一個能本身玩的小app,第一個大階段——入門,就算完全結束了。
進階:持續攀登技術之峯
若是你已經完成了第一階段,而且已經小有自信來到了這裏,那我要說,進階階段可能會讓你掃興,由於進階階段的學習量多是入門階段的數倍,甚至上10倍,可是,既然已經走到這裏來了,天然不能放棄。數據庫
推薦書籍:《Java編程思想》,《Effective Java》
若是你已經讀完了Java的入門書籍,也許會以爲:「Java不就那麼回事嗎,用起來也挺簡單啊,別跟我講什麼理論,我只要會用就好了!」但實際上,這個階段也許會顛覆你以前對Java的大部分認知,咱們將從Java的高級特性以及底層原理來給咱們的Java知識樹添枝加葉。
《Java編程思想》這本書近乎等於Java的權威教材,它詳細講解了Java的大部分細節,翻開目錄,也許你會以爲許多知識你都學過,可是請相信我,這本書值得一字一句的從頭讀到尾,讀完將讓你的Java內功功力大進,上升幾個級別。固然,讀完這本書是考驗人毅力的一大挑戰,由於這本書的確有些晦澀難懂,常常看一遍看不明白,須要多看幾遍,而且這本書近乎800頁的篇幅(實際上這本書的頁數更多,只不過最後一張圖形用戶界面和Android開發關係不大,能夠不看)實在是至關挑戰讀者的耐力。
《Effective Java》是Java使用者必看的書籍(不管你是哪一個方向),它以幾十條實戰經驗總結做爲索引,讓讀者從各處細節上掌握Java的使用技巧,從而編寫出高效可用的Java代碼,當把這些經驗瞭然於胸時,帶着這些經驗寫代碼,將會節省你大量的時間和代碼量來獲取到足夠多的編程經驗。編程
推薦書籍:《Android開發藝術探索》,《Android源碼設計模式解析與實戰》
學習完《第一行代碼》後,你可能會使用Android SDK中提供的許多類庫來開發Android應用了,可是,只會使用是遠遠不夠的,咱們必須掌握它們的運行機制和原理,以及咱們還應該學習自定義一些相似與系統提供的組件的工具(例如自定義View),學習這些知識,以上兩本書再好不過了。它們對於這部分知識的講解能夠說是相輔相成的,這兩本書一樣是須要花大力氣去閱讀的,當這兩本書被你完全吃透之後,1到3年經驗的Android面試中,你基本已經能夠拿下所有和Android有關的問題了。
若是你已經吃透了《Java編程思想》想必你已經和23種設計模式的其中幾種見過面了,但也許還不是特別有感受,這時候就須要系統的學習了,《Android源碼設計模式解析與實戰》不只講了Android源碼,更精講了各類設計模式,學完這本書能夠說是一箭雙鵰,又能學習源碼,又能系統的學習設計模式。
設計模式
當你第3階段完成之後,實際上就能夠將這第5階段和第4階段並行執行了,這部分的知識絕大部分是書籍中所沒有的,所以須要結合網上的博客文章和本身的大量動手實踐來學習。首先,你已經在《第一行代碼》中見過幾種開源庫了,如今,爲了高效開發Android應用,咱們應該學習如下幾類主流Android開源庫的用法和原理,以下所示:性能優化
1.網絡請求(Retrofit2)
2.圖片加載(Glide/Fresco)
3.事件總線(EventBus/Otto)
4.異步操做(RxJava2)
5.依賴注入(ButterKnife/Dagger2)網絡
括號中列出的是該類開源庫中的表明做,有些種類我列出了兩個,可是初學的時候只須要挑一個學習就能夠了。固然,開源庫的種類遠不如這些,還有例如數據庫操做,圖片選擇器,大圖查看器等許多種類,可是這些庫用到的頻率並不及以上五種,以上五種開源庫幾乎能夠說是在任何app中都要使用到的,學會它們不管是對你開發應用的效率仍是應付公司面試都頗爲有用。
學習開源庫的方法主要是先在網上找到一篇靠譜的文章簡單讀讀,若是你英文好的話也能夠直接去它們的項目主頁去讀英文文檔;而後把它們的簡單示例寫個demo或者直接用在你正在開發的我的項目中,用上去之後再根據代碼,仔細研讀解析的文章或文檔,而後修改這些代碼,嘗試些高級用法。等你閉着眼睛都能在腦中默唸出這些庫的使用流程的時候,就能夠再找一些深刻分析的文章或者親自去看它們的源碼來學習它們的原理;學習原理是很是重要的,特別是在大公司的面試中,考察你是否理解你使用的庫的原理也是至關重要的一個環節。到這裏Android開發相關的基礎理論知識就已經大體學習完了,這一節既然叫實戰環節,那麼你大量的編碼量是少不了的,做爲一個初涉編程的學習者,天天都保證必定的代碼量或技術書籍的閱讀量是少不了的,只有鍥而不捨的大量練習,解決實際開發中的大量問題,技術才能真正的快速提升。數據結構
開頭已經說過,Android開發已經不是隨便一個外行靠幾個月的突擊就能進入的低門檻行業了,市場上真正缺乏的是更專業的開發者,或者說是中高級工程師。做爲一個非計算機專業的非科班生來講,制約人發展的每每就是計算機基礎知識,基礎是個很奇妙的東西,不少人以爲基礎枯燥難學又感受不知道該怎麼用,因而就放棄了基礎的學習,但實際上基礎這東西就像練體能,你在踢足球的時候射門剷球,頭球倒鉤,看起來當然很帥,可是在一場90分鐘的球賽裏,若是沒有體能,會在比賽結束前就先累趴下,而計算機基礎就相似於體能的做用,它供給你一個更專業的視角來看待編程和寫代碼,讓你在不知不覺中寫出高效的程序。
若是你一個還未畢業的大學生,那你無需作更多的計劃,只須要把學校的專業課每一科都學好就足夠了,若是你能在大學期間參加一些這些方面的比賽,例如ACM,不管對你的編程能力仍是簡歷都大有益處。
可是若是你已經踏入工做崗位,那確定是沒時間把大學全部的專業課都學一遍且學的很深了,那能夠參照我如下的計劃,抓住基礎中的重點來學習。
在我看來,和Android開發關係最密切的三門基礎課:計算機網絡,數據結構與算法,操做系統,下面會爲每一個種類推薦相關學習書籍。
網絡:《圖解HTTP》,《圖解TCP/IP》
這兩本書都很薄,講的網絡知識也不會特別深,所以學習起來是很是快的,其它一些講解網絡的書籍,例如《HTTP權威指南》很是厚,也很晦澀難懂,雖然把HTTP講的很是透徹,可是閱讀起來耗費的時間太長,也很是費精力,所以在職的初級程序員就不推薦這樣的書了。而這兩本書幾乎涵蓋了Android開發的所用到的大部分網絡知識,例如HTTPS,HTTP,TCP/IP的原理,以及一些基礎網絡知識例如七層協議等等,應付面試中網絡部分的問題也是足夠的了。
數據結構與算法:《算法4th》,《劍指offer》
《算法》是一本數據結構與算法的入門書,而且是用Java語言做爲示例,所以若是你沒有任何算法方面的經驗,這本書是再適合不過了,即容易入門,又由於熟悉相關語言而不會感到陌生。
而《劍指向Offer》則是面試前準備的必備書籍,在大公司的面試中,無數算法題都出自本書,若是你沒有跳槽的意願,本書能夠提高你的思惟併爲你將來的跳槽早作準備,若是你即將找新工做,那本書更是必備的武功祕籍。
我目前也處在這個階段,剛剛準備開始閱讀這兩本算法書籍。
操做系統:
因爲這個階段本身還沒達到,因此還不知道有哪些比較合適的書籍。聽羣裏的朋友說《30天構建操做系統》是一本不錯的書,但我本身尚未去了解過,這一部分等我學到這部分的時候再去詳細瞭解和補充。
高級:拓展知識面和大量實戰多線程
推薦書籍:《深刻理解Java虛擬機》,《數據結構與算法—Java語言描述》,Android/Linux底層書籍
在大公司的面試中,不管校招仍是社招,都免不了問兩道到三道Java虛擬機的題,例如Java內存模型,gc算法等等,所以《深刻理解Java虛擬機》這本書主要就是爲了學習上述問題而存在的,固然,不只僅是應付面試,讀完了這本書,也算是完全理解了Java底層的運做機制。
在第六階段學完算法的同窗也許會發現,《算法4th》並無包含動態規劃等算法知識,而《數據結構與算法—Java語言描述》正是補足這類知識點的好書,固然,這本書也不是必需要看的,若是你對本身的算法功底有更高要求,想深刻學習,或者之後乾脆想向這方面轉行,而且在本身學有餘力的狀況下就能夠向這方面多下功夫,這本書看完後,若是你還不知足,能夠嘗試着挑戰一下傳說中的無字天書——《算法導論》。
做爲一個基於Linux內核的操做系統,Android的許多運行機制都和Linux有關,若是你想更深刻了解Android底層的內容,例如Native層的運行機制,Linux內核的原理等等,就能夠選擇一些Android和Linux底層的書籍看看,至於具體是哪些書,我尚未了解過,若是之後我向這方面深刻擴展(固然也可能不會),我再回來補充。
除了以上這些推薦的書籍,咱們還有另一些知識值得關注,例如Kotlin。Kotlin今年正式被Google正名,成爲在Android上開發應用的首選語言,固然,市場上的應用從Java向Kotlin全面轉型是須要至關長的時間的,所以Kotlin的學習順序被我放在了稍微靠後的位置,可是,若是你已經完成了上述的全部階段,不知道接下來該學習什麼的時候,你就應該馬上開始學習Kotlin了。
除了新語言之外。一個好的開發者和其它開發者的一個很重要的區別就在於代碼是否低耦合,高複用,這就涉及到了架構模式,架構模式在Android中最經常使用也是最流行的就是MVP,所以學習MVP也是一件頗爲重要的事情。
這裏雖然列在了下面,可是我認爲Kotlin和MVP的學習順序應該在深刻學習算法和Android/Linux底層以前,畢竟深刻的算法知識和過於底層的系統知識和應用開發實際上已經相距甚遠了,雖然學習它們能夠提高思想,可是在某些方面來講,這些方向的具體知識已經和Android開發無關了,所以這兩塊是選學內容。
以上我列出的書籍,除了《Head First Java》我都是親自購買並閱讀過的(第六階段及之後的書尚未讀完),但在這裏我還想推薦一下不少網友都推薦的好書,它們我雖然沒有看過,可是都口碑不俗,在這裏我把它們列出來。
《Java核心技術卷:卷1》,《Java核心技術卷:卷2》
這兩本也是Java方面的經典書籍,其中卷1是能夠做爲入門書使用的,而卷2則是高級知識的進階書籍。除了《Effective Java》不能被這兩本書替代之外,若是你讀了這兩本書,我推薦的其它基本Java書籍就不是必讀的了。
《Android羣英傳》,《Android羣英傳——神兵利器》
這兩本書是國內Android大神徐宜生所著,第一本能夠看作和《Android開發藝術探索》具備一樣做用的書,可是內容上比《藝術探索》略微簡單,且並不能徹底代替《藝術探索》,所以這本書能夠做爲互補書籍買來看看。而至於第二本《神兵利器》則是一本不可替代的書籍,你若是想找一本學習開發工具的書籍,這本書絕對合你的胃口,畢竟在Android開發的學習上,gradle,Android Studio,Git等工具的使用也是不容忽略的一大塊。
技術歷來都不僅是學習書本,書只是指明瞭學習的前進之路,可是想要真正有所進步須要把書中的內容用於大量實戰,我做爲一個小白也在持續學習的道路上奮力奔跑,但願和各位一塊兒鍥而不捨,最終拿到令咱們本身心滿意足的Offer,開發出能真正改變數萬人生活的好應用除開業務需求和環境限制,我我的是比較推崇低成本拓展的。萬事開頭難,「三過門而不入」的堅持並非每一個人都有,而能把現階段所掌握的去衍生去其餘的能力,是比較穩定的技術增值。「貪多嚼不爛」,先有深度,再有寬度,望共勉!若是你依然在編程的世界裏迷茫,不知道本身的將來規劃,能夠加入高級程序員羣:裏面能夠與大神一塊兒交流並走出迷茫。小白可進羣免費領取學習資料,看看前輩們是如何在編程的世界裏傲然前行。1.LiveDataBus2.Google官方架構組件3.Jetpack架構4.餓了麼通訊技術5.OPenGL6.音視頻7.人工智能8.Python9.性能優化10.Flutter等這些資料加羣639986248領取