天天看點

【幹貨推薦】Android開發該學習哪些東西?開篇:入門階段:快速上手,增加自信1.Java初級入門:2.Android初級入門:3.Java進階,颠覆初學的認識4.Android開發進階,以及設計模式的學習5.實戰環節6.計算機基礎知識補缺7.知識拓展結尾

開篇:

本人也是衆多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代碼,當把這些經驗了然于胸時,帶着這些經驗寫代碼,将會節省你大量的時間和代碼量來擷取到足夠多的程式設計經驗。

【幹貨推薦】Android開發該學習哪些東西?開篇:入門階段:快速上手,增加自信1.Java初級入門:2.Android初級入門:3.Java進階,颠覆初學的認識4.Android開發進階,以及設計模式的學習5.實戰環節6.計算機基礎知識補缺7.知識拓展結尾

4.Android開發進階,以及設計模式的學習

推薦書籍:《Android開發藝術探索》,《Android源碼設計模式解析與實戰》

學習完《第一行代碼》後,你可能會使用Android SDK中提供的許多類庫來開發Android應用了,但是,隻會使用是遠遠不夠的,我們必須掌握它們的運作機制和原理,以及我們還應該學習自定義一些類似與系統提供的元件的工具(例如自定義View),學習這些知識,以上兩本書再好不過了。它們對于這部分知識的講解可以說是相輔相成的,這兩本書同樣是需要花大力氣去閱讀的,當這兩本書被你徹底吃透以後,1到3年經驗的Android面試中,你基本已經可以拿下全部和Android有關的問題了。

如果你已經吃透了《Java程式設計思想》想必你已經和23種設計模式的其中幾種見過面了,但也許還不是特别有感覺,這時候就需要系統的學習了,《Android源碼設計模式解析與實戰》不僅講了Android源碼,更精講了各種設計模式,學完這本書可以說是一舉兩得,又能學習源碼,又能系統的學習設計模式。

書上能夠給到的當然也隻是很局限的知識點,到了第四階段有着開發2到5年經驗的程式員們,可以給大家推薦一個騰訊的系統學習進階的課程,這邊附上官方群818520403

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天建構作業系統》是一本不錯的書,但我自己還沒有去了解過,這一部分等我學到這部分的時候再去詳細了解和補充。

進階:拓展知識面和大量實戰

【幹貨推薦】Android開發該學習哪些東西?開篇:入門階段:快速上手,增加自信1.Java初級入門:2.Android初級入門:3.Java進階,颠覆初學的認識4.Android開發進階,以及設計模式的學習5.實戰環節6.計算機基礎知識補缺7.知識拓展結尾

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等工具的使用也是不容忽略的一大塊。

結尾

技術從來都不隻是學習書本,書隻是指明了學習的前進之路,但是想要真正有所進步需要把書中的内容用于大量實戰,我作為一個小白也在持續學習的道路上奮力奔跑,希望和各位一起持之以恒,最終拿到令我們自己心滿意足的Offer,開發出能真正改變數萬人生活的好應用,諸君共勉