標籤:

如何通過自學成為一名 Android 應用開發工程師?

通過自學,如何成為一名安卓軟體開發工程師?需要讀哪些書?


感覺這個問題我是挺有回答資格的。
我是12年金融學專業畢業的,Android都是大學的時候自學的,畢業的時候做百度雲的Android開發,現在的職位是騰訊的Android高級研發工程師。

所以我感覺我是可以分享一下我自己自學Android的一些經驗,而且這些經驗也是通用的,比如我還有自學PHP用來寫後台開發等等,希望對大家在開發道路上能有一些幫助。
我們做工程師的一般都有助理,普通,高級,專家等的區分,我把自己的自學之路抽象成初級之路,中級之路,以及還未達到的高級之路。依次來分析下,如何能夠通過自學的方式,在技術之路上一步步提升。

1、初級之路 1.1 項目引路
對於自學的人來說,在邊做邊學的過程中是最容易起步的了。我的技術之路也是這樣開始的,當年參加創業大賽的時候,我們想做一個類似於Admob的產品,拉上一堆好友開始做產品,由於我們缺乏技術,所以自己也上場了。從一個實際的項目開始,學習java學習android一步步的完成產品的開發,在後續的過程中,我們還做了一款抄襲Bump的軟體叫做:《分享樂》以及一款聚會O2O軟體我也忘記啥名字了,也許你現在還能在豌豆莢上搜索到。

1.2 學習 Java JAVA核心技術(卷1) (豆瓣) Effective java 中文版(第2版) Android Android開發入門教程 (豆瓣)
這個階段我的學習資料主要來自於書本,那個時候是10年的時候了,網上資料還並不是特別多(個人到現在也是習慣書本系統學習),我記得Java語言是學習的《Java核心技術》,這個系列有兩本書,這本書可以理解成一本工具書,對於Java的講解面面俱到,在你不記得相關的知識的時候需要拿出來,鞏固學習。而Effective Java的學習是進階學習,在了解Java的基礎的前提下,開始學習更多知識點。
學習完Java後,就按照入門教程上說的慢慢的做Android開發,這個時候API主要是在Android開發入門教程上做對照。但是這個時候大家都會遇到一個情況就是,實現之後會出現一些莫名其妙的問題,所以還必須要會利用一些平台去搜索。

1.3 解惑
現在Android的資料已經滿天飛了,最好的方式就是VPN+google的方式了,基本上大部分的問題都已經有了答案,因為行業已經很成熟了。我們那個時候相關資料比較少,都是去論壇提問的多,比如那個時候的eoeandroid以及csdn的移動論壇,在裡面搜索答案或者自己提問,這樣就能解決很多疑惑了。
現在大家最好的地方就是:
https://www.google.com Stack Overflow

1.4 找工作 1.4.1 策略 學習+刷題
當你不斷的學習和做項目總結經驗,總結遇到的坑和解決方案後,這個時候我們要從草根發展走向專業之路了,所以我們需要一份工作。
面試的時候,大公司對於應屆生的要求主要還是集中在基礎,所以對於數據結構+演算法以及計算機基礎知識是非常重要的。

1.4.2 資料
這個時候我的學習資料主要是:
數據結構與演算法分析 (豆瓣) 編程珠璣 (豆瓣) C程序設計語言 (豆瓣) 計算機網路 (豆瓣) 操作系統 (豆瓣)
不過很遺憾的是,後面2本看得比較少了,操作系統更是無法看懂,於是乎只能更多的去刷一些題目。

1.4.3 面試策略 內推+面試經驗 內推最好的就是聯繫上你心儀公司或者產品的直接負責人、面試官或者開發者,比如你可以聯繫我,QQ空間和騰訊微雲(我會直接面試你)都在招聘(強行做個廣告)。社交平台是聯繫他們最好的渠道了,我那個時候就是通過微博找到了百度雲的移動端負責人,然後獲取了面試的機會(那個時候我們還在做一個百度通訊錄的產品)。
面試的策略比較簡單,就是先去一些自己不太願意去的公司,多積累面試經驗,把那些不會的都去搜索答案,然後弄懂弄會,然後再去面試自己心儀的公司和產品。

1.4.4 系統學習
進了公司之後你會發現,以前你寫的都不是商業化軟體,只是實現了功能,完全沒法去保證質量和設計。所以工作後有很好的機會去學習商業軟體的開發,在這個過程中也是要多依靠自己不斷的學習提升,這就是我們的下一個話題了----中級工程師之路

update:2017年1月26日

2、中級之路 2.1 要求
中級開發者更多還是能夠比較好的完成一個大型商業軟體的核心功能模塊,或者中小型商業軟體的整體架構。

2.2 技能樹
很多人想要知道技能樹,比如通用的:
計算機網路、資料庫、存儲,數據結構、軟體架構和設計、編碼語言以及平台特性等技術點。 還有很多很多的技能樹,而這些其實都依賴於你的項目經驗和項目特性,為了點亮這些技能樹,我們抽象出來更抽象層級的技能樹。

2.2.1 解題思路

  • 為什麼解題思路很重要

很多人不解的是,為什麼很多大公司總喜歡問一些演算法題,而忽略自己的項目本身。其實很多時候當你的項目經歷不夠或者還不夠深的時候,面試官了解不了你得解題思路,不知道你遇到其他複雜問題的時候是否有好的方式去解決。

實踐出真知,我來考一個問題,這個是我們實際開發中就能遇到的,比如我們設計了一套數據通知機制,存儲結構是鏈表,這個鏈表的排序方式是ModifyTime,現在有通知過來要更新一個數據,這個更新的數據ModifyTime也已經變化了,怎麼能更高性能的去更新這個數據呢?(這個問題還可以深入下去,除開ModifyTime排序外還可以依賴更多排序規則,這樣你的數據結構又是如何),這個策略的優化足夠的讓我們在大量數據的時候量級的優化性能。

  • 如何提升解題思路

(一)基礎紮實
首先我們要有比較紮實的基礎技術能力,這個題目我們要的是紮實數據結構和演算法能力,如果我們要做上傳下載速度模塊,那我們就會需要很強的計算機網路和存儲這塊的基礎知識了,這些基礎是我們解題思路的保證。

(二)學習很重要 這個學習是學習前人的,學習別人的,其實做很多事情都是有套路的,多去看源碼和優秀的一些組件,多跟組內大牛交流,了解別人怎麼做的,往往能讓我們思路更加的開闊,從而讓我們也有更加多的解題思路。

2.2.2 軟體架構和設計

知道解題是第一步,思路有了,但是如何才能讓我們的代碼更加方便維護和擴展呢?

現在的大部分童鞋都是基於面向對象的開發方式了,大家知道為什麼你的項目開發不用面向過程的寫法呢?(雖然很多時候我們還是面向過程的開發)

  • 面向過程 VS 面向對象

以前我們總是吐槽,產品經理沒事就改需求,互聯網產品的開發更多的時候是面向變化的,而面向過程的開發是需要明確需求的情況下開發的,否則一旦需求變化你的流程可能就全不對了,整體都需要重寫。這也是為什麼,我們很多時候用面向對象的語言基於面向過程的開發,在需求變動後是那麼的難以維護,所以只有吐槽產品經理。

  • 如何提升

很多人對沒有設計經驗的同學推薦設計模式的書籍,這些我是不推薦的,那些設計模式是我們在建房子基礎上的裝飾,最關鍵我們要解決的問題是:

  • 如何從現實世界映射到對象世界
  • 如何通過對象世界去描述現實世界的方法
  • 如何驗證對象世界的行為是否正確反映了現實世界的方法。

這裡我推薦幾本書:
大象:Thinking in UML(第2版)

敏捷軟體開發 (豆瓣)

高階提升
有了這個基礎之後,你可以看看設計模式,更為重要的是多看優秀組件或者系統源碼,這些源碼的設計和對設計模式的應用是非常多的,能幫助你在良好的建模之後還產生更多優雅的代碼。

2.2.3 經驗 (一)經驗的作用
好的工程師有豐富的開發經驗,一個業務在你做之前他就知道瓶頸在哪裡,需要注意哪些地方?
舉個例子:關於錯誤碼的設計,一個業務模塊錯誤碼的設計是否可以隨意設計呢,只要和後台不重複即可?
那麼問題來了,我們現在要針對一些錯誤進行重試,那麼遇到錯誤碼後我們怎麼區分應該重試還是不重試呢?如果寫死幾個錯誤碼,那以後擴展了怎麼辦,後台下發如果不及時或者錯誤碼越來越多了怎麼辦?
這個時候老司機會告訴你,老司機會告訴你HTTP的錯誤碼設計很好,因為他是依賴數欄位:
HTTP協議中的1xx,2xx,3xx,4xx,5xx狀態碼分別表示什麼,列舉常見錯誤碼及含義 - 上帝的寵兒 - 博客園

(二) 如何擁有豐富的經驗 項目經驗+總結+重複造輪子
項目經驗豐富你自然而然懂得就多,踩過的坑就越多,多總結你才能記憶更深刻,更加能夠系統性的去歸納這些經驗,重複早輪子你才能知道沒做過你總會錯過那麼多的坑。
多看優秀的源碼,有可能的話重複造一遍也挺好的。

2.3 開闊的視野 很多國內技術項目怎麼來的呢,因為國外有優秀的解決方案了,比如當年FB解決了2.3的LinearAlloc的問題,國內的解決方案開始爆棚了。比如FB的Buck構建,國內多少技術團隊基於此做了構建優化(也得到了晉陞)。這裡我就不多說了,有能力的同學多做做創新吧。 國內外互聯網公司有哪些比較優秀,經常更新的技術團隊博客? - 互聯網公司 - 知乎
這個問題值得大家收藏下

2.4 培養他人和帶領技術團隊的能力 這個領域我暫時就不展開了。

接下來就是高級之路的分享了 3、高級之路
未完待續

PS:知乎排版怎麼都給丟了,大家將就著看吧。。。


我正在自學Android開發,已經有半年時間了,基本上業餘時間可以擠出來的,都拿來學習了

由於還沒有找到Android開發的工作,先佔個坑,不敢擅自回答,以免誤導,等找到工作了,再詳細描述著一路過來的自學經歷。

PS:本人之前沒有任何軟體開發經驗。

**********************

update:2014.9.22

經過了八個月的自己,終於在上周五被一家公司錄用了,現在遵守諾言,說說這段時間的自學經歷。

背景介紹:性別:男、無任何編程經驗、年齡:28(大齡青年了)、學習方式:工作業餘時間自學。

第一階段:學習Java 用時:一個半月

一開始我使用的是Princeton大學的線上資源學習:Introduction to Programming in Java: An Interdisciplinary Approach,學習完後,覺得自己掌握的不夠系統,於是找到了另外一本教程:Introduction to Java Programming, Eighth Edition,繼續學習,該教程學到第30章,沒有繼續學習下去是因為後面的越來越難懂了,於是就學到這裡,等學習Android開發的時候,有需要的,再回國頭來學習。

Java階段學習的主要方式是一邊學習,一邊用Eclipse模擬練習,該階段的學習持續一個半月。

第二階段:初步熟悉Android開發 用時:兩個月

???內容較多,稍後更新

************************************

不好意思,耽擱了這麼久,現繼續更新

第二階段:入門Android 用時:兩個月(業餘時間學習計算)

在入門Android的時候,聽從了網上一些人的發言,首先選擇了google官方的文檔,裡面有一個trainging的資料,發現這個資料學習起來生恢難懂,而且講得不夠詳細,跟著做項目也是困難重重,很不適合初學者,不建議,我也是在學習了一周後,果斷放棄;然後選擇了http://Amazon.com上面的Android學習資料,找到一本排名第一的,叫做Android Programming:The Big Nerd Ranch Guide,跟著一起學,由於學的有點急躁,大概花了一個月多,感覺效果是有,但是不是很好,然後在知乎上看到有人推薦TeamTreeHouse,試用了一下,感覺很好,於是註冊了會員,開始學習,這個階段的學習持續了兩個月,感覺效果很明顯,而且視頻的裡面,都把資料講的淺顯易懂,看了以後,興趣大增,很建議選擇這個作為入門的學習資源

第三階段:深入學習

其實學完第二階段,我就已經開始慢慢的投簡歷了,但是都沒有任何回應,於是有開始了新的階段的學習,這個時候,我選擇了Udacity,裡面的一個Android的學習課程,雖然說也是基礎的 課程,但是講的比TeamTreeHouse的深入許多,而且更加的貼近實際工作情況,不過講的沒有前者詳細,所以在學習過程中,需要自己翻閱資料,整個過程也是持續了一個月多,我現在的這份工作,就是在這課程學完不久後找到了

後記:其實通過自學,想達到用人單位的要求,其實是相當困難的,我學了快八個月了,投出去的簡歷,也幾乎是渺無音訊,期間的打擊是肯定有的,不過還好堅持了下來,我的建議是,如果選擇了這條路,就一定要有足夠的毅力,並且能夠在簡歷、面試被拒絕後,心無旁騖的繼續學習,直到達到目的為止,而且這個階段沒有一個固定的時間,如果不是我現在的主管看中我的一些其他品質(不是我的Android開發實力),我也不會被錄用,可能還要繼續的學習幾個月,所以自學這條路只屬於肯堅持下來的人,祝好!

後後記;現在在新的公司上班,由於我也只是剛入職不久,也有許多沒有上手了,做起來也沒有之前想像的簡單,畢竟是工作了,也容不得疏忽,於是壓力也大了起來,不過畢竟現在做的是自己喜歡的工作,感覺之前的付出,值得,我希望後續想自學的人,一起努力吧。

***********************

update:2014.11.27

現在上班已經有快兩個月了,做個更新吧

剛找到工作那家公司,是一家創業公司,我進去的時候,公司正在轉型,Android開發的工作很少,我就去基本都是在看別人現成的代碼,呆了一個月之後,公司突然辭退了兩個Android開發的,包括我,理由是公司決定轉型做平台,暫時不做Android客戶端,下午四點通知,六點就走人,當時確實有點彷徨,也有點擔心。

回到家馬不停蹄的投簡歷,把自己的工作經歷寫成了半年(實際只有一個月),四天後獲得了一個面試,是一家做Android定製的,在面試的時候,我誇大了自己的開發實力,由於我渴望通過工作來增加閱歷,於是進來了。

新的工作開始後,讓我慶幸的是,之前吹的牛皮,基本上在努力後,也基本實現了,公司需要完成的項目,也都可以按時完成,現在的進度差不多是一周的時間,就可以初步開發出一款電商類的APP,由於公司自有我一個Android開發的,不知道這種進步算什麼水平。

總之,很慶幸的是,很多知識都可以通過自學掌握,那些不會實現的功能,也可以通過摸索而實現,也讓我信心更堅定了點,真的非常感謝前人在網上發布的博客內容,給予我的幫助真是太大了,同時我也開始自己寫博客了,把工作中有價值的問題和解決方法記錄下來,希望對別人有些許幫助。

打算這一兩天申請轉正,心裡還是有點忐忑啊,太盼望這一天了!!!

*********************

update: 2015.1.6

這次更新的主要理由是公司終於同意我的轉正了,只是工資沒有預想的多,只漲了八百,現在已經基本上手了,碰到的問題很多也是都可以獨立解決,而且還能抽出空餘的時間,學點新的東西,這次的轉正對我本人來說,意義非凡,至少證明了,我這麼久的努力還是值得的,而且現在可以靠著這份手藝掙到錢,而且這份工作是我確實喜歡的。

接來下我計劃會是繼續的加強自身的開發實力,多閱讀 牛人的博客和代碼,真的收貨非常大,而且知道的多了,也比較清楚自己的接來下要努力的方向,所以我會朝著這些方向去努力,不過會沒以前那麼拚命了,之前只顧著轉職,陪家人老婆的時間少了許多,現在稍微穩定點了,我想慢慢的補回來,不知學習不會放下的

爭取在三個月左右,再漲一次工資吧,在這裡立下證據,待日後核驗。

******************************

updata:2015.2.11

最近的工作由於比較大的變動,於是在這裡記錄下

首先,公司說的漲薪的八百,實際到了第二個發工資的時候,發現其實只漲了四百,期間說了各種理由,總之是這是一家不靠譜的公司,不靠譜的老闆

工作方面,我自己獨立完成了一款APP的開發,從零開始,一直開發到上線推廣,中間也碰到了種種的問題,在努力下也都一一解決了,這個是我在這家公司最大的收貨,第一個項目結束後,開始試著投簡歷,無意中找到了一家新的公司

新的公司經歷了三輪面試,第一輪是人事的,我把我的工作經驗說成了八個月(實際四個月),然後是項目總監,最後是老闆,整個面試過程很順利,由於公司沒有安卓的開發人員,所以我那些技術上的吹噓也都一一瞞過去了,最終被錄用了,新的公司,待遇比之前的高了一千,上班時間也改成了五天7.5小時,老闆跟公司的環境跟上家比,都好了許多,工作也基本上可以勝任,好歹也是有點真本事,不是完全的吹噓,最後,總結下對個人比較有幫助的部分:

1、寫博客:寫博客不僅可以激勵自己學習新的東西,而且以後碰到類似的問題,直接從博客中copy代碼,簡單省事;

2、把代碼中重複的模塊寫成一個工具類,下次調用直接簡單的一行代碼就可以實現了,比如emptyView, viewPageIndicator。

3、從github上照搬代碼的時候,記得讀懂裡面的代碼,真的幫助很大,那些大神的代碼真的寫的太好了,每次讀完都很有收穫。

4、工作中碰到不懂的,切勿馬上搜索答案,先查看官方api介面,尋找思路,最後再用搜索引擎

暫時就這些了,其實我還只能是入門級別的,能有更深入一級的體會的時候,再來記錄下。。

***************************

update:2015.6.26

剛好現在有空,繼續更新下吧

目前的這家公司各方面感覺都還可以,雖然目前是我一個人獨立負責Android的開發,基本上是上手的,在技術上是沒有碰到什麼解決不了的問題,碰到很多不懂的內容,在Google搜索後,基本都找到答案了,或者尋找相關的源碼去了解下,也都可以一一的解決,這幾個月,可以感覺到自己在技術上又有了不錯的提升,現總結如下,希望有所參考;

1、儘早從Eclipse遷移到Android studio。雖然去年就開始接觸studio了,當也是懵懵懂懂,今年隨著1.0正式版本的發布,心裡就痒痒的,想遷到studio上面來,由於對Gradle的不熟悉,還有配置等各種原因,一直沒有遷移,不過也有陸陸續續的練習使用,在基本熟悉了,就開始遷移目前的工作項目了,遷過來了以後,就再也回不去了,Android studio真的比Eclipse好用太多了,你越熟練使用它,它就越好用,特別是github上面很多項目都是基於Gradle的,集成到studio中很方便,總之,強烈建議遷到studio開發平台上來。

2、學習使用Git。公司用的版本工具是SVN,我估計很多公司都是用這個,我試了在studio上面集成SVN,可是試了很多次都失敗了,又聽說git很先進,狠下心來學習了git,在Udacity上面有個Google開發的Git學習課程,免費的,粗略掌握後,就開始摸索在studio上面使用git,發現studio對git的集成太好了,雖然網上這方面的資料很少,但是基本上摸索了些就學會了,基本所有的git操作都可以在studio上進行,不用使用Git原生的命令,方便異常,另外在配合Bitbucket,簡直太好了,用Android studio + Git + Bitbucket,可以天下無敵了啊,哈哈!

3、代碼方便維護和復用。在實際的開發過程中,發現很多方法都是相同的,特別是網路訪問這塊,對於相同的方法,盡量寫在一個公用的BaseFragment或者BaseActivity中,這樣在後期,如果介面有改動的話,不需要每個頁面都改動,只要改動通用的方法就可以了,還有在每個頁面的代碼結構要足夠清晰,多謝方法,不要很多代碼寫成一坨,這樣後期不好維護,會看的暈頭轉向的。

4、使用leakcanary。內存控制是我的薄弱環節,剛好最近Square出了這款工具,可以很方便的檢測內存泄露,我在我的項目中一試,真的發現了好多問題,也發現了很多容易造成泄露的書寫習慣,嫉妒推薦使用。

5、使用AppCompatActivity。如果你的項目還在開發的話,不要用FragmentActivity了,用這個新出的,也是官方推薦使用的,可以很好的兼容5.0以上的系統,另外用了也可以讓各種系統的控制項Style保存一致,各種好處說不盡,用了就知道了

6、BugHD,檢測崩潰。並不是每次崩潰都可以被你採集到,這個工具可以採集到你開發的APP的所有的崩潰,免費試用的,關鍵是集成很方便,我一直在用

現在基本上算是入行了,想想之前剛開始投簡歷的時候,發了一百多封簡歷,接不到一個面試電話的情況,難免有點唏噓,雖然上手工作暫時沒什麼問題了,但是想要進一步的深入,還是有許多的路要走,還是繼續努力吧

下一步的方嚮應該是放在進一步研究各種api和效果實現上面,最近發現研究官方的源碼,收穫很大,官方的代碼寫的真的是太精闢,太有邏輯性了,很好的學習教材。

*************************

update:2015.9.3

最近工作又有一些變動,在這裡做個分享吧

原有的公司,因為項目的原因,我已經空閑的快一個月了,預期接下來的幾個月都沒有什麼開發需求,根據我這段時間的表現,公司還是希望我一直留下來的,萬一有新的項目,就不用再折騰的招人了,不過空閑對於我自己是莫大的時間浪費,於是就試著看看有沒有其他合適的機會,總之,挺順利了,就找了份不錯的新工作。好了,下面分享一些最近新的感悟

1、 找工作的選擇,我之前都是選擇創業公司,很大的一部分原因是因為我的工作經驗,很難進入一個大的公司,不過創業公司的失敗風險真的很大,特別是那些沒有天使輪的,真的很容易死亡,當然項目都的死亡,損失最大的應該是老闆,不過對於我們做開發的,也因為的開發的產品沒有得到市場的考驗,你也不知道你開發的APP到底好不好,有沒有什麼問題,機型的匹配怎樣。說了這麼多,個人的經驗是工作的選擇,還是盡量選擇一個靠譜的工作,有更大的用戶去使用你開發的APP,這樣對你的成長才是真的巨大的。

2、 做開發的時候,不僅僅是實現功能,還有代碼的優化,結構布局,真的很重要,我這幾天看了下Picasso的源碼,發現自己的代碼真的寫的太爛的,一看就是質量不夠好的,所以盡量多看一些大神寫的代碼,了解他的布局和思想,然後再拿來改進自己的代碼

3、 開發中碰到了問題,記得自己先去思考下解決方案,或者網上Google,不要馬上就到群裡面去問,我最近退出了很多技術交流群,因為有很多自己都沒怎麼思考的問題,就拋到群裡面來,其實我們做開發的,我覺得解決問題的能力比開發的技術還跟重要,等你熟練自己解決問題了,就會發現其實需要去求教別人的地方是很少的

最近接觸的多了,就越發現自己不懂的也多了,之前說算是入行了,現在想起來,其實還只能算是入門,如果你也是走寫代碼這條路,就一起猛干吧,阿門。。。。

***********************************************

update:2016.2.3

最近觸動比較多,還是繼續更新下吧

到了新公司,完整了參加完一個項目下來,感覺自己收穫最大的不是技術方面的成長,而是態度方面的成長,良好的態度能夠規避很多技術的問題的,剛好有時間,粗略寫個總結吧;

1、確認好產品文檔的技術細節:千萬千萬要跟產品確認好需求,產品的需求文檔會包含交互細節,頁面邏輯等,但往往會忽略技術的實現細節,或者在實現起來,有很多的細節需要考慮的,但是都是文檔說欠缺考慮的,一般的情況下,一份新的需求,我大概要花費一天的時間,去完整的評估實現方案,在評估完成後,發現有出入的,還需要跟產品重新溝通確認,確認好後,千萬要記得讓產品更新文檔,以後測試好依據新的文檔測試。

2、在實現一個功能之前,先打好草稿:我做項目經常犯的一個錯誤是急著寫代碼,邏輯跟著代碼一邊寫一邊走,現在回過頭去查看原來寫的代碼,發現結構混亂,方法各種重複,邏輯耦合度高,總之就是爛,最近靜下心來,在完善一個功能之前,先用紙跟筆把各種情景考慮清楚,再把各種邏輯交互處理好,並且用流程圖之類的方法表達清楚,然後再開始寫代碼,這樣寫的代碼明顯質量高很多,bug也少,由於邏輯結構清晰,後期的維護跟更新都比較簡單。

3、加強自測:不知道是不是開發的普遍不喜歡測試,我好一陣都是對測試不感興趣,提不起勁,感覺沒有技術含量,直到提交的代碼一次次被測試妹子提的bug給淹沒,脆弱的心靈深受打擊,於是只好痛定思痛,要加強自測,一般自己寫的模塊,自己是最清楚的,知道哪些地方容易出bug,基本功能測試一遍,再極端條件再測試一輪,基本沒有空手而歸的,每次都能發現代碼中的bug,不知道有沒有那種神一般的程序員,有一雙上帝之手,寫的代碼蹭蹭的出來,而且基本不出bug,我這輩子是沒可能到達這種境界了,所以只好老老實實的自測吧。

4、分支管理:現在應該一般用git了吧,建議是開一個主分支,這個分支打的包也是測試用的包,然後自己再個分支,在上面開發測試,如果有其他的隊友,也各自開分支,新的功能開發自測合格後,再合併到主分支,這樣比直接在主分支開發,能夠規避許多的bug,說起來簡單,我也是一開始忽略了,只好看著滿滿幾十頁的bug心裡發抖。

5、小白心態:一直覺得自己是個小白,對於寫的功能,某個方法總是抱著懷疑的態度,對於我來說,抱著小白心態,或者菜鳥心態寫代碼,明顯質量好很多,但是進度慢了不少,如果抱著信心滿滿的心態寫代碼,速度明顯飆升,但是對於我來說,bug反而會變多,所以我一般盡量讓自己保持菜鳥的心態寫代碼(代碼深似海,其實真只能算新手,每次看到Android的源碼,都深深的感覺自己跟高手的差距達到估計這輩子不知道可否追的上)

對於外行入門Android開發的,盡量去大一點的公司,你的成長會比小公司的大很多,我前幾份工作都是小公司,目前這個家公司規模還不錯,工作了幾個月,就能明顯的感覺到之前成長的局限性了

*************************

update:2016.10.27

有一陣沒有更新了,剛好有空,做些補充吧,可以的話,這個答覆希望一直更新下去

在新的公司上班一年多了,基本上適應了這邊的節奏,還記得剛進來的時候,怕自己的水平太爛(也確實爛),晚上睡覺心裡都會忐忑不安,之前每次找到新的工作,當步子邁的太大的話,內心都會這樣糾結,不過這樣也有一點好處,他會逼著你往前走,因為你以為把自己逼著沒有退路了,開發路上,義無反顧,一往直前。

你有沒有這種困惑:當你開發了一段時間,簡單的該會的會了,複雜的不會還是不會,一開始的時候,能夠明顯的感覺到自己的進步,最近逐漸發現自己慢慢的進步變慢了,然後又突然覺得開始停滯不前了,有一陣,我自己突然有這種想法,發現自己進步越來越慢了,壓力小了,生活也安逸起來,人也變得懶惰起來,不像之前的那種拼,那股闖勁,好可怕,感覺自己淪陷了!

於是我試著找回最開始的那種拼勁,接著讓自己進入快速成長的路上,不停的接受新的知識,逐漸的,又讓我找到節奏了,多虧了github,多虧了開源,安卓網上總是有不停的很好的庫開發出來供大家使用,我一邊使用這些庫,一邊查看別人的源碼,發現裡面的奧妙,慢慢的發現裡面的許多實現方式,都讓我非常的敬佩,你總能發現許多比你自己寫的還好的代碼,總是發現自己還有很多的不足,讓自己一直保持這種飢餓的狀態,原來我還有這麼多的不懂,還這麼的水,慢慢的找回了這種狀態,就像是一開始找工作一樣

我相信人是習慣於安於現狀,特別是現狀還不錯的時候,但是心態上,不能這樣想,要讓自己處於一種動蕩的心態中,我們的選擇,只有不停向前,雖然我已經三十了,看著周邊一群群的九零後,我希望我的激情不亞於年輕人,一直保持一份年輕的衝勁!


~2014年3月27日更新~

今天我正式填坑~~

這個坑被 N 多人吐槽了,也確實有段時間,期間嘗試過不少能幫助小白入門的方法,也有所收穫,後面我會一併更新到答案中~

瀉藥~ 

第一次認真回答問題,有人給點鮮花鼓勵什麼的沒~~

-----------------------------我是正式開始的分割線------------------------------------

這個問題其實需要展開來說下~

學習新技術都很多人來說本身就是一件比較痛苦的事情(因為學習會改變自己原有的認知,是個自我更新的過程)~

所以能不能學會學好的前提條件是你是不真真願意去學,你想學adnroid的根本出發點是什麼,這個出發點是否強大到讓自己完成這個學習。

如果上面兩點你已經認識到了,那接下來我們再來看如何自學成為一名android開發工程師~

優秀的android開發工程師和普通的差別很大,而根據題主的描述,我們這裡就說如何成為一名合格的android工程師(也就是入android開發的門)。

學習需要靜心,特別是入門的時候需要靜心,我不覺得看英文的google android官方文檔(Getting Started)或者[eoe社區組織翻譯的中文文檔](Android開發-最全的Android開發資料-eoe移動開發者社區)想快速入門是件容易的事情;也不覺得找一些免費的視頻看下去能快速的入門。因為這些東西都是入門後才合適看的。

說到入門,那我要推薦一下自己策劃和參與撰寫的《Android開發入門於實戰》這本書籍了(本書第一版是筆者參與撰寫的中國大陸第一本android開發教程,現在市面上是我們剛剛撰寫完成的最新的(也就是第二版),官方介紹如下

《Google Android開發入門與實戰》是中國大陸第一本Android開發教程。

此書第一版由eoe的創始人姚尚朗和靳岩於2008年底所寫,第二版由eoe眾多實力派社區版主於2013年共同協作改版。

此書目前已經重印超過18版本,已經是Android開發者是受歡迎的Android開發圖書之一;是Android開發者學習人手一本的必備紅寶書。

在這裡解決大家閱讀過程中遇到的所有問題,勘誤收集,源碼下載,討論交流,作者答疑,反饋建議等等內容均可發布,希望eoe社區這本書能成為Android入門經典標準教材,讓更多人學會android開發。

封面如下

BTW:

詳細的目錄在這裡:Contents · eoecn/google_android_book_v2 Wiki · GitHub

緊接著,我來說說入門的步調:

我個人建議的入門途徑是這樣的:

1.第一階段:認知上入門

買一本紙質的android入門書籍,一定是入門的,比如我參與策劃和編寫的[Android開發入門和實戰](《Google Android開發入門與實戰》),給自己1周完整的時間按照裡面的閱讀建議閱讀完,第一遍不需要完全讀懂,特別是代碼的地方,但是你需要盡量的嘗試看懂(這個階段不需要開電腦查資料,因為電腦上誘惑太多了,你的注意力會被其他干擾的)。讀完這本書後,你基本上就從認知上入門了;

2.第二階段:知識上入門

認知入門後其實就比較簡單了,拿過上面那本書,從環境搭建開始,到第一個例子,到書中其他的演示的例子都自己嘗試跑一遍,遇到錯誤自己嘗試解決,如果超過20分鐘沒解決掉,記得去《Google Android開發入門與實戰》這個社區問,作者會第一時間幫助你的。跑完例子基本上就有對 android 有個大體上的入門了~

3.第三階段:實戰上入門

有了基礎認知吼,就進入到真正的 android 工程師成長軌跡中了,這個時候信息和知識就不是主要的了,這個階段主要的按照知識點的形式來強化和實戰,目的是持續學習在工作中會用到的各種技能~

這個階段的知識點很多,很多情況下一些人會抓不住重點,把時間花在一些另外20%的技術上去,所以按照我對 android 技術的理解和經驗,推薦試試我們新發布的新產品《極客學院-android開發教程|android視頻教程》,『極客學院』是我們最新的一個收費產品(真的超值,30元/月的價格可以學習裡面全部的課程,android 為主,還有 cocos2d 和 c 等課程),按知識點形式對真正有用的技術進行講解;此外,務必去『eoe Android開發者社區_Android開發論壇_Android開發』註冊一個帳號,遇到問題自己搞不定的時候去和大家討論討論~

4.第四階段:開發者圈子上入門

前面說的很多都是自己一個人在戰鬥,要想更好的進入這個行業,需要有自己的開發者圈子,前面好像有同學也提到了諸如 GDG之類的活動,恩,就是這樣的活動。

我這裡說的是 還是 eoe社區的活動(沒辦法,這樣的活動就是我覺得開發者活動應該是這樣的),我們有兩類活動,一類是基於城市的『eoe 同城會』,現在在上海,北京,深圳等14個城市都有本地的組委和志願者,會定期活動分享,例如『eoe沙龍活動_android社區活動_android活動論壇』,此外還有一類是諸如 eoe 每年一屆的移動開發者大會。

BTW:

活動不要跑多了,特別是線下活動,別沒事就跑去參加什麼活動,挺浪費時間的~

好了,坑填完了,心安一點了,有需要更多信息的給我私信吧(我爭取能及時給大家回復~)~

--------------我是一個很極客的分割線-------------------

接下來我再給大家推薦幾個『極客學院』里對這個問題可能有用的課程

1小時,獨立開發第一個「Hello World」

http://www.jikexueyuan.com/course/3.html

4個實戰項目,教你7天學會Android

http://www.jikexueyuan.com/course/26.html

24個Android常用知識點精講

http://www.jikexueyuan.com/course/5.html

Android系統安全【教程 實戰 策略 項目 開發 課程】

通過對現代網路安全的基礎理論的學習,掌握和理解其核心原理。

此外,還有諸如

Flappy Bird 開發視頻教程 源碼下載【教程 實戰 策略 項目 開發 課程】

輕鬆玩轉微信分享--極客學院

『極客學院-android開發教程|android視頻教程』還有很多不錯的課程,我們也在每天不斷添加新的課程,我個人覺得是每個學習 android 的人必備的,超值的很~~


絕大部分人說官方文檔和範例(App Components)是最好的教程,如果你英語好,且有Java和XML基礎,那按照官方的Training一路下來就算入門了。

如果英語不好,可以看一些視頻入門,如Mars的《Android視頻教程》的。最起碼得先把開發平台搭建起來吧。再結合視頻做一些小練習,最基礎的布局先練好,不要急。

當然,看視頻的話雖然通俗易懂,但是進度可能比較慢(即使我視頻調至2倍速看),所以必須結合看書。但是,市面上的書大部分都跟不上Android最新的腳步。

不過還是推薦兩本:

  • 李剛的《瘋狂Android講義》,此書大而全。

  • 《Google Android SDK開發範例大全(第3版)》,此書可以照著練(不要ctrlc+ctrlv)。

對了,現在還有更新穎的學習方式,可以在線互動編程學習(Android開發 | Fenby.com),你可以嘗試一下。

總體來說,書都比較落後,Android學習主要還是靠網路。入門是最關鍵的,入門之後相信你自己也會找資源了。然後可以啟動以項目為導向的學習方式,用到什麼學什麼,這樣最快。但是,快並不是浮躁,別想一口氣吃成胖子。況且,一入IT深似海。。。不扯淡了-_-。

其他參考:

  • StackOverFlow的Android Tag(Newest "android" Questions)

  • GitHub搜Android(Search android)

  • Google Code上的優秀APP源碼(Google 代碼)

  • 直接拿來用的Android開源代碼(最火的Android開源項目(完結篇))

  • Android中文Wiki

  • Android設計指南非官方簡體中文版(Android Design)

  • Android開發者社區(Android開發 - 安卓開發)

  • CSDN上的優秀博客和牛人(Android系列開發博客資源匯總),比如這位老羅的Android之旅

我現在也在慢慢學習和摸索中,望共同進步。


我自學java和android一年多,現在是一名android工程師。總一下自己的經驗,希望對你有幫助。

首先我想說的是入門android一定要有java基礎。我自學android的時候由於java的基礎不是很好,甚至連java的基本語法和對常用類用發都很模糊,導致後面學android的時候學了一個月還是不清不楚,信心大減很受打擊,無奈還是重新學一遍java再來學android,發現學習android好理解很多,所以一定要先把java的基礎學紮實!

然後,android跟xml的聯繫還是挺多的,資源文件都用到xml,所以多多少少理解一下xml的結構,基本語法對自學android也是很有幫助的。

準備好學習android的基礎之後,正式學習android。如果是零基礎,我個人覺得最好的學習方法是以看視頻教程為主(網上可以搜到很多免費的android視頻教程),輔以一兩本android基礎的書。

入門android,最大的阻力莫過於如何自己創建一個android項目進行開發,包括了解android項目的結構組成、使用什麼開發工具以及基本開發步驟。很多關於android入門的書一開始一邊都是講一些關於android系統的發展過程等等這些介紹性的東西,然後在講講android開發的重點是什麼四大組件。大多數人一般看看都能接受這些東西,但是大多數人都掛在了接下來真正學習android的環節,也就是如何自己創建一個android項目進行開發。


其實成為初級android工程師,並不困難,但是目前初級android工程師已趨於飽和,這與前兩年客戶端培訓火爆密不可分,所以呢,這可能會讓一些正在走這條路或者想要走這條路的人感到困難。但是想要脫穎而出也不是很難的。

今年參加校招,也拿到bat之一等一線互聯網公司offer. 想說說我的看法,雖然客戶端現在的市場趨於飽和,但是我想說的是:想進入一線互聯網公司並不是沒有可能,可以分享一下我的自學之路。

背景:本人科班,也不是很好學校,決定走客戶端方向是因為自己的興趣,學校內教的東西太淺顯了,很多東西都是自學,就連基本課程也覺得老師並沒有講什麼。(可能是我沒聽)

1.基礎,基礎最重要。想進入一線互聯網公司,這一項必不可少,這也就是你比外面培訓班所在的優勢了。

演算法分析和數據結構:查找,排序,DP,圖論,數論,棧,堆,二叉樹等,一本《演算法導論》,再來一本數據結構的書基本夠了。最重要的是刷題,讓你更加理解。同時有些公司筆試也這樣。

操作系統:進程線程,中斷機制等,推薦書《深入理解計算機系統》

計算機網路:五層架構,各種協議等等,推薦書《計算機網路:自頂向下方法》

編譯原理:它可以讓你更好的理解語言的結構,詞法分析,語法分析等,對你的掌握語言有幫助,書籍一本教材就差不多了。

資料庫:可以去了解了解,各種範式,android開發對其要求也不高,但有必要了解,可以去買一本簡單的教材看看。

2.java語言掌握,寫android肯定要會java語言啊,所以java語言也需要良好掌握。

java虛擬機(jvm):到底java語言是怎麼運行起來的,jvm內部又有哪些部分,需要一本周志明的《深入理解java虛擬機》

java基礎:推薦書籍《Java編程思想》《java並發編程實戰》

3.android基礎:安卓工程師肯定android基礎要熟練啦,所以呢,新手入門推薦郭大神的《第一行代碼》後面可以看看《android開發藝術探索》,《android編程權威指南》可隨便翻翻,當字典用。

4.設計模式,對於java和android熟悉後,你還需要對代碼整潔度等的提升,推薦書籍《大話設計模式》《head first:java》到工作中了可以看看《重構:改善既有代碼的設計》《android源碼設計模式與實戰》

總結一下書籍:

基礎:

《數據結構與演算法分析》,《演算法導論》可嘗試

《深入理解計算機操作系統》

《計算機網路:自定向下方法》

《編譯原理》《資料庫系統概論》

java基礎:

《深入理解java虛擬機》《java編程思想》《java並發編程實戰》

android基礎:

《第一行代碼》《android開發藝術探索》《android編程權威指南》

設計模式:

《大話設計模式》《head first:Java》《重構》《android源碼設計與實戰》

上面是需要看的書籍,也可以通過csdn下載電子書。也可以多去逛逛國內大神的博客,都在csdn上面,看看他們的一些思想。還可以去看視頻學習,現在互聯網時代,自學真的很方便的,推薦慕課網,還有網易雲課堂,雲課堂裡面的老師都是通過篩選的,很多基礎講得也很生動。還有好好利用github,stackoverflow,這些網站,github有很多開源庫,stackoverflow基本上有你遇到的90%的問題及解決方案。

學習方式:看書,逛博客,看視頻。

自己寫一個感興趣的項目,把學到的知識都用到,這個就是能讓你慢慢從書本上到實踐的過程啦。

好吧,學了上面的知識,真的可以去互聯網一線公司了嗎?我覺得未必,還差一點。

還需要融會貫通,也就是說,把整個基礎,java以及android都鏈接起來,成為你自己的知識體系。需要你去鑽研,Read The Fucking Source Code,程序員必須有這份鑽研的精神在,所以我們可以去找找我們喜歡的開源庫,先去使用它,熟悉之後,去看看內部是如何架構的,為什麼這樣架構,如果是你來架構,又會用什麼方法,跟他有什麼不同?你可以學到些什麼。這一步我覺得才是達到一個真正程序員的關鍵。也就是為什麼你比別人厲害之處。

這部分我的思路:從微觀到宏觀,再從宏觀到微觀,首先從開源庫的一個小功能學習起來使用,慢慢的熟悉整個開源庫的功能,然後呢,我整個開源庫有哪些功能我都知道了。開始試著畫出開源庫的類圖,整體是怎麼構造的,也就是從微觀到宏觀;後來知道整體構造,我再去有宏觀到微觀,細到每一行代碼是怎麼寫的,為什麼這麼寫。如果是我,我又會怎麼寫。

舉個例子:比如你需要封裝一個ImageLoader圖片庫,你可以想到什麼?ImageLoader簡單說就是載入圖片,顯示圖片功能。安卓手機oom所以要圖片壓縮;因為單線程(UI線程)繪製,所以需要線程間通信,整體為一個生產者消費者模型,需要同步非同步拉取;因為流量有限,所以需要緩存等等。這些都是在腦海里的框圖。然後再細看,同步非同步又是怎麼做到的,代碼如何實現。非同步的本質又是什麼?不就是中斷機制嗎,這又涉及到計算機操作系統,又可以了解中斷機制。為什麼要中斷呢?很大程度上是進程間通信,保護現場,進程間通信又有哪些方式呢?進程又是什麼?了解之後,你又會發現android為什麼會用binder機制等等。

為什麼上面我寫得那麼細呢?因為我覺得可能那才是我的亮點之處,也是各大互聯網公司看重的吧。

好吧,這大概就是我的自學之路了,沒有導師,我相信你們也可以的。但是這個肯定比外面培訓班花的功夫更多吧,差不多一年時間。這也只是我經歷今年校招的看法,希望對大家有幫助,至於社招的同學,如果要進入一線互聯網公司的話,還需要更加努力。

祝大家好運吧~


大家講了論壇和知識區,我補充融入程序員圈子的部分吧。

有圈子,有人有朋友,更能堅持學下去。

可以去github上面找開源項目自己編譯運行,並且改編成其他版本。

多參加線下活動,很多免費活動的。本題裡面所有圖片,都是我自己拍的,或者我電腦屏幕截圖。

這是今晚我參加線下活動,零基礎學ios開發(免費活動我說了咩?)

最後真的做了一個簡單iphone app出來,雖然超簡單,只有一個動作。

我個人最最推薦當然是GDG(Google Dev Group)所有活動。

大牛非常多,活動全部免費,而且都是編程相關。

加入G+圈子和郵件組後,裡面全是工程師,新人到大牛都有,而且都非常樂於分享。

各種國外新技術,新教程,新XXXX,第一時間都有人討論。

補充剛剛好一年前,在上海時候,GDG組織活動,也是零基礎學Android開發,當時做出一個APP

可惜我一直沒堅持,所有軟體都半途而廢。認真想學,很容易加入圈子的。

另外硬體相關的,北京創客空間 我參加過他們線下活動,免費,教你單片機開發,很好玩。

上海有新車間:http://xinchejian.com/

看老外編程也很有趣,他超短時間開發一個社交APP,從零開始寫代碼,全程英文。

這個活動是barcamp ,免費,全天,並且提供午餐。

對了,我前面提到GDG大部分活動有吃有喝咩?

最後貼今晚的圖,免費,從零開始學ios開發,成果見最上方:

(車庫咖啡也有很多不錯活動嗯嗯)

對了,我有提到GDG全國都有組織咩?

我個人覺得質量不錯線下活動是:

上海,北京GDG組織線下活動。北京Barcamp 且都是免費。

創業聚會一般不錯:北京創業影院,車庫咖啡,3W咖啡,上海創智天地等等。

線上不錯的網站有:

Code.org | Anybody can learn

w3school 在線教程

Khan Academy

Course Catalog for Free Online Classes

Learn to code (這個我比較喜歡)

Treehouse | Library ( 目前我最喜歡的,用這個學Android來著 )

Learn HTML5, CSS3, Javascript

最後放北京GDG活動(真的是免費的,還有茶歇和零食)這是在某個酒店,後一張是創業咖啡店。

以上。祝好。——————補充的分割線——————

說了是GDG,加入GDG有各種討論~~ 再三提到我個人最推薦的是GDG組織。

我從郵箱截圖吧,上海GDG和北京GDG我都有參加。

這些是Gmail郵件列表,線上和線下活動都有,夠不夠乾貨?


我也是通過自學走向Android開發的,我來回答下。

1.要對移動開發有熱情,而不僅僅是為了找份工作。有熱情才能保證持續的學習和在實際編碼中的精益求精,不然在編程的道路上走不長。

2.Android應用層開發是用的Java語言,所以熟悉Java語言是必須的。如果以前沒編程基礎,推薦畢向東老師的Java視頻。如果有編程基礎,推薦李剛的《瘋狂Java講義》。國外的《Java編程思想》不適合初學者,《Java核心講義》翻譯不太好,不推薦。

3,掌握Android基礎知識,推薦郭霖的《第一行代碼》,相信我,這是最適合入門的Android書籍。

4,掌握Android進階知識,推薦郭霖的CSDN博客,主要看關於View的繪製流程、Touch事件分發、Handle機制等。

5,熟悉常用的設計模式,先開始熟悉幾個很常用的就夠了,比如單例,觀察者等等。

學到這,Android應用開發基本入門了,學習曲線也不是很陡,加油↖(^ω^)↗。


阿里云云棲社區,彙集阿里技術精粹,點此關注

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

前言:

最近幾日有不少小夥伴要求分享一些安卓開發學習課程或者資料,小編在此將阿里技術協會的:《Android 基礎課堂》系列學習資料分享給各位。同時各位小夥伴若有學習、資料需求可以私信小編,小編也會儘力為大夥整理分享。

以下為正文:

Android 基礎課堂

· 之所以叫Android基礎課堂嘛,是因為本部分主要的內容是關於Android開發的一些小知識也可以算是一個入門教程吧,我們志在讓讀者了解Android開發,清楚Android開發的過程~並能更好的看懂我們的周刊。

· 基礎課堂將會從最基礎的Android開發知識講起,讓讀者熟悉Android項目的結構,而後我們會通過一個應用的開發過程,結合的講解Android的知識,把Android的相關知識在這個應用里慢慢迭代~慢慢豐富應用,讓讀者在實踐中學習Android開發~

——————————————————————————————————————

第一課:《Android發展史概述及開發環境搭建》

一、Android發展史概述

Android這一詞最先出現在法國作家 利爾·亞當 在1886年發表的科幻小說《未來夏娃》中,作者將外表像人類的機器起名為Android,這也就是Android小人名字的由來。

Android是一種基於Linux的自由及開放源代碼的操作系統,Android系統原來的公司名字就叫做Android。Andy Rubin創立了兩個手機操作系統公司:Danger和Android。Danger 5億美元賣給微軟,後更名成為了Kin,Android 4千萬美元賣給Google。谷歌公司在2005收購了這個僅成立22月的高科技企業Android。Android系統也開始由谷歌接手研發,Android系統的負責人、Android公司的CEO Andy Rubin 成為谷歌公司的工程部副總裁,繼續負責Android項目的研發工作。

......

二、開發環境搭建

自從Android Studio發布以來,搭建Android開發環境變得非常簡單,不再像原來在eclipse上搭建開發環境那麼繁瑣了,那麼我們就開始搭建開發環境吧

① Mac 下搭建開發環境

點擊閱讀詳情

——————————————————————————————————————

第二課:《從創建一個Android工程開始》

一、Hello Android

o 在第一課中,我們已經搭建完Android開發環境了,那麼接下來我們就來用Android Studio(下文中將用AS簡寫來代表Android Studio)創建我們的第一個工程吧

o 打開我們安裝完的AS,將會看到如下界面

……

二、初識Activity

o 在上面創建工程的時候,可以選擇是否創建第一個Activity ,以及創建什麼樣式的Activity ,那麼本著用到什麼講解什麼的原則,我們現在就來講講Activity

o Activity 是四大組件之一,並且是我們最經常用到的組件,Activity 是用戶介面程序,原則上它會提供給用戶一個互動式的介面功能。Activity 本身是沒有界面的,Activity 類創建了一個窗口,通過setContentView(View)介面把.xml界面放到Activity 創建的窗口上。

點擊閱讀詳情

——————————————————————————————————————

第三課:《五大布局》

一、LinearLayout (線性布局)

o 什麼叫做線性布局呢,其實理解起來也很簡單,就是它裡面的東西,都按照一定的順序一個接著一個排放,那麼一定的順序指什麼呢,在線性布局裡,提供了兩種布局排序方式,一種是水平的即horizontal,一種是垂直的即vertical,讓我們來看看這兩種布局方式吧

o 水平 horizontal:在水平布局的LinearLayout 里,內部控制項是從左到右一個個排序的,最前面的在左邊,最後面的在右邊,具體是什麼樣的呢,讓我們來實踐一下,先看下面的這個效果圖

……

二、RelativeLayout(相對布局)

o 相對布局是啥意思呢,就是內部各子元素按照之間的位置關係來完成布局。在此布局中的子元素里與位置相關的屬性將生效。例如android:layout_below, android:layout_above, android:layout_centerVertical等。注意在指定位置關係時,引用的ID必須在引用之前,先被定義,否則將出現異常,讓我們來看看實現效果:

點擊閱讀詳情

——————————————————————————————————————

第四課:《從登錄界面開始》

一、登錄界面布局分析

o 首先我們先來創建一個新的Activity用於登錄,首先打開我們的工程,然後在我們的包處右鍵,如下:

……

二、布局中的EditText

o EditText是Android中提供的用於獲取用戶輸入的控制項,Android中每一個控制項所含有的方法都很多,不可能一次講全講完,我們還是本著用到什麼講什麼的方式來講解,所以,本次我們只講一些簡單的東西,即在布局中對EditText的一些設置,而關於如何獲得輸入、如何監聽輸入變化、如何設置可輸入內容等等這些東西,我們將在下周中講到登錄界面的邏輯的時候進行敘述,所以本周的關於EditText的內容將會比較簡單

點擊閱讀詳情

——————————————————————————————————————

阿里云云棲社區,彙集阿里技術精粹,點此關注

著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。


首先來說下我的背景以及這大半年來我的自學情況吧:

1.本科通信工程,非計算機科班,大一學過C語言基礎,後來因為專業課程需要,學了一點彙編以及Matlab。這部分經歷我認為對於我後來的編程學習只有基礎語法理解方面的幫助。

2.去年11月中開始系統學習編程語言,由於想做Android開發,所以入門語言選擇了Java。

3.11月中到12月中,邊看傳智播客的一套視頻邊敲裡面的練習。

4.12月中到1月中,20天左右時間看了《編程之美》,並用Java實現書里百分之五十左右的演算法題,剩下的題由於難度太大 或者比較複雜,當時沒有深入研究下去。

5.1月中到2月中,選擇了網易公開課裡面的《斯坦福大學公開課—編程方法學》這套視頻,同樣是邊看視頻,邊完成裡面的Assignment。在這裡感謝帥帥同學@王帥 推薦這套視頻。裡面的Assignment題都是經典題目,對於初學者來說非常適合。

6.2月底開始學習Android語言,花了1個月左右的時間,照著《第一行代碼》裡面的例子,敲代碼進行實現。

--------------------------------------------

由於在學習編程之前就有兩個小產品的構思,所以也沒有想自己基礎是否打紮實了,先試著去實現,看看能不能做出個可用的產品來。截止到目前為止,兩個小產品都已經開發完畢了,其中一個「蘋果序列號查詢」已經在小米、豌豆莢、Google Play、魅族Flyme等應用市場上線並且有了一版更新(4月14日上線,到目前為止下載量已經超過1000),它是下面這個樣子的:

關於開發「蘋果序列號查詢」具體實現邏輯介紹,請移步(最近好像需要翻牆):JeffinBao - Android開發,讀書,見人,行事

另一個是我的個人簡歷應用,仿照地圖搜索的樣式做的,它是下面這個樣子的:

關於開發「JeffinBaoCV」這個個人簡歷應用的介紹,也請移步:JeffinBao - Android開發,讀書,見人,行事

-----------------------------------------

很多知友在其他答案中已經列了很多資料了,我自己也是通過他們介紹的資料的其中一部分來進行學習的,所以資料方面,就不多說了,想說兩點看似無關但我認為又比較重要的點:

1.有自己很強烈想要實現出來的想法

我在學習編程之前,上面兩個應用的初步構想就已經在我腦中了,所以這半年多特別是今年2月底開始學習Android以來,我都是按照怎麼去實現我腦中的想法去學習Android的。沒有對於想要實現的東西有著強烈的願望,我想我是很難堅持下來的。最終把自己的想法實現後,這種開心和一直進步的感覺,也是很鼓舞人心的。

2.「軟實力」的加強

Android應用呈現給用戶最多的是界面,所以界面是否美觀是用戶會不會選擇去用的一個重要因素。對於工程師來說,如何提高自己的審美,進而把自己對美的理解融入到應用當中是很重要的。這不是說工程師一定要具備專業設計師的能力,這不太現實。但是如何保持界面整潔,在字體、顏色、排版上如何規範與統一,都是工程師需要在平時去提高的。

---------------------------------------------

寫了這麼多,不知道有沒有幫助到題主,下面我也想安利下自己的應用以及在求職中的自己:

1.小米、豌豆莢、魅族Flyme、Google Play、鎚子應用商店上搜索「蘋果序列號查詢」,有任何問題,歡迎反饋給我丫。

2.第二個應用做的是個人簡歷—JeffinBaoCV,沒有上線,感興趣的朋友可以通過下面鏈接下載(由於身邊手機不多,可能在小屏幕低版本系統的手機上會有適配問題,如果有,也歡迎反饋給我丫,多謝):百度雲 請輸入提取密碼.(提取碼:9x6d)

3.下面是跟我有關一些主頁的鏈接:

豆瓣主頁:zeroreh

主要用於記錄自己讀過的書和看過的電影,偶爾看看書評和影評,再偶爾寫寫書評並記錄自己生活中的一些想法

微博主頁:Sina Visitor System

主要用於關注一些自己欣賞的人的動態,看到那麼多比自己厲害的人都有自己喜歡的事情去做,也不斷激勵我去做自己喜歡的事情

個人主頁:JeffinBao - Android開發,讀書,見人,行事

主要用於寫技術文章和一些自己認為寫得比較好的文章,剛開始用jekyll引擎不久,所以內容比較少。

GitHub主頁:JeffinBao (Jeffin.Bao) · GitHub

主要用於託管自己的代碼,尋找一些好的開源項目來學習使用。

如果你對我感興趣,請私信我或者通過下面郵箱聯繫我吧,謝謝!

郵箱:bjf13609846991@gmail.com


title: Android學習路線總結,絕對乾貨

tags: Android學習路線,Android學習資料,怎麼學習android

grammar_cjkRuby: true

---

一、前言

不知不覺自己已經做了幾年開發了,由記得剛出來工作的時候感覺自己能牛逼,現在回想起來感覺好無知。懂的越多的時候你才會發現懂的越少。

如果你的知識是一個圓,當你的圓越大時,圓外面的世界也就越大。

最近看到很多Android新手問Android學習路線,學習方法啊,如何入門啊,所以我從網上找了一些資料,然後以我的工作經驗給大家總結一下,讓你們少走彎路,提取一些工作中經常用到的技術。

二、學習知識匯總1、Java se基礎

1).Java基本數據類型與表達式,分支循環。

2).String和StringBuffer的使用、正則表達式。

3).面向對象的抽象,封裝,繼承,多態,類與對象,對象初始化和回收;構造函數、this關鍵字、方法和方法的參數傳遞過程、static關鍵字、內部類。

4).對象實例化過程、方法的覆蓋、final關鍵字、抽象類、介面、繼承的優點和缺點剖析;對象的多態性:子類和父類之間的轉換、抽象類和介面在多態中的應用、多態帶來的好處。

5).Java異常處理,異常的機制原理。

6).常用的設計模式:Singleton、Template、Strategy模式。

7).JavaAPI介紹:種基本數據類型包裝類,System和Runtime類,Date和DateFomat類等。

8).Java集合介紹:Collection、Set、List、ArrayList、LinkedList、Hashset、Map、HashMap、Iterator等常用集合類API。

9).JavaI/O輸入輸出流:File和FileRandomAccess類,位元組流InputStream和OutputStream,字元流Reader和Writer,以及相應實現類,IO性能分析,位元組和字元的轉化流,包裝流的概念,以及常用包裝類,計算機編碼。

10).Java高級特性:反射和泛型。

11).多線程原理:如何在程序中創建多線程(Thread、Runnable),線程安全問題,線程的同步,線程之間的通訊、死鎖。

2、android UI編程

1)、Android開發環境搭建:Android介紹,Android開發環境搭建,第一個Android應用程序,Android應用程序目錄結構。

2)、Android初級控制項的使用:

TextView控制項的使用

Button控制項的使用方法

EditText控制項的使用方法

ImageView的使用方法

RadioButton的使用方法

Checkbox的使用方法

Menu的使用方法

3)、Android高級控制項的使用:

ListView的使用方法

GridView的使用方法

Adapter的使用方法

Spinner的使用方法

Gallary的使用方法

ScrollView的使用方法

RecyclerView

4、對話框與菜單的使用:

Dialog的基本概念

BlockquoteAlertDialog的使用方法

DatePickerDialog的使用方法

Menu的使用方法

自定義Menu的實現方法

5.控制項的布局方法:

線性布局的使用方法

相對布局的使用方法

6.多Acitivity管理:

AndroidManifest.xml文件的作用

Intent的使用方法

使用Intent傳遞數據的方法

啟動Activity的方法

IntentFilter的使用方法

Activity Group的使用方法

7、自定義控制項實現方法:

自定義ListView的實現方法

可摺疊ListView的使用方法

自定義Adapter的實現方法

自定義View的實現方法

動態控制項布局的上實現方法

上拉刷新下拉載入更多

3、android網路編程與數據存儲

1).基於Android平台的HTTP通訊:

Http協議回顧

使用Get方法向伺服器提交數據的方法

使用POST方法向伺服器提交數據的實現方法

使用Http協議實現多線程下載

使用Http協議實現斷點續傳

2).Android數據存儲技術:

SQLite3資料庫簡介

SQL語句回顧

SQLite3編程介面介紹

SQLite3事務管理

SQLite3游標使用方法

SQLite3性能分析

訪問SDCard的方法

訪問SharedPreferences的方法

參考自:Android學習路線

三、進階之路(初級-&>中級-&>高級)1、初級工程師

小明之前完全沒接觸過Android開發,是個應屆生,他的待遇是13k,然後小明以校招的身份進入了百度,然後小明需要怎麼學習才能成為初級工程師呢?這個時候,小明對編程基礎、數據結構、C語言都有一定基礎,Java語法什麼的也都掌握的比較好,Android才有java語言,無奈的是小明並不會搞Android。

小明首先需要購買一本Android入門的書籍,為了更快地學習Android,小明業餘時間也都用來一邊看書一邊照著書中的例子敲代碼,結果2周時間小明就把這本書學了一遍。看完這本書後,小明對Android的歷史、結構、代碼規範等都有了一個大概的了解,並且,小明已經可以寫出一些簡單的Activity了。這個時候在小明眼裡,Android開發很簡單很好玩,通過在xml中擺放一些按鈕文本框什麼的就可以做一些界面了。

小明開始跟著他的技術導師做需求,一些簡單的小需求小明自然是不在話下了。突然有一天來了一個需求,該需求要求小明在Activity中為一個button加一個動畫效果,小明慌了:「完全沒接觸過,書上也沒有講,怎麼辦呢?」小明冷靜了下,打開了百度搜索,輸入「Android 動畫」,打開前幾個鏈接,小明恍然大悟,照著網上的例子把需求給實現了。後來導師告訴他:「學好Android,官方文檔是必須看的,既全面又權威」。然後小明如獲至寶,花了一年時間把上面的guide和training都看了一遍,並且他還動手抄了幾個小例子。

有一天,小明又需要做一個動畫相關的需求,這可難不倒小明,它熟練地打開了百度一下,你就知道,輸入「Android 動畫」,突然他楞了一下:」總不能每次寫動畫都要百度一下吧!「,於是他在CSDN開了一個博客,把動畫相關的知識點都寫上去,為的是後面再寫動畫相關的代碼就不用百度去搜了,事實如何呢?後面再寫動畫相關的代碼,小明的確不用再去百度搜了,因為通過寫一篇動畫博客,他把動畫相關的細節都已經記住了,這樣他就可以不用再去參考任何文檔了,後來小明還學會了把一些瑣碎的不方便放在博客上的東西寫到了印象筆記上面,什麼時候忘了10秒鐘以內都可以快速找回來,而不是花10分鐘去再次搜索一遍。

這裡總結一下,Android入門的時候,需要有一本入門書,好好學習書中的內容,同時花一年時間把Android官方文檔中的training和guide看一遍,同時通過寫博客和記筆記的方式來做總結,建議讓自己的每篇博客都有價值些。通過一年時間的學習,相信每個人都可以達到中級工程師的水平。

技術要求:

  • 基本知識點

    比如四大組件如何使用、如何創建Service、如何進行布局、簡單的自定義View、動畫等常見技術
  • 書籍推薦

    《第一行代碼 Android》、《瘋狂Android》

2、中級工程師

小明經過一年的努力學習終於成為Android中級工程師了,月薪變成了17k。到了中級工程師,已經可以在公司里干很多體力活了,但是一些很重要的任務小明還不能一個人承擔起來,這個時候小明需要學習的內容就很多了,如下所示:

  • AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的區別;
  • Binder:從Java層大概理解Binder的工作原理,懂Parcel對象的使用;
  • 多進程:熟練掌握多進程的運行機制,懂Messenger、Socket等;
  • 事件分發:彈性滑動、滑動衝突等;
  • 玩轉View:View的繪製原理、各種自定義View;
  • 動畫系列:熟悉View動畫和屬性動畫的不同點,懂屬性動畫的工作原理;
  • 懂性能優化、熟悉mat等工具
  • 懂點常見的設計模式

學習方法

閱讀進階書籍,閱讀Android源碼,閱讀官方文檔並嘗試自己寫相關的技術文章,需要有一定技術深度和自我思考。在這個階段的學習過程中,有2個點是比較困擾大家的,一個是閱讀源碼,另一個是自定義View以及滑動衝突。

如何閱讀源碼呢?這是個頭疼的問題,但是源碼必須要讀。閱讀源碼的時候不要深入代碼細節不可自拔,要關注代碼的流程並盡量挖掘出對應用層開發有用的結論。另外仔細閱讀源碼中對一個類或者方法的注釋,在看不懂源碼時,源碼中的注釋可以幫你更好地了解源碼中的工作原理,這個過程雖然艱苦,但是別無他法。

如何玩轉自定義View呢?我的建議是不要通過學習自定義view而學習自定義view。為什麼這麼說呢?因為自定義view的種類太多了,各式各樣的絢麗的自定義效果,如何學的玩呢!我們要透過現象看本質,更多地去關注自定義view所需的知識點,這裡做如下總結:

  • 搞懂view的滑動原理
  • 搞懂如何實現彈性滑動
  • 搞懂view的滑動衝突
  • 搞懂view的measure、layout和draw
  • 然後再學習幾個已有的自定義view的例子
  • 最後就可以搞定自定義view了,所謂萬變不離其宗

大概再需要1-2年時間,即可達到高級工程師的技術水平。我個人認為通過《Android開發藝術探索》和《Android群英傳》可以縮短這個過程為0.5-1年。注意,達到高級工程師的技術水平不代表就可以立刻成為高級工程師(受機遇、是否跳槽的影響),但是技術達到了,成為高級工程師只是很簡單的事。

技術要求:

  • 稍微深入的知識點

    AIDL、Messenger、Binder、多進程、動畫、滑動衝突、自定義View、消息隊列等
  • 書籍推薦

    《Android開發藝術探索》、《Android群英傳》

3、高級工程師

小明成為了夢寐以求的高級工程師,月薪達到了20k,還拿到了一丟丟股票。這個時候小明的Android水平已經不錯了,但是小明的目標是資深工程師,小明聽說資深工程師月薪可以達到30k+。

為了成為Android資深工程師,需要學習的東西就更多了,並且有些並不是那麼具體了,如下所示:

  • 繼續加深理解」稍微深入的知識點「中所定義的內容
  • 了解系統核心機制:
  1. 了解SystemServer的啟動過程
  2. 了解主線程的消息循環模型
  3. 了解AMS和PMS的工作原理
  4. 能夠回答問題」一個應用存在多少個Window?「
  5. 了解四大組件的大概工作流程
  • 基本知識點的細節
  1. Activity的啟動模式以及異常情況下不同Activity的表現
  2. Service的onBind和onReBind的關聯
  3. onServiceDisconnected(ComponentName className)和binderDied()的區別
  4. AsyncTask在不同版本上的表現細節
  5. 線程池的細節和參數配置
  • 熟悉設計模式,有架構意識學習方法

這個時候已經沒有太具體的學習方法了,無非就是看書、看源碼和做項目,平時多種總結,盡量將知識融會貫通從而形成一種體系化的感覺。同時這個階段對架構是有一定要求的,架構是抽象的,但是設計模式是具體的,所以一定要加強下設計模式的學習。關於設計模式的學習,最近一本新書推薦給大家《Android 源碼設計模式解析與實戰》,既可以學習設計模式,又可能體會到Android源碼中的設計思想,我最近也在閱讀此書。

技術要求:

  • 稍微深入的知識點
  • 系統核心機制
  • 基本知識點的細節
  • 設計模式和架構
  • 書籍推薦

    《Android開發藝術探索》、《Android 源碼設計模式解析與實戰》、《Android內核剖析》

參考自:Android學習路線指南

四、學習視頻跟書籍

當你有了學習線路,學習哪些內容,也知道以後的路怎麼走了,理論看多了總要實踐的,我這裡給你們整理了大概80G的學習視頻跟書籍,趕快點我點我點我。。。下載。。

如果你想第一時間看我們的後期文章,掃碼關注公眾號,每周不定期推送Android開發實戰教程文章,你還等什麼,趕快關注吧,學好技術,出任ceo,贏取白富美。。。。

Android開發666 - 安卓開發技術分享
掃描二維碼加關注

http://weixin.qq.com/r/t0T37wnESlQ1rU2M9xGl (二維碼自動識別)


安卓自學課程步驟:我想自學安卓編程,那麼我需要從按那些順序學習那些課程呢? - bird-HU 的回答

歡迎關注我@bird-HU 了解程序員日常

和我的專欄/ http://zhuanlan.zhihu.com/c_29237499

********2016/2/1***************

統一回答幾個問題:

1.是否收費

我答:是收費的,但收的是贊同,不收人民幣。

2.這些視頻都是隨便下來的,拿出來炫耀?

我答:這些雖然是免費視頻,但是,461G,(目前更新到600G+還在持續上傳)如果去整理的話,需要多久?我費力整理了那麼久,要一點點小贊,真的很貴嗎?方便了你,滿足了我的一點虛榮心~

3.自學花了多久?

一年,學了其中的三套.(JAVA基礎,安卓,javaee)

花了多久,1年才學了三套視頻,這裡面量很大很多,擇優選擇就好。

4.吹牛賣視頻?

再次聲明,我不收錢。

畢業後,月入一萬真的很多麼????這還需要吹牛,一年多工作經驗的安卓開發拿一萬,很多麼。(普通二本)還有我沒有問任何人賣1毛錢。

**************如何科學進行學習***********************

.1.堅持:不知道大家還記得每次背單詞都是abondon么?如果長期都是三天打魚,2天曬網的話,你的JAVA學習之旅或許就和背單詞一樣了。

2.多寫:多寫才是硬道理里啊,做練習千萬不要馬虎,有很多不懂的程序如果你實在看不懂,你敲一遍試試?很多時候不明白了,真的你敲一遍就會了。

我當時寫JAVA程序的時候,不用ide,直接用記事本寫,其實不是為了什麼,就是想培養一下自己的寫程序的感覺了

注意:不要因為程序小而不敲,初期的時候,特別容易遺忘。

3.溫故而知新:定期寫一些程序,千萬不要荒廢了哦~

4.善於總結,把知識結構梳理正確了,才能更好的從宏觀理解一門語言~推薦使用mindmanager 做思維導圖。


之前已經回答過了,問題貌似有點重複,直接貼鏈接吧。

如何自學android編程?


前不久基本完成了一個自己構思的小項目,不知道算不算一名android開發工程師了。我的建議是:

1、首先要學好java語言(注意不用去學什麼框架),弄清楚繼承、介面、匿名內部類等等

2、編程基礎比較弱的話,建議看android編程視頻,編程基礎好的,直接看一本android入門書。注意不要看大部頭,看簡明點的,快速看過。

3、看《android開發範例大全》,裡面很多小案例,超級推薦。請仔細看代碼、運行、修改、擴展。為什麼這麼推薦?因為編程是一門強烈實踐的技能。

4、在3中碰到問題就看官方文檔(Android Developers)裡面design、guaid、trainning

以上就夠入門了。下一步是自己構思一個項目(可以從3中延伸而來),同時看看別人做得比較大的項目,比如新浪微博客戶端、知乎客戶端。


Android學習之路Android學習之路

別人整理的幾個開源框架值得推薦的android開源框架

別人整理的一些Android項目https://github.com/Trinea/android-open-project


找本java書

老老實實刷http://developer.android.com,書是沒幾本像樣的

少摻和什麼線下聚會,浪費時間


要麼有興趣,要麼有壓力,有目標的多寫程序,各類app都試著寫寫,自學的知識主要還是來自網上


Android學習中,以個人經歷來說說吧。

1.先學好JAVA,打好語言基礎;

2.找一本Android相關的入門教程,如《瘋狂Android》之類。先弄明白Android一些特色的開發,四大開發基本組件,Activity,Service服務,Content Provider內容提供者,BroadcastReceiver廣播接收器;

3.做個小App,邊學邊做,有付出而又能看到自己的成果,能有一個正向反饋,不斷進步。應用場景下的知識,才是真正有價值的

4.去各大論壇交流學習,國內可以去eoe,國外可以去stackoverflow。可以去code google上下載一些開源的Android項目,進行學習。前段時間,CSDN總結了一些熱門的Android開源:直接拿來用!最火的Android開源項目(一)-CSDN.NET;

5.計劃中:編譯查看Android源碼,並學習學習Linux相關。

最後,重要的還是常玩Android手機了,有熱愛才有動力^ _ ^


看人家怎麼寫,敲一遍,跑起來看看自己的成果,反覆反覆,其實就是一點,實踐最重要。看的懂,但是不一定會。除了實踐,就是常總結,寫寫博客,不一定要寫的多好,而是把自己學會的表達出來,這個時候才是自己的。


這個我覺得可以給點經驗:


1、學習一種後台開發語言,如果是零起步,推薦java。當然,如果你學過C#或者PHP,可以看下java的語法,非常容易順利進第二步。


2、學習面向對象思想。其實,大部分情況下這和第一步都是同時進行的。有的兄弟只是大學學過C語言,這樣就找補充學習下這個。不要太深入,了解繼承、介面、重寫等這些基礎概念就好。


3、開始編碼了,環境搭建,看視頻博客,控制項拖拖拽拽,有兩玩意可以在手機展示了。恭喜你,入門了。


4、看書。推薦《瘋狂的android講義》,其他類似也行,有點厚。看完了,理解了,那就可以了。


5、深入理解原理,書籍看懂看透,運行機制、開源代碼、交流學習,優化代碼,太多了不說了。應該中級了吧。

本人菜鳥,太高級的我也不懂了。


推薦閱讀:

Android 和 iOS 應用開發有哪些不同?
想開發一款安卓社交類的APP需要有哪些準備?
如何實現 Medium for iOS 那般的下劃線效果?
一個android工程師除了需要編寫代碼的技能,還需要什麼?
Android Studio項目應該提交哪些文件到GitHub上?

TAG:Android開發 |