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