【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】2020 年Android 開(kāi)發(fā)者需要的技能_第1頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】2020 年Android 開(kāi)發(fā)者需要的技能_第2頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】2020 年Android 開(kāi)發(fā)者需要的技能_第3頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】2020 年Android 開(kāi)發(fā)者需要的技能_第4頁(yè)
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】2020 年Android 開(kāi)發(fā)者需要的技能_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】2020年,Android開(kāi)發(fā)者需要的技能

一個(gè)Android技術(shù)專家,至少有2~3個(gè)專業(yè)領(lǐng)域。鏈接:/android-developer-skills/作者:VasiliyZukanov,獨(dú)立Android開(kāi)發(fā)及軟件顧問(wèn)譯者:羅昭成,Android開(kāi)發(fā)者鏈接:/android-developer-skills/作者:VasiliyZukanov,獨(dú)立Android開(kāi)發(fā)及軟件顧問(wèn)譯者:羅昭成,Android開(kāi)發(fā)者許多Android開(kāi)發(fā)者經(jīng)常會(huì)問(wèn)我,要學(xué)會(huì)哪些東西才能成為一個(gè)優(yōu)秀的Android工程師?對(duì)于這個(gè)問(wèn)題,他們的描述或多或少都有些差異,但是,總體來(lái)說(shuō),我們都需要學(xué)習(xí)一系列的技能,才能成為一個(gè)優(yōu)秀的Android工程師。在我看來(lái),存在這樣的困惑是正常的。Android是一個(gè)巨大并且動(dòng)態(tài)的生態(tài)系統(tǒng),你可能需要花好幾周時(shí)間去了解并學(xué)習(xí)它相關(guān)的一些工具和概念,但是最后你會(huì)發(fā)現(xiàn),它們有好多都不是很重要,或者說(shuō)并不是非常有用。因此,在本文中,我將分享我在Android開(kāi)發(fā)中所使用到的重要技能,希望能夠幫到你,讓你把你的精力集中到重要的事情上。當(dāng)然,如果你是一個(gè)經(jīng)驗(yàn)豐富的Android開(kāi)發(fā)者,這些知識(shí)可能你都知道。有很多技能和觀點(diǎn)都需要很多基礎(chǔ)知識(shí)的沉淀,當(dāng)你沒(méi)有足夠的經(jīng)驗(yàn)的時(shí)候,很難看到這些技能點(diǎn)。文中,我不可能列出所有Android開(kāi)發(fā)者都需要的技能。所以,我根據(jù)不同的經(jīng)驗(yàn),將這些知識(shí)點(diǎn)進(jìn)行了粗略分組。請(qǐng)注意,這只是一個(gè)粗略的分組,并不一定是很精確的。如果你只是一個(gè)想成為Android開(kāi)發(fā)者的人,并且還沒(méi)有寫過(guò)任何應(yīng)用,那么這篇文章對(duì)你來(lái)說(shuō),還有點(diǎn)太早。本文主要是為了幫助開(kāi)發(fā)者成為一個(gè)更專業(yè)的人。本文,我會(huì)給你很多建議,不會(huì)讓你空手而歸。文章中列出了如何在短時(shí)間成為一個(gè)專業(yè)的開(kāi)發(fā)者。讀完文章,需要你自己去練習(xí),并時(shí)常回來(lái)看看這些技能。在本文開(kāi)始之前,我就當(dāng)你已經(jīng)在GooglePlay發(fā)布過(guò)Android應(yīng)用并且使用GitHub來(lái)進(jìn)行源碼管理。Android是一個(gè)非常復(fù)雜的框架,它擁有陡峭的學(xué)習(xí)曲線。有一些復(fù)雜的概念的確是Native的Android開(kāi)發(fā)者需要學(xué)習(xí)的,但另一部分卻是由于Android的原因,造成了它的復(fù)雜度。當(dāng)你向?qū)I(yè)進(jìn)軍時(shí),除了你的軟件開(kāi)發(fā)工作以外,你應(yīng)該學(xué)習(xí)Android框架,忘記語(yǔ)言、架構(gòu)、流行的開(kāi)源庫(kù),專注于核心概念,并進(jìn)行深入的研究。具體來(lái)說(shuō),我建議你更多的了解以下內(nèi)容:Android內(nèi)存管理和進(jìn)程調(diào)度當(dāng)面臨「LowMemoryKiller」的時(shí)候,如何保證你的應(yīng)用程序穩(wěn)定可靠的運(yùn)行?這是一件很復(fù)雜的事情。長(zhǎng)話短說(shuō),當(dāng)用戶切換到其它應(yīng)用時(shí),你應(yīng)用的生命周期就會(huì)被打亂,但是當(dāng)用戶過(guò)一會(huì)兒重新切換回來(lái)的時(shí)候,用戶卻希望你的應(yīng)用程序像任何事情都沒(méi)有發(fā)生過(guò)一樣,正常運(yùn)行。在本文中,我并不會(huì)介紹內(nèi)存管理的任何細(xì)節(jié),如果你想了解它們,可以看看這篇文章。生命周期如果有人要我說(shuō)出Android應(yīng)用程序中的復(fù)雜度和Bug的主要來(lái)源,我會(huì)立馬大聲告訴他是“生命周期”(然后捂住臉哭)。Application、Activity、Fragment、Service、BroadcastReceiver、ContentProvider和一些Android框架的核心組件,都擁有復(fù)雜的生命周期,并且它們的生命周期還不一樣。如果你覺(jué)得這還不夠多,Google也一直在推出新的庫(kù)和框架,這些庫(kù)都有自己的復(fù)雜性和獨(dú)立的生命周期。Loader,ViewModel和LiveData都是為了解決這些問(wèn)題而推出的。有件有意思的事情,我從來(lái)沒(méi)有看到過(guò)任何有關(guān)“生命周期“的定義。我們一直在使用它,但是它到底是什么意思呢?據(jù)我所知,在某種程度上,你只是把一些節(jié)點(diǎn)串聯(lián)在一起,構(gòu)建出一個(gè)生命周期的圖。我對(duì)生命周期有過(guò)很多的思考,在這里,我將嘗試對(duì)它進(jìn)行定義。組件的生命周期是一個(gè)抽象的狀態(tài)機(jī)。這里的抽象的意思是指,這些狀態(tài)機(jī)的狀態(tài)是預(yù)先定義好的,它們之間的轉(zhuǎn)換條件也是定義好的。但是這些定義是不完整的。你需要去實(shí)現(xiàn)缺少的部分,使他們可以正常工作。這些缺少的部分是這些組件方法的子集,我們稱其為“生命周期回調(diào)”,除了狀態(tài)機(jī)本身之外,這些生命周期回調(diào)中,也有很多隱式的限制和約束。這些限制有些寫在了文檔中,而有些卻并沒(méi)有記錄。生命周期到底有多復(fù)雜?我們先來(lái)看一下這張圖(它有點(diǎn)不完整,還有點(diǎn)過(guò)時(shí))。這張圖,看起來(lái)有點(diǎn)可怕。不過(guò),你也不要慌,大多數(shù)Andorid開(kāi)發(fā)者都搞不明白這個(gè)圖。事實(shí)上,即使Google的Android開(kāi)發(fā)者也搞不明白生命周期的問(wèn)題。Google在發(fā)布Lifecycle組件的時(shí)候,里面引入了一些有關(guān)Fragment的bug,直到后續(xù)的新版本發(fā)布了才得以修復(fù)。雖然現(xiàn)在你不需要完全掌握Android的生命周期,但是你必須要知道一些重要的細(xì)節(jié)。否則,你的代碼會(huì)變得混亂不堪,并且容易出現(xiàn)一系列難以解決的問(wèn)題。我寫了兩篇文章Activity生命周期與Fragment生命周期,描述了生命周期的細(xì)節(jié)。當(dāng)你不知道如何使用onStart和onResume時(shí),你可以去看看這兩篇文章。當(dāng)你掌握了生命周期的基礎(chǔ)知識(shí),你可以去看看GaborVaradi寫的Android開(kāi)發(fā)的十宗罪,這篇文章,列舉出了大多數(shù)開(kāi)發(fā)者都會(huì)犯的錯(cuò)誤。這些錯(cuò)誤大多數(shù)都與生命周期有關(guān)。順便說(shuō)一下,在面試中,生命周期相關(guān)的問(wèn)題也會(huì)被經(jīng)常問(wèn)到。這也是你必須好好學(xué)習(xí)生命周期的原因。Context在每一個(gè)Android應(yīng)用程序中,都有一個(gè)或多個(gè)上下文對(duì)象。和生命周期一樣,它也很難被解釋。它就像是一個(gè)“上帝類“一樣,它有非常多的能力。我們很難用一兩句話就把它描述清楚。盡管如此,理解Context職責(zé)和不同Context之前的區(qū)別也是非常重要的。本文中,沒(méi)有更多關(guān)于Context的內(nèi)容,我建議你去讀一下StackOverflow中關(guān)于《Whatis'Context'onAndroid?》的回答和這個(gè)回答的內(nèi)容.UI線程每一個(gè)Android應(yīng)用程序都有一個(gè)特殊的線程——UI線程。這一個(gè)線程在屏幕上繪制出UI頁(yè)面。如果你讓UI線程超負(fù)荷運(yùn)行,你的應(yīng)用程序?qū)?huì)變得卡頓,不響應(yīng)。在極端情況下,UI線程中的錯(cuò)誤會(huì)導(dǎo)致整個(gè)應(yīng)用程序出錯(cuò)(至少看起來(lái)像是出錯(cuò)了)。如果你想詳細(xì)了解線程背后的機(jī)制原理,你可以去看這個(gè)視頻,視頻中詳細(xì)解釋了Android中的多線程,包含UI線程的相關(guān)細(xì)節(jié)和可能存在的問(wèn)題。邏輯拆分從整體上說(shuō),Android框架的代碼很不“整潔”。它包含著很多的上帝類,這些類中,每一個(gè)有數(shù)千行代碼,并且我們還必須去擴(kuò)展這些類,才能讓我們的應(yīng)用程序運(yùn)行起來(lái)。在多數(shù)情況下,不管是Application,Activity,F(xiàn)ragments還是Service,我們都是在一個(gè)很大的類中,做很多的事情。雖然在Andorid開(kāi)發(fā)中,這是一個(gè)常見(jiàn)的做法,但這樣子做并不利于長(zhǎng)期維護(hù)我們的代碼邏輯。因此我建議,要盡可能的注意這個(gè)問(wèn)題,多找機(jī)會(huì)去重構(gòu)代碼,將邏輯拆分到獨(dú)立的類中去。說(shuō)實(shí)話,我現(xiàn)在并不認(rèn)為,一個(gè)初級(jí)開(kāi)發(fā)者可以對(duì)架構(gòu)和設(shè)計(jì)做出太多的改善工作。正確的封裝代碼邏輯,提取出有意義的類,都需要一些開(kāi)發(fā)經(jīng)驗(yàn)。當(dāng)然,我也不希望你不去思考代碼拆分,你可以做一些力所能及的事情,避免出現(xiàn)不可控的情況(例如,一個(gè)Activity中寫了超過(guò)5000行代碼)。剛開(kāi)始,你可以嘗試拆分這篇文章中描述的與Context有關(guān)的邏輯。當(dāng)你在你的職業(yè)生涯中工作幾年,你變成經(jīng)驗(yàn)豐富的Android開(kāi)發(fā)者,通過(guò)研究和學(xué)習(xí),你可以很輕松的實(shí)現(xiàn)一些非專業(yè)化的功能。那下一步,你該做什么?我認(rèn)為,在這個(gè)時(shí)候,你已經(jīng)很熟悉Android框架的基礎(chǔ)知識(shí)了,可以嘗試去學(xué)習(xí)更高層次的技能。這些技能不局限于Android,它們是一些通用的軟件開(kāi)發(fā)的技能。具體來(lái)說(shuō),你可以研究以下主題:依賴注入依賴注入是一個(gè)關(guān)注結(jié)構(gòu)分離的設(shè)計(jì)模式。它主要是用來(lái)進(jìn)行分離應(yīng)用程序的兩個(gè)功能:應(yīng)用程序和核心功能、核心功能組件實(shí)現(xiàn)之間的鏈接。從某些方面來(lái)說(shuō),實(shí)現(xiàn)了依賴注入的代碼庫(kù)就好你一個(gè)計(jì)算機(jī):依賴注入的基礎(chǔ)庫(kù)就像是主板一樣,而其他的功能組件就好像是CPU、內(nèi)存、外設(shè)等。只要你的代碼中實(shí)現(xiàn)了依賴注入,你就可以很方便的插入新功能,并且可以很容易的重用其它組件的功能,也可以很方便的使用新組件的功能。雖然這個(gè)比喻有點(diǎn)夸張,但是在我看來(lái),它也確實(shí)很好的反映了依賴注入背后的思想。不幸的是,現(xiàn)在關(guān)于依賴注入的文章,很多都存在誤解,這給初學(xué)者帶來(lái)很多干擾。因此,如果你想學(xué)習(xí)依賴注入,我建議你讀一下這篇文章,本文中,我分析了眾多依賴注入的“神話“。UI分離由于Android框架本身的架構(gòu),造成了我們?cè)陂_(kāi)發(fā)的過(guò)程中,使用戶頁(yè)面與應(yīng)用程序中的其它邏輯耦合在一起。幾乎所有的Android初學(xué)者都會(huì)這樣。這種耦合會(huì)導(dǎo)致我們寫一個(gè)很大的類,這個(gè)類里面有應(yīng)用程序的UI繪制、網(wǎng)絡(luò)處理、多線程處理、應(yīng)用業(yè)務(wù)邏輯等。根據(jù)我的經(jīng)驗(yàn),UI邏輯與其它邏輯耦合在一起,會(huì)導(dǎo)致代碼的可維護(hù)性越來(lái)越差,遲早會(huì)使用代碼變得難以理解,無(wú)法閱讀。到最后,可能會(huì)因?yàn)楣δ苌系囊稽c(diǎn)小變化,引起很大的副作用。要將UI邏輯與其它邏輯進(jìn)行分離,可以用使用Model-View-X的架構(gòu)模式。例如:Model-View-Contoller(MVC)、Model-View-Presenter(MVP)、Model-View=ViewModel(MVVM)。這些架構(gòu)模式都屬于同一類架構(gòu),當(dāng)然,這一類架構(gòu)不僅僅包含列舉的這幾個(gè),還有其它的架構(gòu)模式。在這里,為了更方便的描述這一類架構(gòu)模式,我把他們統(tǒng)稱為MVx模式。當(dāng)你在學(xué)習(xí)MVx模式的時(shí)候,請(qǐng)記住,這些都不是架構(gòu),而是一種架構(gòu)模式。這些架構(gòu)模式僅用于UI展示邏輯。因此僅僅使用MVx并不能給你一個(gè)好的架構(gòu),要有一個(gè)好的架構(gòu),你還需要在其它方面做出更多的努力才能實(shí)現(xiàn)。多線程有經(jīng)驗(yàn)的Android開(kāi)發(fā)者都會(huì)了解多線程,并且了解他們對(duì)應(yīng)用程序的影響。你也許會(huì)說(shuō),我精通AsyncTask、RxJava、協(xié)程等。我想表達(dá)的多線程不是你理解的這個(gè)。會(huì)使用多線程框架并不等同于理解多線程。舉個(gè)例子,眾多Android開(kāi)發(fā)者都認(rèn)為,使用AsyncTask會(huì)導(dǎo)致內(nèi)存泄漏。這個(gè)觀點(diǎn)來(lái)自AndroidStudio默認(rèn)的多線程lint規(guī)則中。既然如此,那這個(gè)觀點(diǎn)就是對(duì)的了嗎?很不幸,這個(gè)觀點(diǎn)是錯(cuò)誤的。在這里,我不講解它們的細(xì)節(jié),你可以讀一下這篇文章,里面有很多關(guān)于AsyncTask的內(nèi)容。我認(rèn)為要理解多線程程,就必須可以使用任何多線程框架,甚至是基于基礎(chǔ)的Thread,都可以寫出正確的并發(fā)代碼。要實(shí)現(xiàn)這個(gè)目標(biāo),你不僅僅需要知道你喜歡的多線程庫(kù)的API,你還需要理解多線程的細(xì)節(jié)。這些多線程庫(kù)雖然好用,但如果你不理解多線程的基礎(chǔ)細(xì)節(jié),那么你的應(yīng)用程序出現(xiàn)多線程的問(wèn)題只是時(shí)間問(wèn)題。如果你想學(xué)習(xí)多線程,從這個(gè)視頻開(kāi)始,視頻中講解了所有Android開(kāi)發(fā)人員都需要知道的基本概念與原理。自動(dòng)化測(cè)試據(jù)我所知,很多Android項(xiàng)目,都沒(méi)有使用任何的自動(dòng)化測(cè)試。在使用自動(dòng)化測(cè)試的項(xiàng)目中,大多數(shù)也是QA人員使用Appium之類的工具來(lái)完成的。這是整個(gè)Android行業(yè)的現(xiàn)狀,非常可悲。之所以沒(méi)有自動(dòng)化測(cè)試,這個(gè)問(wèn)題可以追溯到Android起源,Google也在很長(zhǎng)一段時(shí)間里,沒(méi)有關(guān)注過(guò)第三方應(yīng)用的自動(dòng)化測(cè)試。現(xiàn)如今,有單元測(cè)試和UI自動(dòng)化測(cè)試經(jīng)驗(yàn)的開(kāi)發(fā)者需求量很大。即使你到一家沒(méi)有使用過(guò)任何自動(dòng)化測(cè)試的公司去面試,如果你說(shuō)你會(huì)自動(dòng)化測(cè)試,就會(huì)給你的面試加分。反之,如果你去的是一個(gè)廣泛使用自動(dòng)化測(cè)試的公司,你沒(méi)有自動(dòng)化測(cè)試的技能,這會(huì)給你面試減分,處于劣勢(shì)。因此,我建議每一個(gè)Android開(kāi)發(fā)者都去學(xué)習(xí)一下自動(dòng)化測(cè)試的相關(guān)知識(shí)。就個(gè)人而言,我更喜歡單元測(cè)試。而一些開(kāi)發(fā)者喜歡UI自動(dòng)化測(cè)試。所以,可以選擇一個(gè)你更感興趣的技術(shù),嘗試一下。如果你對(duì)Android已經(jīng)有了非常豐富的開(kāi)發(fā)經(jīng)驗(yàn),那么,是時(shí)候?qū)W習(xí)一些“元”技能了,并且在特定領(lǐng)域進(jìn)行深度研究。在我看來(lái),以下技能對(duì)專業(yè)的開(kāi)發(fā)人員來(lái)說(shuō),都是非常不錯(cuò)的方向。技術(shù)方案評(píng)估如果你還沒(méi)有做過(guò)這件事情,那么現(xiàn)在是時(shí)候開(kāi)始做了。每一個(gè)重要的技術(shù)決定,都需要進(jìn)行評(píng)估、權(quán)衡。有時(shí)候,這種決定帶來(lái)的結(jié)果非常好,立竿見(jiàn)影。但是大多數(shù)時(shí)候,并非總是能夠立竿見(jiàn)影,看到效果。通常情況下,需要決策的范圍越大,所涉及到的評(píng)估范圍就越大,除了可以簡(jiǎn)單進(jìn)行決策的事情,還有很多可評(píng)估項(xiàng)都是非常抽象,短時(shí)間內(nèi)根本看不到結(jié)果的。在自己豐富的經(jīng)驗(yàn)水平下,面對(duì)眾多選擇,你至少應(yīng)該知道如何找到取舍。如果你能對(duì)技術(shù)方案評(píng)估提供有用的建議,你就非常優(yōu)秀了。技術(shù)方案評(píng)估權(quán)衡這是一項(xiàng)非常復(fù)雜的技能。通常,在與其它開(kāi)發(fā)者、項(xiàng)目經(jīng)理甚至是其它部門員工討論的時(shí)候,你能找到折中方案,就能進(jìn)行方案評(píng)估。因此,在大數(shù)情況下,你只需要掌握評(píng)估方案的能力就夠了。那我們所說(shuō)的“技術(shù)方案的評(píng)估”到底是什么意思?說(shuō)實(shí)話,很難具體說(shuō)明它是什么。不過(guò),我們可以提供一些反例,來(lái)解釋為什么不適合在開(kāi)發(fā)中使用。舉個(gè)例子:我們應(yīng)該將多線程的使用遷移到RxJava,而不是AsyncTask,因?yàn)锳syncTask會(huì)導(dǎo)致內(nèi)存泄漏。正如我前面所說(shuō),AsyncTask并不會(huì)導(dǎo)致內(nèi)存泄漏。所以上面這句話是錯(cuò)誤的。說(shuō)這句話的開(kāi)發(fā)者并沒(méi)有深入的研究多線程。此外,他也沒(méi)有提到RxJava的問(wèn)題。對(duì)于一個(gè)項(xiàng)目中的開(kāi)發(fā)人員來(lái)說(shuō),RxJava存在一個(gè)很陡峭的學(xué)習(xí)曲線。我們應(yīng)該為我們的新代碼寫單元測(cè)試,并且設(shè)定一個(gè)長(zhǎng)期的目標(biāo),覆蓋所有的代碼,以確保我們的代碼質(zhì)量。這句話包含幾個(gè)前提,首先,我們現(xiàn)在開(kāi)始單元測(cè)試是不可能的,至少需要開(kāi)發(fā)人員投入時(shí)間來(lái)學(xué)習(xí)這種技術(shù)。編寫單元測(cè)試是一個(gè)很明智的決定。我們不能為所有代碼編寫單元測(cè)試,因?yàn)橛幸恍┎糠质遣环€(wěn)定的。最后,達(dá)到特定的覆蓋目標(biāo)并不會(huì)自動(dòng)提高“質(zhì)量“。在這個(gè)例子中,開(kāi)發(fā)者并不了解單元測(cè)試,他們無(wú)法確定在項(xiàng)目中使用單元測(cè)試所涉及的問(wèn)題和影響。我希望,你對(duì)“技術(shù)方案評(píng)估”已經(jīng)有了大致的想法,如果你有一個(gè)重要的決定,你需要完成所有必要的調(diào)研,如果你依然看不到整個(gè)評(píng)估中存在的復(fù)雜網(wǎng)絡(luò),那可能是你的調(diào)研沒(méi)有做好。在做決定的時(shí)候,有些事情可能超出技術(shù)范圍,你也需要考慮你的決策對(duì)其它部門同事的影響。專業(yè)領(lǐng)域如何區(qū)分一個(gè)技術(shù)專家和一個(gè)普通開(kāi)發(fā)者?是我們熟悉的概念的數(shù)量嗎?我認(rèn)為,在技術(shù)方面,區(qū)分是否是專家主要在于知識(shí)上的深度。作為一個(gè)技術(shù)專家,你應(yīng)該有一個(gè)或者多個(gè)專業(yè)領(lǐng)域。你知道這些領(lǐng)域的詳細(xì)細(xì)節(jié),比一般的開(kāi)發(fā)者知道的要多得多。你需要持續(xù)深入的研究,來(lái)保證你的專業(yè)深度,了解專業(yè)領(lǐng)域的最新發(fā)展,不會(huì)對(duì)新的工具和技術(shù)感到驚訝。此外,即使你并沒(méi)有在任何項(xiàng)目中使用某些技術(shù),你也需要研究這些技術(shù)使用上相關(guān)聯(lián)的各種成本?,F(xiàn)如今,有一個(gè)自己的專業(yè)領(lǐng)域很難。這不是從博客中挑選幾篇好文章進(jìn)行閱讀就可以的,也不是讀完幾本好書(shū)、上完幾門好課就可以的。當(dāng)然,通過(guò)這些內(nèi)容進(jìn)行學(xué)習(xí),對(duì)你的專家之路都是有幫助的,但是要有自己的專業(yè)領(lǐng)域,唯一的方法就是積極參與其中進(jìn)行學(xué)習(xí)研究并獲得大量經(jīng)驗(yàn)。我很喜歡物理學(xué)家尼爾斯·玻爾說(shuō)的這句話:Anexpertisamanwhohasmadeallthemistakeswhichcanbemade,inanarrowfield.(專家就是把領(lǐng)域內(nèi)所有該犯的錯(cuò)都犯完的人。)我們可以在哪些領(lǐng)域進(jìn)行深入研究呢?實(shí)際上,幾乎所有的都可以進(jìn)行深入的研究,在軟件開(kāi)發(fā)領(lǐng)域,沒(méi)有任何一個(gè)領(lǐng)域會(huì)因?yàn)樘《荒茉O(shè)置成專業(yè)目標(biāo)。對(duì)此,我也有一些建議:UI構(gòu)建系統(tǒng)離線工作并發(fā)NDK持續(xù)集成性能架構(gòu)監(jiān)測(cè)項(xiàng)目管理專業(yè)知識(shí)領(lǐng)域還有很多很多。需要注意的是,上面我列出來(lái)的內(nèi)容,一些并不屬于嚴(yán)格的技術(shù)領(lǐng)域。只要你能為你的雇主產(chǎn)生價(jià)值,你可以選擇你喜歡的任何領(lǐng)域并進(jìn)行深入研究。我認(rèn)為,一個(gè)Android技術(shù)專家,至少有2~3個(gè)專業(yè)領(lǐng)域,例如,我的專業(yè)領(lǐng)域是:架構(gòu)、單元測(cè)試、并發(fā)、依賴注入。我相信,在不久的將來(lái),我能夠?qū)ⅰ爸貥?gòu)祖?zhèn)鞔a”添加我的專業(yè)技能列表里面。所以,如果你有4年以上的經(jīng)驗(yàn),你的專業(yè)領(lǐng)域是什么?以上,這是我建議你,作為一個(gè)專業(yè)的Android開(kāi)發(fā)者應(yīng)該具備的技能。你可能已經(jīng)發(fā)現(xiàn),我的文章標(biāo)題是《AndroidDeveloperSkillsfor2020(2020年,Android開(kāi)發(fā)者需要的技能)》,但是這篇文章中沒(méi)有什么內(nèi)容是特定于2020年的。我可以在一兩年前寫這篇文章,因?yàn)楸疚膬?nèi)容適合所有時(shí)間,基礎(chǔ)和重要的概念不會(huì)經(jīng)常改變?,F(xiàn)在,如果你對(duì)Android生態(tài)系統(tǒng)的最新發(fā)展感到好奇,你可以閱讀我的另一篇文章,我總結(jié)了2019年底Android發(fā)展的狀況。最后,我再重復(fù)一次,如果你想成為一個(gè)優(yōu)秀的Android開(kāi)發(fā)人員,請(qǐng)集中精力,對(duì)基礎(chǔ)和重要的事情做深度研究。一如既往,感謝你的閱讀。你可以在下面留言評(píng)論和提問(wèn)。結(jié)尾最后在下想說(shuō):不論以后選擇什么方向發(fā)展,目前重要的是把Android方面的技術(shù)學(xué)好,畢竟其實(shí)對(duì)于程序員來(lái)說(shuō),要學(xué)習(xí)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論