當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]看到很多人提問(wèn)非科班該如何學(xué)習(xí)編程,其實(shí)科班也基本靠自學(xué)。有句話叫“師傅領(lǐng)進(jìn)門(mén)修行靠個(gè)人”,再厲害的老師能教你的東西都是很有限的,真正的修行還是要靠自己。我本科是學(xué)數(shù)學(xué)的,雖然研究生是計(jì)算機(jī)專業(yè),但研究生往往是做研究工作,并不會(huì)接觸編程這么基本的東西,關(guān)于編程相關(guān)我都是靠自學(xué)。對(duì)于Android這一塊,是參加工作還開(kāi)始接觸,開(kāi)始自己學(xué)習(xí)的。

看到很多人提問(wèn)非科班該如何學(xué)習(xí)編程,其實(shí)科班也基本靠自學(xué)。有句話叫“師傅領(lǐng)進(jìn)門(mén)修行靠個(gè)人”,再厲害的老師能教你的東西都是很有限的,真正的修行還是要靠自己。我本科是學(xué)數(shù)學(xué)的,雖然研究生是計(jì)算機(jī)專業(yè),但研究生往往是做研究工作,并不會(huì)接觸編程這么基本的東西,關(guān)于編程相關(guān)我都是靠自學(xué)。對(duì)于Android這一塊,是參加工作還開(kāi)始接觸,開(kāi)始自己學(xué)習(xí)的。

學(xué)習(xí)級(jí)別,很多人都往往劃分成入門(mén)、初級(jí)、中間..骨灰級(jí)等。這里就簡(jiǎn)單地劃分為兩級(jí):基礎(chǔ)篇和進(jìn)階篇。另外,本文涉及到的所有書(shū)籍都是Gityuan 在學(xué)習(xí)過(guò)程中所讀過(guò)的比較經(jīng)典的一些書(shū)籍,才推薦給大家。

一、基礎(chǔ)篇

看書(shū)的姿態(tài):學(xué)習(xí)過(guò)程往往大家都需要看書(shū),網(wǎng)上一搜,往往會(huì)有一大推的書(shū)推薦給大家去閱讀,面對(duì)這么多書(shū),該如何選擇,如何閱讀的呢,對(duì)于同一個(gè)層級(jí)的書(shū)籍選擇一本精讀,其余的粗讀、略讀即可,大同小異,對(duì)于精讀的書(shū)籍需要反復(fù)的閱讀。

1.1 Java篇

Java是Android的基礎(chǔ),建議初學(xué)者一定要先學(xué)習(xí)Java基本知識(shí),進(jìn)而再學(xué)習(xí)Android,循序漸進(jìn),切莫心急,只有扎實(shí)的基礎(chǔ)才能建造牢固的上層建筑。

Java書(shū)籍

Thinking in Java: 中文版《Java編程思想 》,這是一本非常經(jīng)典的Java書(shū)籍,很多人都說(shuō)這個(gè)書(shū)不適合初學(xué)者,我記得自己當(dāng)初看的第一本Java書(shū)便是這本書(shū)??赐甑谝槐閷?duì)Java有了整體的理解,但很多細(xì)節(jié)沒(méi)有完全理解,查了資源又看了第二遍,對(duì)Java有了更深地理解。再后來(lái)一段時(shí)間后,能力也有所提升,再拿起這本書(shū)又看了第三遍,發(fā)現(xiàn)對(duì)面向?qū)ο笥辛烁钜徊降睦斫?,這本書(shū)就是適合反復(fù)的閱讀。

Effective Java:Java進(jìn)階書(shū),這本書(shū)采用“條目”的方式來(lái)展開(kāi)的,總提出了78條Java具體的建議,對(duì)Java平臺(tái)精妙之處的獨(dú)到見(jiàn)解,還提供優(yōu)秀的代碼范例。作為Java進(jìn)階之書(shū),對(duì)Java水平的提升大有裨益。

Java concurrency in Practice:中文版《Java并發(fā)編程實(shí)戰(zhàn)》,本書(shū)采用循序漸進(jìn)的講解方式,從并發(fā)編程的基本理論講起,再講述了結(jié)構(gòu)化并發(fā)應(yīng)用,性能與測(cè)試,最后將顯式鎖、原子變量、非阻塞算法這些高級(jí)主題。對(duì)于Java并發(fā)這一塊算得上是一本很棒的書(shū)。

Java Performance:中文版《Java性能優(yōu)化權(quán)威指南》,Java之父James Gosling推薦的一本Java應(yīng)用性能優(yōu)化的經(jīng)典之作,包含算法結(jié)構(gòu)、內(nèi)存、I/O、磁盤(pán)使用方式,內(nèi)容通俗易懂,還介紹了大量的監(jiān)控和測(cè)量工具。關(guān)于優(yōu)化都是屬于較深的領(lǐng)域,對(duì)Java有一定基礎(chǔ)后,很有必要了解看看。

Java虛擬機(jī),這是作為進(jìn)階Java高手必需有所了解:

The Java Language Specification,官方Java文檔(英文版)

The Java® Virtual Machine Specification,官方Jvm文檔(英文版)

《深入理解java虛擬機(jī)》:這是國(guó)內(nèi)關(guān)于Java虛擬機(jī)講得非常全面的一本書(shū),從Java GC到Java虛擬機(jī)內(nèi)部實(shí)現(xiàn)以及優(yōu)化策略,作為Java高手非常值得一看的書(shū)籍。

本文的重點(diǎn)是講如何學(xué)習(xí)Android,所以姑且把Java基礎(chǔ)與進(jìn)階的書(shū)都放到Android學(xué)習(xí)的基礎(chǔ)篇里。作為Android開(kāi)發(fā)者來(lái)說(shuō),完全沒(méi)有必要一開(kāi)始都對(duì)Java理解得那么深,只有要看一兩本Java基本書(shū),掌握J(rèn)ava面向?qū)ο蟮乃枷氲暮诵囊x即萬(wàn)物皆為對(duì)象,掌握J(rèn)ava基本語(yǔ)法,基本就可以開(kāi)啟Android的學(xué)習(xí)之路。在后續(xù)對(duì)Android也有一定理解后,再慢慢不斷提升Java和Android水平。

有朋友私信我覺(jué)著這個(gè)java書(shū)難度有點(diǎn)高,可能是本人在看Java書(shū)籍之前,還看過(guò)些許C和C++的入門(mén)書(shū)的緣故,所以看的第一本書(shū)《Java編程思想》。如果你真的是零基礎(chǔ),第一次接觸編程,想以Java作為自己的入門(mén)語(yǔ)言,那么你可以先看看《Java語(yǔ)言程序設(shè)計(jì)》(基礎(chǔ)篇) 或者《Java從入門(mén)到精通》,作為初學(xué)者險(xiǎn)掌握J(rèn)ava基本語(yǔ)法,平時(shí)遇到不熟悉的方法,多查看API文檔即可,慢慢地就熟悉了。

1.2 Android基礎(chǔ)篇

有了一定的Java基礎(chǔ)(不需要精通Java),就可以開(kāi)始入門(mén)Android。建議初學(xué)Android者,一定要先搭建自己的開(kāi)發(fā)環(huán)境,先準(zhǔn)備jdk和Android Studio環(huán)境。再看書(shū)的過(guò)程,一邊看知識(shí)點(diǎn)一邊寫(xiě)示例程序,一來(lái)加深印象,二來(lái)提高動(dòng)手能力。

《瘋狂Android講義》:作者李剛,這是我看過(guò)的第一個(gè)Android書(shū)籍,目前有第三版了,我當(dāng)時(shí)看的是第二版基于Android 4.2,書(shū)中有大量的實(shí)例,記得當(dāng)時(shí)每看完一個(gè)實(shí)例就跟著敲了一遍,大概花了一周時(shí)間把這本書(shū)看完并把大部分的實(shí)例代碼都親手敲了一遍。

《第一行代碼》:作者郭霖,網(wǎng)上有不少人都推薦這本書(shū)作為Android入門(mén)書(shū),但我當(dāng)時(shí)沒(méi)有看過(guò)。這是圖靈系列圖書(shū),前段時(shí)間圖靈的編輯看到我的博客gityuan.com,于是聯(lián)系到我問(wèn)是否有興趣出書(shū),便提到郭霖的《第一行代碼》也是他們出版社推出的,然后就給我郵寄了一本。我大概掃了一掃這本書(shū),內(nèi)容的確比較基礎(chǔ),作者文筆不錯(cuò),書(shū)中還穿插了不少打怪漲經(jīng)驗(yàn)升級(jí)的片段,比較風(fēng)趣,初學(xué)者可以看看。

Android的基本書(shū)籍,只需一兩本即可,沒(méi)有必要看太多基礎(chǔ)書(shū)籍,不同能力就該有不同的追求,這里就不再介紹其他基礎(chǔ)書(shū)籍。 另外,Android開(kāi)發(fā)過(guò)程中總是需要各種開(kāi)發(fā)環(huán)境、工具的下載,再這里推薦一個(gè)不錯(cuò)的網(wǎng)站AndroidDevTools.cn,收集整理了 Android開(kāi)發(fā)、設(shè)計(jì)等相關(guān)的各種工具大集合,非常全面,而且速度也不錯(cuò)哦,最重要的不用翻墻就可下載到最新的工具。

1.3 Android一手資料

何為Android一手資料?那就是Google官方給出的資料,這里往往是英文版的,營(yíng)養(yǎng)價(jià)值極高。其實(shí)你只要英文還湊合+翻墻工具,強(qiáng)烈建議你直接看Android官網(wǎng)的資料,千萬(wàn)別被英語(yǔ)所嚇倒,因?yàn)楹芏鄬I(yè)名稱,大家一看就明白比如Activity/Service等這些代碼名稱本身就是英語(yǔ),剩下地都就非?;A(chǔ)語(yǔ)法,不懂可以隨時(shí)翻譯,我一般都是用Chrome瀏覽器+Google翻譯插件,哪里不會(huì)點(diǎn)哪里,媽媽再也不用擔(dān)心我的英語(yǔ)了。

言歸正傳,如果你能看完并理解下列的內(nèi)容,那么你完全可以沒(méi)有必要再看前面介紹的書(shū)籍,并且對(duì)于Android已有相當(dāng)熟悉了。

下面列舉常用的資料:

另外由胡凱發(fā)起了Android培訓(xùn)課程中文版;對(duì)官方文檔進(jìn)行翻譯;

Android training:Android培訓(xùn)文檔;

Android API指南:Android組件、Manifest配置文件,動(dòng)畫(huà)/圖像等相關(guān)介紹;

Android Tools:性能、測(cè)試、Android Studio等各種工具說(shuō)明文檔;

source.android.com:介紹Android開(kāi)源碼相關(guān)的內(nèi)容;

Android Performance Patterns:2015年Google陸續(xù)在Youtube上發(fā)布的Android性能優(yōu)化的視頻,目前已更新第4季。

國(guó)內(nèi)Google組織,優(yōu)酷上發(fā)布了相應(yīng)的 (中文)Android 性能模式 第四季;

另外由胡凱發(fā)起了Android性能優(yōu)化典范中文版文檔;對(duì)官方視頻進(jìn)行翻譯并整理;

android-developers.blogspot.com:Android官方博客,有一些比較不錯(cuò)的feature,博客會(huì)第一時(shí)間呈現(xiàn)。

1.4 Android資源整理

到這里,那么你已經(jīng)具備開(kāi)發(fā)App的本領(lǐng)。平時(shí)需要自己動(dòng)手多寫(xiě)寫(xiě)App,另外就是看看別人優(yōu)秀的App是如何寫(xiě)的,下面列舉一些開(kāi)源庫(kù)、工具以及App:

android-arsenal.com:作者vbauer整理收集Github中各種開(kāi)源庫(kù)與工具,并提供搜索功能,是國(guó)外整理得最全面的庫(kù);

Android 開(kāi)源項(xiàng)目匯總:作者Trinea整理的各種開(kāi)源庫(kù),是國(guó)內(nèi)整理得最全面的庫(kù);

codeKK 開(kāi)源項(xiàng)目源碼分析:從源碼的角度,分析Android較流行的優(yōu)秀開(kāi)源框架;

codota.com:這是一個(gè)代碼搜索引擎,收集的是各種API的優(yōu)秀示例Java代碼。

當(dāng)然還有很多優(yōu)秀的博客和網(wǎng)站值得推薦… //TODO

二、進(jìn)階篇

作為程序員,不去閱讀源碼,僅僅看API文檔,只是浮于表象,這是遠(yuǎn)遠(yuǎn)不夠的。.真正最能鍛煉能力的便是直接去閱讀源碼,不僅限于閱讀Andoid系統(tǒng)源碼,也包括閱讀各種優(yōu)秀的開(kāi)源庫(kù)。

2.1 閱讀源碼的重要性

借用Linux之父Linus Torvalds的一句名言:Read the fucking source code。不管是閱讀Andoid系統(tǒng)源碼還是優(yōu)秀的開(kāi)源框架,對(duì)能力那都會(huì)有一個(gè)巨大的提升;首先,能學(xué)習(xí)到優(yōu)秀的代碼風(fēng)格和設(shè)計(jì)思想;能真正做到“知其然,還需知其所以然”;能指導(dǎo)自己更加靈活的使用API,能更加快速地找到系統(tǒng)bug的根源。

2.2 閱讀源碼的準(zhǔn)備

Java基礎(chǔ):上層framework以及App層都是采用Java語(yǔ)法;

C/C++基礎(chǔ):Android的jni/native層代碼采用C++,Linux 采用C;

Linux:Android內(nèi)核基于Linux的,了解Linux相關(guān)知識(shí)對(duì)深入掌握Android還是很有必要。

Git:Android源碼采用git和repo進(jìn)行管理;

Make:Android源碼采用Make系統(tǒng)編譯,源碼系統(tǒng)中會(huì)看到很多Android.mk之類的文件;

Source Insight:這絕對(duì)是看源碼的神器;可以在Java、C++、C代碼之間無(wú)縫銜接;

Eclipse:熟悉常用快捷鍵,工欲善其事必先利其器;雖然Source Insight很方便,但由于對(duì)Eclipse的熟悉感,對(duì)于framework Java層面的代碼,我還是更習(xí)慣用Eclipse來(lái)看,對(duì)于Native代碼以及l(fā)inux代碼則采用Source Insight來(lái)看;

Android Studio:這是Google官方支持的App開(kāi)發(fā)環(huán)境,關(guān)于Android Studiod使用教程;

Google Drawings:這是畫(huà)圖工具,Gityuan博客中的文章都是采用Google Drawing完成,比如Binder開(kāi)篇文中的圖。

StarUML:這是類圖,Gityuan博客文章的類圖和流程圖都是采用StarUML完成,比如理解Android進(jìn)程創(chuàng)建流程文中時(shí)序圖。

2.3 閱讀源碼的姿態(tài)

閱讀源碼絕不是從源碼工程按順序一個(gè)個(gè)的文件,從首行看到尾行。正確而高效地閱讀源碼的姿態(tài)應(yīng)該是以某一個(gè)主線為起點(diǎn),從上層往底層,不斷地追溯,在各個(gè)模塊、文件、方法之間來(lái)回跳轉(zhuǎn),反復(fù)地閱讀,理清整個(gè)流程的邏輯。同時(shí)帶著思考去看源碼,嘗試去揣測(cè)作者的用意,去理解代碼的精妙之處,去思考代碼可能存在的缺陷,去總結(jié)優(yōu)秀的代碼設(shè)計(jì)思想。下面說(shuō)說(shuō)我在閱讀Android源碼過(guò)程常涉及的庫(kù)。

閱讀Android源碼:

下面是我以Android開(kāi)機(jī)過(guò)程為主線,展開(kāi)一系列的文章 Android開(kāi)篇中的一副流程圖,在公司內(nèi)部分享時(shí)我曾多次以下圖為流程整個(gè)Android架構(gòu),如下圖:

 

 

Android系統(tǒng)源碼

android.googlesource.com:Google官方源碼,國(guó)內(nèi)無(wú)法直接訪問(wèn),需要翻墻,對(duì)于一個(gè)程序員來(lái)說(shuō)具備翻墻的能力是非常有必要的。Android源碼中包含的庫(kù)非常之多,下面列舉我在看Android源碼過(guò)程中涉及較多,也是比較??吹囊恍?kù):

android/platform/packages/apps:Android自帶的app,比如Email,Camera, Music等,對(duì)于應(yīng)用開(kāi)發(fā)工程師主要關(guān)注的目錄;

android/platform/frameworks/base: Java framework,這是framework工程師看得最多的目錄;

android/platform/frameworks/native:Native framework;

android/platform/art:Art虛擬機(jī);

android/kernel/common:Android內(nèi)核,這是驅(qū)動(dòng)工程師最關(guān)注的模塊;

android/platform/system/core :核心系統(tǒng);

android/platform/libcore:平臺(tái)的lib庫(kù); 另外,對(duì)于無(wú)法翻墻的朋友來(lái)說(shuō),還可以通過(guò)上Github通過(guò)Android主頁(yè) 下載Android源碼,這些都是定時(shí)從Google官方源碼的鏡像同步而來(lái)的。

2.4 優(yōu)秀資源

牛頓曾說(shuō)過(guò):“如果我看得更遠(yuǎn)一點(diǎn)的話,是因?yàn)槲艺驹诰奕说募绨蛏?rdquo;,這句話很具有實(shí)用價(jià)值,看完前面的介紹,你千萬(wàn)不要一上來(lái)就一頭扎進(jìn)源碼的世界,小心你會(huì)進(jìn)入二次元世界,處于混沌狀態(tài),最后崩潰乃至放棄求知之路,一定要合理利用現(xiàn)有的優(yōu)秀資源。

Android 系統(tǒng)源碼分析

Innost的專欄

鄧凡平前輩所寫(xiě)博客,條例有序,覆蓋了Android系統(tǒng)大部分內(nèi)容;

《深入理解Android》 (卷I,卷II,卷III)

老羅的Android之旅

羅升陽(yáng)前輩所寫(xiě)博客,從各個(gè)層面介紹Android系統(tǒng);

《Android系統(tǒng)源代碼情景分析 》

Gityuan源碼分析

對(duì)于鄧凡平和羅升陽(yáng)兩位前輩的博客基于Android 2.x或4.x,目前Android已發(fā)展到Android 6.0。不管Android如何變化,其核心思維變化并沒(méi)有很大,所以兩位前輩的博客還是很有值得學(xué)習(xí)和參考的地方。話又說(shuō)回來(lái),Android經(jīng)過(guò)了幾個(gè)大版本的迭代,無(wú)論是從代碼結(jié)構(gòu)還是整體邏輯仍有不少變化。故博主計(jì)劃寫(xiě)一關(guān)于Android 6.0源碼系列的博文。

Gityuan作為Android界新秀,能力尚不及很多前輩,但有一顆樂(lè)于分享的心,有一份癡于Android的品質(zhì),有一種堅(jiān)持的態(tài)度,已經(jīng)并一直還在努力奮斗的道路上…

2.5 進(jìn)階書(shū)籍

《深入理解Linux內(nèi)核》

《深入Linux內(nèi)核架構(gòu)》

《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》

《Linux設(shè)備驅(qū)動(dòng)程序》

《重構(gòu)·改善既有代碼的設(shè)計(jì)》

《編程珠璣(卷1,卷2)》

《設(shè)計(jì)模式》

《設(shè)計(jì)模式之禪》

《人月神話》

前4本書(shū)都是關(guān)于Linux,如果你不是需要從事Linux相關(guān)開(kāi)發(fā),只想提升對(duì)Android整體的理解,那么只需看一到兩本,對(duì)Linux的進(jìn)程、內(nèi)存、IO以及驅(qū)動(dòng)有所了解,對(duì)CPU調(diào)度、進(jìn)程間通信有所熟悉就基本可以。另外,優(yōu)秀的書(shū)還有很多,這里只介紹/列舉我看過(guò)的書(shū),目前還在看一些優(yōu)秀的書(shū),后續(xù)再更新。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉