Android:開發初期水平停滯後怎麼提升?切忌雜學亂學,無效的學習路線學習十年也沒用

南方吳彥祖_藍斯發表於2021-06-22

背景

作為一個資歷不淺的Android開發,這幾年我面試過不少人。發現大多數面試者,雖然看起來工作努力,但他們表現出來的能力水平,卻不足以透過面試,或拿不到期望的薪資。

在我看來,造成這種情況的原因,主要有這麼兩方面:

第一, “知其然不知其所以然”。做了幾年技術,開發了一些業務應用,但沒有思考過這些技術選擇背後的邏輯。所以,我很難定位他們日後的成長潛力,也不會放心把有一定深度的任務交給他們。

第二, 知識碎片化,不成系統。事實上,當面試者無法完整、清晰地描述自己所開發的系統或使用的相關技術時,面試官就會懷疑他是否具備解決複雜問題、設計複雜系統的能力。

所以,如果你平時只知道埋頭苦幹,或過於死磕某個實現細節,沒有抬頭審視過這些技術,那麼在準備面試時,很有必要好好梳理一下 Android 知識體系,這樣才能拿下滿意的 Offer。

那麼,作為Android 開發者,該怎樣規劃自己的學習路線,然後一步一個腳印的向中高階進階呢?本篇文章根據自己的一些見解梳理一下。

Android開發初期之後怎麼提升?怎麼才能叫精通?方向在哪?

我發現好多人始終停留在兩三年的水平上沒有突破。

那麼為什麼很多人會一直停留在兩三年的水平上,而後一直在重複以往的經驗?

我認為最主要的一點就是主觀能動性,或者說興趣,如果你對Android開發沒有太大的興趣,那麼還是儘早換方向吧。有了興趣,然後就是要有一個比較正確的鑽研路線,不要這也搞那也抓,最後什麼都沒精通又好像什麼知道。

我覺得一個比較好的路線是,把日常開發常用的各種系統庫,開源庫,程式碼好好研究一遍,比如我用了butternife就要了解背後的apt,以及apt衍生出來的一系列庫比如Hugo。當然這大部分情況是初級進階的第一步。 這個階段應該是儘量很好的用技術完成業務需求。

第二個階段,我覺得可以嘗試去了解Android Framework比較細節的一些東西,比如activity啟動流程,順便分析清除Activity stack的管理,比如瞭解Android的資源載入機制,順便了解aapt是如何打包Android資源的;又比如Java的類載入機制,這裡配合資源的載入機制,很自然的就可以去了解Android的hotpatch機制,外掛化的實現,開一些這方便的開源庫或者自己擼一個也就自然而然。

第三個階段,橫向擴充套件,到這個階段並不是說比第二個階段更加高階了,而是對第二個階段的一些補充,比如你是不是可以瞭解一下web開發,這樣做hybrid開發的時候就會更順手。是不是要了解一下這麼火爆的ReactNative&Weex技術,甚至可以把他們的一些思想拿過來自己用,比如我司內部就有很多專案是用了JSCore和CssLayout來實現一些更輕量的動態化技術的。正如科學領域很多重大貢獻都是在交叉學科領域出現的。技術上到了這個階段甚至可以做到技術影響業務,技術驅動業務。

不要學得太雜太亂!學習Android開發只要記住這幾點!

我也已經做了好幾年開發了,還記得剛出來工作的時候覺得自己很牛逼,現在回想起來也蠻好笑的。懂的越多的時候你才會發現懂的越少。因為如果你的知識是一個圓,當你的圓越大時,圓外面的世界也就越大。

最近看到很多Android新手問Android學習路線,學習方法啊,如何入門啊,所以我以我的工作經驗給大家總結一下,讓大家少走彎路,提取一些工作中經常用到的技術。當然,說一千道一萬,最重要的還是學以致用,把學過的知識融會貫通。

如何知道我需要學什麼

相信大家在覺得迷茫的時候,經常會選擇自暴自棄、或者完全按照自己的喜好去學習,這是有利有弊的,總體來說弊大於利。我一直認同一個觀點,就是“你的認知比你的知識更加重要”,換句話說,也就是“ 你知道你需要去學什麼,比你所學的知識更加重要”,如何知道自己缺乏什麼,應該去學習哪些技能, 這才是從思維上、思想上改變你對學習的態度!

如何知道自己應該具備哪些技能呢?或者說,我自己還缺乏哪些技能呢?

這個問題一直是困擾著很多人,解答這個問題其實很簡單,這個問題的回答,往往離不開行業的最新動態:從下面培訓機構的培訓清單、招聘資訊的招聘要求就可以看出來。下面先介紹如何從培訓機構的培訓清單開出行業的動態。

培訓機構一直是網際網路行業的風向標,培訓機構的嗅覺是十分敏銳的,他們必須關注行業的最新技術方向、最新技術。所以,在一定程度上面,雖然我們大多數人都挺牴觸培訓機構,但是培訓機構的培訓清單可以作為我們 學習的風向標、學習清單

例子1:(介紹一下往高階Android開發工程師進階需要具備的哪些知識)

  • 架構師築基必備技能: 深入Java泛型+註解深入淺出+併發程式設計+資料傳輸與序列化+Java虛擬機器原理+反射與類載入+動態代理+高效IO
  • Android高階UI與FrameWork原始碼: 高階UI晉升+Framework核心解析+Android元件核心+資料持久化
  • 360°全方面效能調優: 設計思想與程式碼質量最佳化+程式效能最佳化+開發效率最佳化
  • 解讀開源框架設計思想: 熱修復設計+外掛化框架解讀+元件化框架設計+圖片載入框架+網路訪問框架設計+RXJava響應式程式設計框架設計+IOC架構設計+Android架構元件Jetpack
  • NDK模組開發: NDK基礎知識體系+底層圖片處理+音影片開發
  • 微信小程式: 小程式介紹+UI開發+API操作+微信對接
  • Hybrid 開發與Flutter: Html5專案實戰+Flutter進階

其實這個培訓清單我個人覺得是目前來說總結得比較好的Android進階資料。基本涵蓋了各種企業開發必備的新技術:RN、非同步操作RXJava庫、熱修復、外掛化、設計模式、效能最佳化等知識。這些其實都是我們學習的方向標,按照這些清單,自己去找各種資料學習。

其實對於Android基礎的話,不外乎四大元件的基本使用、UI控制元件、佈局的使用、版本控制工具、NDK基礎等等。

當然隨著Android技術的日新月異,Android開發對開發人員的基礎知識的要求就更上一層樓了,比如說:動態許可權管理、Kotlin基礎、Gradle基礎、AndroidStudio基本使用等等。

例子2:(從招聘資訊上了解目前網際網路大廠需要學習的一些熱門技術)

我一直都強調要多看招聘資訊,雖然我們不一定要找工作,但是按照企業的招聘要求,一定程度上也可以知道我們需要什麼,並且同時可以知道,越高階的Android開發有什麼更高的要求。

我們常見的招聘網站有: 智聯招聘、拉勾網、boss直聘等,這裡大家手機上安裝一個對應的APP,吃飯或者上班路上沒事可以翻一翻。那麼如何透過招聘資訊獲取我們需要什麼呢?那麼就需要我們仔細分析下面幾份招聘資訊。

大家第一時間關注的肯定是薪水問題,20K到50K,可以看到,這是一份相對來說比較高階Android開發工程師的招聘資訊,根據上面的要求,其實我們可以知道更多。

一般人可能會覺得這是一份很普通的招聘要求,但是在我的角度來看,可以看出很多有用的資訊,下面我帶著大家來分析解讀一下這份招聘要求吧。

1. Android底層的機制的熟悉,關於這個問題,其實在這裡我並不想談論太多,因為本系列文章的後續我會專門有一篇文章講這個怎麼去學習。一句話總結就是,熟悉Android底層機制,或者說Android原始碼,對上層應用的程式設計開發是有很多好處的,例如寫出高可複用性、高效率、高質量的程式碼。其中,面試常問的原始碼分析有訊息機制、四大元件、程式間通訊、WMS、PMS等等。

2. 各種架構設計能力,這就需要大家多去學習設計模式、各種軟體架構、設計思想上的東西,例如MVC、MVP、MVVM、重構、程式碼規範等等。

3. 在一般的網際網路公司,網路通訊是最重要的,因此我們就有必要掌握基本的Socket程式設計、各種網路請求框架,比如Retrofit2等等,進階的話,就需要自己去研究分析這些框架的原始碼、自己動手用元件化的思想去封裝這些框架,防止程式碼的侵入性等等。

4. 新技術的調研與學習,企業需要的是在儘量少的時間,開發出最優秀的產品,因此新技術是必不可少的。因此我們也需要保持不斷學習充實自己的習慣。這裡提到“研究新技術”,既然是研究,那麼公司為了減少大家的學習成本,肯定是需要你將研究的成功透過文件的形式輸出,以方便其他員工的快速上手,因此這裡隱含了文件的輸出能力。

5. 經驗,關於這個也沒有什麼好說的,很多東西,如果你遇到過就有經驗了,處理起來就比較快了。但是有一些難題你從來沒有遇到過,那麼難度就是無限大的, 經驗需要一點一滴地積累,多向大牛取經往往是實現彎道超車的最好辦法

6. 成熟專案的工作經驗,這是作為應聘者一個最有閃光點的地方,也是在校生校招的一個最有說服力的點。當然,除了在公司工作,也推薦大家去一些培訓網站上面學習一些專案的實戰影片教程,這也是一種快速學習的方法,但是學習完一定要加以總結,最好以文件、部落格的方式進行輸出,並保持分享,互相交流才能知道自己的錯誤、不足,才能獲取更多技術,進步更加快。

7. 效能最佳化,這是面試常見的問題。效能最佳化跟一個APP的使用者體驗息息相關,很多公司都十分重視這方面的知識。

為什麼高階程式設計師不必擔心自己的技術過時?

程式設計師是吃青春飯的嗎?等我們老了,技術過時了,公司有什麼理由不裁掉我們,去僱一些既有活力、薪資要求又低的年輕人呢?這個老生常談的問題困擾著諸多漸入中年的程式設計師。接下來講解教你如何增強自己的核心競爭力,在知識飛速更新的行業中站穩腳跟,跨過“初級工程師”和“高階工程師”之間的鴻溝。

我認為開發者中有很多我們不太重視的軟技能,這些軟技能都有可能成倍地增加我們工作的影響力(作為個人貢獻者和技術負責人)。這些軟技能包括:

  • 程式碼審查禮節;
  • 如何優雅地遏制範圍蔓延;
  • 如何向其他部門直觀的方式解釋高科技問題;
  • 如何在生產任務爆滿和日以繼夜的比賽中保持鎮定自若等。

作為一名程式設計師 ,編碼硬實力固然很重要,但是這些軟技能也同樣重要,這決定著你的核心競爭力的強弱。

高階開發者,會在工作中解決問題,而非製造問題。

他們減少壓力。他們按時完成任務。他們知道如何編寫經得起時間考驗、可維護的程式碼。他們值得更高的工資。他們對專案的方向可以有準確的把控。他們可以發現當前流程中的缺陷,並使每個人都接受他們的想法以進行改進。他們可以指導應屆畢業生。他們處事冷靜,不會在週二與你的最大客戶的電話會議上情緒崩潰、破口大罵。

Android學習的方向

學習一線大廠的各項技術:

大廠是我們的技術先驅,不僅僅是各種技術,還有很多令你大開眼界的使用方法,學習這些有利於自己競爭力的提高,深入理解後也可以提升你的學習效率。

現在競爭這麼激烈,只有透過不斷學習,提高自己,才能保持競爭力。

1.2020大廠面試高頻知識點

  • 圖片
  • 網路和安全機制
  • 資料庫
  • 外掛化、模組化、元件化、熱修復、增量更新、Gradle
  • 架構設計和設計模式
  • 效能最佳化
  • Android Framework
  • Android優秀三方庫原始碼

2.Jetpack架構元件從入門到精通

  • Android Jetpack - Navigation
  • Android Jetpack - Data Binding
  • Android Jetpack - ViewModel & LiveData
  • Android Jetpack - Room
  • Android Jetpack - Paging
  • Android Jetpack - WorkManger
  • Android Jetpack架構元件之Lifecycle
  • Android Jetpack Compose 最全上手指南

3.Framework精編核心解析

主要內容包含:

  • 深入解析Binder
  • 深入解析Handler
  • Dalvik VM 程式系統
  • 深入解析 WMS
  • PackagerManagerService

4.Kotlin強化實戰(附Demo)

  • 第一章 Kotlin入門教程
  • 第二章 Kotlin 實戰避坑指南
  • 第三章 專案實戰《Kotlin Jetpack 實戰》
    • 從一個膜拜大神的 Demo 開始
    • Kotlin 寫 Gradle 指令碼是一種什麼體驗?
    • Kotlin 程式設計的三重境界
    • Kotlin 高階函式
    • Kotlin 泛型
    • Kotlin 擴充套件
    • Kotlin 委託
    • 協程“不為人知”的除錯技巧
    • 圖解協程:suspend

5.Android設計思想解讀開源框架

  • 熱修復
  • 外掛化
  • 元件化框架設計
  • 圖片載入框架
  • 網路請求框架
  • RXJava 響應式程式設計框架設計
  • IOC 架構設計
  • Android架構元件Jetpack

6.NDK模組開發

  • NDK 模組開發
  • JNI 模組
  • Native 開發工具
  • Linux 程式設計
  • 底層圖片處理
  • 音影片開發
  • 機器學習

定期面試:

光學習了大廠的技術還不夠,如何瞭解當下Android市場需要哪些技術呢?

定期的面試足以讓你瞭解當下市場需要哪些技術,也更加容易確定自身的短板在哪,同時,也可以督促自己學習提升(小夥子,你瞭解的技術有點落伍了呀…)

萬一拿到了高薪Offer,豈不是更賺?

多看大佬的學習筆記,學習大佬的設計思想:

只要是程式設計師,不管是Java還是Android,如果不去閱讀原始碼,只看API文件,那就只是停留於皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的。

真正最能鍛鍊能力的便是直接去閱讀原始碼,不僅限於閱讀各大系統原始碼,還包括各種優秀的開源庫。

以上這些內容均免費分享給大家,需要完整版的朋友, 。或者點選 【 】 檢視獲取方式。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69983917/viewspace-2777882/,如需轉載,請註明出處,否則將追究法律責任。

相關文章