一個資深的Android開發者需要掌握哪些技能?


感覺很多人對一個資深工程師的作用和理解,太狹隘了。 但以下也只是個人的觀點,如果有興趣就繼續看吧。

首先下一個定義,什麼樣的人可以算是資深工程師?如果拿國內互聯網行業相對較為通用的標準,我認為至少應該是百度T7,阿里P8這樣的職級,可能是技術Leader,也可能是團隊中最核心的技術骨幹。團隊對這樣一位工程師的要求,肯定不只是精通技術和經驗豐富這麼簡單。編碼和解BUG當然是其中非常重要的部分,但除此之外我認為,其具備的技能至少應該包括以下幾點:

  1. 關於團隊:對內建設研發梯隊,提升團隊內聚力和執行力,注重個人的成長,快速提升團隊的戰鬥力,成員的技術和業務能力;對外向部門、公司爭取更多的資源,使得項目和組內成員獲得更好的成長和發展。
  2. 關於技術:領導項目優化,架構變更,核心模塊的修改,評估風險,帶領團隊完成技術上的攻堅;放眼業界,不斷引入新技術,對標競品,保持在技術上的領先,做出更為優秀的產品。

在Android方面,資深的開發者作用也是類似的。總而言之,資深的工程師作用不僅在於他本人有多強,而是起到了以點帶面的效果,提高整個團隊的競爭力。

---------------------------分割線---------------------------

下面是我所在的Qzone終端團隊公眾號,主要分享Qzone終端團隊在Android、iOS、H5等平台的開發經驗、技術實踐以及一些圍繞技術研發的話題。近期開始推送文章,最初的文章由我們Android團隊提供,歡迎各位關注。

關於Qzone :

Qzone 是中國最大的社交網路,是騰訊集團的核心平台之一,目前Qzone的月活躍賬戶數達到6.68億,Qzone智能終端月活躍賬戶數達到5.68億。從2005~2015,Qzone見證了國內互聯網蓬勃發展的十年,這十年風雲變幻,但我們的業務卻不斷向前發展,也希望更多的朋友能夠加入我們,共同迎接互聯網和Qzone的下一個十年。


作為好的安卓開發,首先明確Android是前端,重點是UI,做出穩定的應用是關鍵,很多人對Android屬於一知半解的狀態,鼓勵去Stackoverflow之類的地方尋找問題的解決辦法,但務必了解內在的機理,達成對知識理解的體系,當你建立了一個體系,很多問題就不在複雜,軟體開發是precise engineering,不是憑運氣。

舉個例子,面試的時候,我喜歡挑戰面試者一些很離譜的題目,比如,在一個EditText裡面,你輸了一個字母「A」,這個A是經過了多少安卓特有的流程才能顯示到屏幕上的。 初看這是個無聊的問題,大家往往會覺得,這是理所當然的事情,其實不然,這個問題考查了你對view layout/measure的理解,對rendering的理解,對drawing的理解,如果面試者能答出來這個問題,那我一定不擔心你會寫出卡頓的安卓代碼。初學Android開發六個月的時候,我也答不出這個問題,但一年之後,漸漸養成了一個體系,充分貫通這些「不必要」的細節,我私以為這是個資深程序員必備的條件,什麼性能優化都是水到渠成的事情,至於其他的技術,比如video streaming,取決於你是想成為某個領域的專家,還是解決問題的能手,如果是後者,你需要良好的數據結構+演算法+讀代碼+讀文檔的能力,在短時間內了解優秀的解決辦法,然後加以利用,做軟體工程不是讀PhD,先把需求解決了,再看怎麼提高。

很多人推薦了各種書,對於Android開發,最好的資源莫過於Google的官方視頻,他們指引了正確的方向讓你深入了解Android的UI構建和運行機制。

見過許多寫了很多app,但是不明白其中要點的程序員,我只覺得失望並擔憂。

當然,既然要做前端UI,黑魔法少不了,學習日新月異的編程思想,Dagger/React等等,如果身在團隊中,建立良好的學習氛圍,鼓勵交流,同時在被產品經理和設計師折磨的時候,理解他們,幫助他們理解Android開發特點,以前公司都是iOS優先,但在工程師的極力爭取下,漸漸已經以市場為導向,Android在設計和需求上漸漸有了更多的話語權。

Android只是個解決問題的工具,你需要一個時刻準備用這個工具解決問題的知識體系,換了一個工具也是一樣的。

------

Garena 新加坡HQ 期待優秀軟體工程師的加入 :-) 有意請私信

關於Garena背景資料

http://www.forbes.com/sites/forbesasia/2015/06/23/game-for-garena-singapores-answer-to-tencent-and-alibaba/

新加坡優越的辦公環境

In photos: At Garena, sleep pods and massages ease late night raids

作為程序員,你不一定在乎有沒有吃的或者有沒有好椅子坐,但一定在乎有沒有一台好使的電腦,最近全隊升級開發機,是的,我們還招人


做android一年多,在學校接觸了幾年,下面隨便說說一些感想吧。

其實吧,編程這一行,無論你具體做什麼的,其實重要的還是那些基礎的東西。哪些基礎呢?

關於android的基礎,可以參考官網。以及那張結構圖。

關於java的基礎,這個,編程思想已經很夠了吧。

關於編程的基礎,其實這個是互通的。操作系統的重要性,改改像素改改UI那種工作肯定用不上,只是你看到系統裡面的代碼,其實處處都是操作系統上的東西。

有機會多讀讀其他方面的書吧。

比如代碼大全。

比如設計模式。這個很重要,經常用到。

比如Linux系統的API。

比如腳本語言,可以簡化很多工作。

與編程無關的方面,寫文檔?

很多人出書了,都是優秀文檔的積累吧。

寫郵件?這種事經常在配合中出現。

以下是胡侃。

據說最好會武術,這樣就不怕PM改需求了。

所以,會狡辯也不錯。

還有就是會頂住壓力。

記得鍛煉。

其實最後兩條最重要了。


把妹的技能


1.熟悉方方面面,內核到框架到應用都灰常精通

2.熟悉各種debug調試工具的使用,上到ddms下到DS-5 Trace32 crash

3.解決過各種疑難問題,並對這些問題都有清晰的思路

4.寫的一手帥的代碼。

這樣的大師我就看到過一兩個~~只能膜拜~


泡妹子


做了兩年開發,其實,最初就是自己想做一個應用來著,然後,才學的開發……因為沒錢,所以沒學蘋果。不過,想想,學java也挺好,優勢也不小。不過,不知道為什麼,很多程序員看不起java啊。

我主要是做前端,就是設計人員弄好,我們做出效果。老大經常拿著人家的app說,能不能做出這個效果……我們說,可以,然後,想辦法實現。其實,大部分就是利用系統控制項,一些效果需要自己自定義一下,自己寫什麼的。也可以去網上找一下,不過,找來的,也都需要改,能直接用的幾乎沒有,有時候,人家的源碼還有bug……

基本上都是隨著需求來吧,內核什麼的,當你越來越深入,老大要求的效果越來越複雜,bug什麼的,越來越不懂,自己去查資料什麼的,慢慢會了解一些,但這只是盲人摸象,只有接觸到一部分,想系統地了解,可以去看一些大神的博客,他們都出書的,其實,書的內容就是他們的博客。

開發得越多,越感覺,安卓跟網站差不多,我們開發的app,沒有聯網的時候,基本上沒法用。裡面也用webview來載入一些網頁,有時候,我感覺,那和網路請求,然後,解析數據,綁定到listview中,速度慢不了多少……網上,有很多跨平台開發的,很多都是native+h5,我就在考慮要不要開一下跨平台的。還有前幾天facebook開源的那個react native android,聽說跨平台效果很好,還沒有研究。發現,好多app都是用c或者c++混合的,使用一些組件產品,比如友盟,融雲什麼的,都是本地庫……遊戲什麼的,就不說了,2d幾乎是cocos2dx的天下了,所以,感覺安卓上,跟網站前端一樣了。

這是大致情況,基本上這下,就知道需要掌握什麼了。其實,安卓大神,就是java大神。需要掌握的,基本上也看公司的要求,也看產品的特點,安全性高的,核心代碼都用c或者c++寫了。github上,也有不少java大神寫的安卓庫,注入什麼的。所有,首先吧,計算機基本的一些知識得有,各種語言吧,其實,都是看需要來的,安卓,就把java掌握得好,也可以寫一些好的庫,放在maven,jcenter。這些都是應用層的,只適用於應用開發。rom定製,這個,需要去鑽研系統層,安卓系統,好多也是java調用的底層c,c++的方法,就是java native了。總之,安卓也分了好幾個方面,看你要當哪方面的大神了,想全能,那就都通吧。


10年後請 @我,如果我成為資深的了,就來回答。。


自問自答 。感謝博主的一遍文章,無法@你 見諒。

我對Android的理解


難道不是必須能打開https ://http://developers.android.com嗎?


樓上很多回答就跟皇帝家的鋤頭一定是金子做的這種想法一樣,資深工程師關注的更多是技術以外的東西


先說在Android系統中的發展方向(可參考Android系統的分層結構,自行腦補):

1.應用層:熟悉Android系統中的各種API,各種兼容性,各種坑,不同機型,不同系統版本;更深層次的要求:各種原理,說白了就是系統源碼中的各種Service,如PackangeManagerService、ActivityManagerService等。這個過程中免不了要涉及系統的底層部分,不想了解的可略過。

還有各種開源庫的使用,比如常見的網路、資料庫等。慶幸的是,android端並不會有很複雜的架構設計。

OK,這裡你還可以擴展到混合應用開發,原生應用開發+H5;(好吧,又是各種瀏覽器兼容,應用內置瀏覽器內核怎麼樣?)

OK,這裡你還可以擴展到遊戲開發,用OpenGL或一些遊戲引擎;

還有各種新技術的出現,要不停地跟蹤行業動態、最新技術。

當然還有圖像處理、OCR識別、語音識別,好吧,到學術界了,跑題了。如果你說網上都有一些開源的庫,可以直接拿過來用,那我就呵呵了。

從事這一層的必殺技:用戶體驗+技術。

2.linux內核:android底層驅動基於linux驅動增加了Binder跨進程通信,並增加了一些特性,或多或少涉及到彙編了吧。

3.中間層:這一層包括上面提到的各種Service在Java層以及C++層的實現等。

再來說「資深」:

在你擅長的領域造詣很深,最起碼得有七、八年工作經驗。只要五年?好吧,你牛!

如果「資深」,應該知道這個系統中這部分的原理是什麼?是怎麼實現的?為什麼這樣實現?有啥優勢?有沒有更優方案?

關於應用層發展方向,由於只對應用層比較熟悉,所以擴展比較多,下面總結一下:

1.簡單應用開發方向:用戶體驗為主,熟悉android系統原理;

2.專業APP開發方向:學術為主,比如OCR識別、美圖;

3.遊戲方向:OpenGL、cocos2d;

4.音視頻處理方向:ffmpeg;

5.瀏覽器內核開發:網路時代必備;

6.黑技術:android加殼、Hook技術;

7.應用性能分析優化:比如SQLite性能優化。

如果選擇某個方向,則深入了解原理實現,不僅僅是會用,為什麼這樣實現?有啥優勢?有沒有更優方案?

以上是個人總結,歡迎補充。

OK,碼字不易,希望樓主不是一個浮躁的人。


翻牆


能讓ADB不會隨隨便便斷開……


公司的設計只設計ios,生生把android做成ios(+﹏+)~,但是但是我們的安卓動畫就是比ios炫,還比ios流暢^_^


坐等回復


如果你說網上都有一些開源的庫,不直接拿過來用,那我就呵呵了。


首先檢驗自己的開發工具…


身邊一個DBA應該也算是資深了,感覺他對於官方知識的支持理解的非常的透徹。想成為資深,我們不妨先把google doc看完再說


坐等回復


雖然我還在學習中,但可以分享一下 我的認識:

1.計算機基礎的幾門課必須會,演算法,數據結構,計算機系統,網路,還有java。這裡當然不是看過書考過試,要深入理解。比如說java要多看幾遍 《think in java》等名著

2.Android,是Google改寫的虛擬機。但還是在linux,建議了解一下linux。還有framwork這個有必要知道 ,比如 activity的底層是怎麼回事,activitythrad 是啥和thread區別,這些都需要了解

3Android 基礎的都需要控制項組件都需要深入了解,也就是2說的framwork。還有要學會自定義view

4工具,Androidstudio 還有git是基礎,還有各種插件。

本人剛入門,求大神指點。


能不能再問下,Android大師應該是怎樣的


推薦閱讀:

一般軟體都是優先開發安卓和ios的,為什麼詞焙沒有安卓版?
Android 的 Daydream 功能和 Windows 的屏保有什麼不同?
Android程序員如何增加對技術的理解深度?
假設安卓下個版本不再開源?
Android Studio 怎麼樣?

TAG:Android開發 | Android |