一個Android資深工程師的自我提升

2021-02-23 IT168文庫

看到一篇文章中提到「最近幾年國內的初級Android程式設計師已經很多了,但是中高級的Android技術人才仍然稀缺「,這的確不假,從我在百度所進行的一些面試來看,找一個適合的高級Android工程師的確不容易,一般需要進行大量的面試才能挑選出一個比較滿意的。為什麼中高級Android程式設計師不多呢?這是一個問題,我不好回答,但是我想寫一篇文章來描述下Android的學習路線,期望可以幫助更多的Android程式設計師提升自己。由於我也是從一個菜鳥過來的,所以我會結合我的個人經歷以及我對Android學習過程的認識來寫這篇文章,這會讓這篇文章更加真實,而並非紙上談兵。

前面說到,我也是從一個Android菜鳥過來的。其實這句話放在任何人的身上都是適用的,即大家都是一步步過來的,因此作為初學者也不必因為技術差而鬱悶,同理,高手也不要看不起一些所謂的菜鳥,因為這不公平,技術只有在同等的工作年限上才具有一定的可比性,也許你眼中的菜鳥只是個工作半年的新手,而你已經工作5年,可想而知,這根本不具有可比性,搞不好別人5年後可以達到比你更高的技術高度。

我有若干個技術QQ群,群裡的小夥伴對我的工作經歷比較感興趣,剛好在這裡我就做下介紹。我是碩士研究生畢業,我已經工作3年零3個月了,職位上從最開始的騰訊初級工程師變成了現在的百度Android資深工程師。最開始我並不是做Android的,先是做了半年的C++,接著做了3個月的Web前端,然後公司內部轉崗做Android到至今,純Android工作年限的話其實是2.5年。但是我認為我的Android工作經驗(註:工作年限不等同於工作經驗)不止2.5年,我投入大量的業餘時間在Android開發上,並且我習慣去思考問題、總結問題並將其融會貫通,因此我的Android技術在短時間內有了很大的提升。

在Android學習過程中,初學者踩過的坑我也都踩過,我也深深地知道大家在學習過程中最棘手的問題是什麼。舉個例子,在3年前,我想在SlidingMenu中放入一個ListView,發現二者總是不能很好地一起工作,這肯定是由於滑動衝突的問題,我也知道,但是不知道怎麼解決。我就去學校圖書館翻遍了所有的Android書籍,無果。大家肯定都知道原因,為什麼我無法從書中查找到問題的答案,因為入門書不講滑動衝突,所謂的高級編程書也不講。還有一個問題,我曾經以為view.post(runnable)可以讓runnable的run方法在線程中執行,所以我就在run方法裡面去做耗時的操作,現在想想我當時是多菜啊,因此我曾經也是菜鳥。

直到若干年後的某一天,我終於琢磨透了滑動衝突的事,然後我就把解決問題的思想寫在了CSDN博客上,但是好像看得人並不多,很多人並不能體會我的用心,後來我博客的訪問量越來越大,這才慢慢地得到了一些人的關注。後來有一天我有了寫書的契機,我想到了我最開始學習Android時所踩過的坑,想到滑動衝突對我的困擾,為了更好地傳播我的技術經驗,為了讓更多的人少踩一些坑,為了讓更多地人成為Android高級工程師,我毅然決定將Android開發中最重要的、最疑難的、最容易困擾大家的、成為高級工程師所必備的知識點和盤託出,這就是《Android開發藝術探索》 存在的原因以及意義。書的反響怎麼樣呢?從目前讀者的評價來看,內容基本無差評,我收到了很多讀者的肯定以及感謝,這說明很多人能夠理解我的用心。

說了那麼多,言歸正傳,下面說下Android學習路線的話題,本文打算從4個階段來對Android的學習過程做一個全面的分析,分別為Android初級、中級、高級以及資深工程師,具體請看下面的分析。同理,本篇學習路線仍然只針對Android應用開發,不針對Rom開發和逆向工程等。這裡虛擬一位「小明」的角色,在這裡小明就是Android初學者的代表。

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

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

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

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

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

技術要求:

- 基本知識點

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

- 書籍推薦

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

小明經過一年的努力學習終於成為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群英傳》

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

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

- 繼續加深理解」稍微深入的知識點「中所定義的內容

- 了解系統核心機制:

1.了解SystemServer的啟動過程

2. 了解主線程的消息循環模型

3. 了解AMS和PMS的工作原理

4. 能夠回答問題」一個應用存在多少個Window?「

5. 了解四大組件的大概工作流程

6. …

- 基本知識點的細節

1. Activity的啟動模式以及異常情況下不同Activity的表現

2. Service的onBind和onReBind的關聯

3. onServiceDisconnected(ComponentName className)和binderDied()的區別

4. AsyncTask在不同版本上的表現細節

5. 線程池的細節和參數配置

6. …

- 熟悉設計模式,有架構意識

學習方法

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

技術要求:

- 稍微深入的知識點

- 系統核心機制

- 基本知識點的細節

- 設計模式和架構

- 書籍推薦

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

我還正處於這個階段,還在摸索中前進...

相關焦點

  • 中國資深工程師VS美國資深工程師,差距就在這八點
    下面以工程建設行業為例,我們將中國的資深工程師和美國資深工程師做一下對比:1、關於加班中國工程師:中國工程界不成文的規矩就是施工單位沒有休息日,夏頂烈日、冬迎霜雪、天天加班,日復一日,年復一年,毫無怨言。
  • Android 工程師級別劃分及學習路線
    這是一個問題,我不好回答,但是我想寫一篇文章來描述下Android的學習路線,期望可以幫助更多的Android程式設計師提升自己。由於我也是從一個菜鳥過來的,所以我會結合我的個人經歷以及我對Android學習過程的認識來寫這篇文章,這會讓這篇文章更加真實,而並非紙上談兵。我的工作經歷前面說到,我也是從一個Android菜鳥過來的。
  • android基礎入門
    Android工程師在這幾年都是非常搶手的,其實Android的學習卻並沒有我們想像中那麼難,我們通過幾天的學習就可以做出一個簡單的Android
  • 銳捷資深網絡工程師(RCNP v5.0)技術培訓
    作為銳捷網絡渠道工程師的重要準入認證之一,通過參加RCNP線下培訓,了解新版認證標準和內容,在現場和銳捷網絡工程師面對面交流,探討技術細節,快速提升學員業務水平以及專業教師的授課能力,快速通過認證考試。
  • 一個好的工程師抵300個普通工程師!
    你可能會常常聽到有的行業做了3.5 年變資深了成了主管, 因為他在工作上累積了夠多的經驗, 然而工程師卻不一定是這樣. 因為這個技術的東西變化實在太快, 別說3, 5 年了, 1, 2 年可能就把過去你熟悉的東西淘汰掉了, 你如果不學習新的事物, 那你就只能找到或停留在技術停滯的公司, 而不願意在開發單位上進步與投入成本的公司通常也拿不到什麼好薪資.
  • Android開發必備的「80」個開源庫
    Android Developerhttps://developer.android.google.cn/Android Training 中文版http://hukai.me/android-training-course-in-chinese/index.htmlMaterial Design 中文版http
  • Android黑科技走一個
    二、刪除第三方AAR多請求的權限<manifest xmlns:android="http://schemas.android.com/apk/res/android"          xmlns:tools="http://schemas.android.com/tools"          android:installLocation="auto"><uses-permission
  • 一些優秀的 Android 開發專欄推薦
    當一個已經入門的開發者,想要成為一個更好的 Android 開發者的時候,就會發現網際網路的資料太瑣碎,而且資料的好壞也難辨。常常都會困惑我要如何提高自己,哪裡有好的學習資料。 接下來我們就會推薦一些最值得訂閱的優秀專欄。
  • 打造一個高逼格的android開源項目——小白全攻略
    通常在項目的主頁面能看到項目的簡介和基本使用,並且時不時能看到頁面匯中有好多的彩色標籤,看起來很酷,很專業,很有逼格,能提升很多的好感度。前言        本文又是一篇很長的文章,如之前寫的某篇文章一樣,基本是一口氣連續兩三天的寫。寫啊寫啊寫,不知不覺就寫了好多,其實有很多是素材圖片,務必做到每個細節我都實踐一遍。
  • 裡奧實訓基地提升就業競爭力 增強應屆畢業生機電工程師就業機會
    根據企業業務量的變化,機電工程師工作定會出現時忙時閒。因初入行業領域,缺乏對機電行業的整體認識,以及對實踐工作的深入分析,總讓新人覺得無事可做,又無人教。裡奧實戰培訓基地以實踐教學為主,一線資深工程師親身教學,定向制定資深機電工程師培訓計劃,且入訓籤訂協議,保就業,保崗位,保薪資。2. 機電工程師,是在大城市更有發展,還是小城市?
  • Android 學習資料收集
    App 研發錄本書作者是包建強, 本書作者多年 App 開發的經驗總結, 從App架構的角度, 重點總結了 Android 應用開發中常見的實用技巧和疑難問題解決方法, 為打造高質量 App 提供有價值的實踐指導, 迅速提升應用開發能力和解決疑難問題的能力. 這本書非常有利於 Android 開發者進階.
  • 我感覺我學了一個假的Android...
    在平時的Android開發中,如果一個新手遇到一個這樣的錯:android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
  • Android上玩玩Hook:Cydia Substrate實戰
    作者簡介:周聖韜,百度高級Android開發工程師,博客地址:http://blog.csdn.net/yzzst了解Hook還沒有接觸過Hook技術讀者一定會對Hook一詞感覺到特別的陌生,Hook英文翻譯過來就是「鉤子」的意思,那我們在什麼時候使用這個「鉤子」呢?
  • 2018 之後,Android 工程師將何去何從?
    熱文導讀 | 點擊標題閱讀歡迎加入Java和Android架構知識星球阿里資深無線開發專家給程式設計師職業發展的幾點建議雖然移動開發這兩年已經接近飽和,但只要仔細觀察就不難發現,是初級工程師的門檻在變高,而各個大廠的高級/專家級工程師/架構師缺口仍然很大。Android 技術每年在變化,不知道學哪些技術?這個問題每個人的答案都不一樣,我在這裡從另外一個角度來說。首先問你們一個問題,為什麼想做 Android 移動開發?
  • Android自定義View入門及實戰案例分析
    【線下沙龍第六站】終於要去全世界最好的成都和你們見面了前言  上次我們講了一篇文章徹底搞懂Android事件分發機制,這次我們來看看自定義View控制項,在Android應用開發過程中,固定的一些控制項和屬性可能滿足不了開發的需求,所以在一些特殊情況下,我們需要自定義控制項與屬性,同樣,這也是面試中面試官問的機率比較高的問題,也是由初級工程師通向中高級工程師必備的
  • 打造一個高逼格的android開源項目 | 小白全攻略
    通常在項目的主頁面能看到項目的簡介和基本使用,並且時不時能看到頁面匯中有好多的彩色標籤,看起來很酷,很專業,很有逼格,能提升很多的好感度。本文又是一篇很長的文章,如之前寫的某篇文章一樣,基本是一口氣連續兩三天的寫。寫啊寫啊寫,不知不覺就寫了好多,其實有很多是素材圖片,務必做到每個細節我都實踐一遍。
  • 薦號 Android 相關的公號推薦
    Android 群英傳(id:android_heroes)作者大家應該不陌生,是俗稱醫生的徐宜生,書籍《Android 群英傳》作者,滬江資深 Android 工程師,此公號會分享一些 Android 相關的知識與技巧,感興趣的可以關注下。
  • 聚焦遷移學習反向傳播缺陷,百度資深工程師帶來全新 ICML 工作分享
    其中,預訓練模型作為當下遷移學習的一種主流方法,讓「從零開始訓練一個新模型」的時代一去不復返。這類在大型數據集上訓練好的模型進行微調後,便能夠較好地適配類似的新目標任務,可以極大地節約時間和成本。,提升低層次特徵的學習,從而顯著提升遷移學習的效果。
  • 工程師調查:工作環境變化,千禧一代與老工程師分別如何應對?
    IEEE GlobalSpec每年都會針對工程師的專業與工作環境進行調查,例如去年我們從調查數據看到了工程世代的知識與經驗傳承——《工程師調查:世代交替還是斷層?》
  • 臺積電100多名資深工程師被挖?!
    近日,網上有傳言:大陸有企業以2倍的薪水挖走臺積電資深工程師,它們分別是:中國大陸半導體兩家初創企業弘芯和泉芯。華為遭美國制裁後,國家的晶片行業的發展越來越看重,並出臺相關政策扶持本土晶片廠商的發展。不然怎麼會吸引臺積電的精英工程師?比如說,弘芯CEO蔣尚義,他的來頭可不小,曾在臺積電張忠謀治下任職。臺積電之所以能坐上晶圓代工的頭把交椅,蔣尚義的作用不可或缺。而他對大陸最大的貢獻是,在2016年,他加入中芯國際,並擔任執行董事,為中國的半導體行業立下汗馬功勞。我認為,這或許就是倪光南所說的對等制裁!