前言
在知乎上看到一個問題,程序員如何提高自己,Android開發初期之後怎麼提升?怎麼才能叫精通?方向在哪?
很多程序員都有想過這個問題,這是一個“月經”問題。
有些人在思考,思考者然後沒有然後了
有些人根本不思考,得過且過
有些人,已經做出了改變,並仍堅持着很多愛程序員哪怕是工作在忙也會抽出來一些時間,來學習,來搞副業,來提升
比如我是這樣安排的:
早上上班到公司去看一些相關的技術帖子,中午把午休時間縮短半個小時,去逛逛知乎,晚上下班兩個小時去學習,1~2個小時寫文章。我個人算不上什麼優秀,但是可以作爲參考。
然後我們來對問題分解一下
Android 開發 :
分成
- "開發" 一般的開發技能
- "移動應用開發" 移動應用開發相關概念思想
- "Android 開發" 特指與 Android 開發直接相關知識技能
正如你可能所想的那樣,這樣的問題不像1 + 1等於2那樣,有一個簡單確切的答案。真正答案因人而異。
下面我以自己幾年的Android 開發經驗,與你分享一二。
就按我上面所分解的幾個方面來說一說:
一:開發技能
你可以看成是一般的編程技能,這方面你可以從:
編程語言的熟練掌握
面向過程編程思想
面向對象的思想
函數式編程思想
設計模式
算法與數據結構
網絡編程,TCP/IP 協議
重構
版本管理(Git 等)
等方面的檢查和提高自己,更詳細的技能樹,自己搜索
二:移動應用開發
你可以看成是 App 開發,估計這可能是你更感興趣的,這方面你可以從MVC 這成三個方面來對照檢查下:
M:數據層,移動應用數據結構特點
數據存儲:SQLite數據庫,文件存儲
數據格式:XML 格式,JSON格式 序列化與反序列化
數據查詢:移動應用一般數據庫主要是 用SQLite
(說回來,單是 SQLite 數據庫,就可以花不少時間來深入學習下,因爲對一個應用來說,數據基本是核心)
V:視圖層
移動應用界面特點
移動應用構建界面常用方法
移動應用交互特點
移動應用動畫
系統 UI 系統特點,優點,缺點及侷限
C:控制層
移動應用控制層特點
控制層的生命週期
多線程,UI 線程,後臺線程
再加一層:
E:事件層
事件處理,觸控事件,手勢,事件響應鏈
三:Android 開發
工具篇 - 工欲善其事,必先利其器
Android Studio 掌握用得怎麼樣了?
Adb 及相關工具會用嗎?
Gradle 構建系統呢?
文檔篇 - 看 Android 官方是怎麼定義開發各種技能的。
相信常看 Android 開發者官方網站,你會收益良多,我下面寫的也不必看了。
系統篇
Android 多線程編程,異步編程特點 - Loop,Handler,IntentService,Broadcast,MessageQueue
Android UI 框架特點,優勢和不足
然後你再按 MVC 將 Android 各部分再分析分析,總結總結。
那麼,我們平常如何提升自己呢?
第一點,根據自己的專業,無論是前端或這是後端,都可以相對應的去看一些視頻,因爲這是對某個方面知識快速瞭解的好辦法,相比書籍和文檔,視頻要更精彩一些,而且花費的時間相對比較少,讓大家的注意力更集中一些。國外的或者國內的都有,不想花錢可以去b站或者YouTube上看,很多質量也是比較高的。
第二點,可以綜合的去了解一下其他語言,Android工程師不能光只會Android,可以去了解c++,kotlin方向的一些知識,有時候也不能盲目的去追求,哪個比較火學習哪個,這是隨波逐流的做法,根據實際情況,最好是在公司能學以致用。
第三點, 多做項目,多去練習。敢於嘗試自己專業的其他領域,熟能生巧,多嘗試幾種不同的編程語言,能給我們提供不同的編程思維視角,站在更高的維度看技術。如果在練習的途中,能夠舉一反三就闊以了。
第四點,多去分享和交流。一些中大型公司,部門內部都會有一個技術分享會,你可以對自己專長的方向研究一段時間以後,相關的技術演示給大家看。線上可以來直播或者把自己學到的東東錄製爲教程,或者參加一些技術等會線下論壇等。
分享是一個很好的實踐,同時也會剛你暴露出來一些不足之處,大家都知道。我們程序員不善言談,說話緊張,表達能力,或者邏輯思維能力都有待於提高,這些都是需要提高的地方。即使將來一天不做程序員了,彌補了這些不足之處也會是一筆巨大的財富。
做好規劃,每天進步一點點,一年下來,你可能就比別人進步了好多,不管別人怎麼想怎麼說,幹就是了。畢竟這個社會是現實的社會,很多人像我一樣家裏沒礦,這個時候只能靠實力說話了。
如何學習?
接下來來看看有一些進階學習的方向:
鑽研技術:
首先來看看 Android 有哪些方向,列舉幾個常見的:
- 應用層開發,日常業務開發,主要還是原生開發,就業方向基本飽和,大部分只招高級工程師;
- 遊戲開發,相比應用開發更喫香,有 Unity-3D 等遊戲引擎;
- 跨平臺,比如 Flutter、RN,從成本上考慮,跨平臺是個不錯的選擇,我們 Android 有必要密切關注下;
- 安全開發,一些對安全性很高,比如銀行項目,熟悉 Https、支付密碼安全、應用加固等;
- SDK 開發,將應用裏的部分功能獨立了出來,封裝成 SDK 提供給合作伙伴使用;
- 音視頻開發,比如音視頻直播/點播功能,則需要了解音視頻編解碼的傳輸協議,編解碼方式等;
- 圖形開發,比如美圖、天天P圖,對圖形處理要求十分高;
Framework 開發,手機廠商定製手機爲主,比如小米、魅族等; - 驅動開發,同上,更多是在和 Linux 打交道;
- 如果你對技術感興趣,想做到專家級別,可以在以上這些方面深究下去,總之,勞資有技術,不怕沒飯喫。
如果你不知道怎麼學習,我給大家提供一個方向,進行體系化的學習!
除了上面的學習路線,還給大家整理了一份Android進階學習資料,主要爲安卓相關知識點及面試資料爲主,在這個PDF中,通過詳解各大互聯網公司的 Android 常見面試題爲主線,從面試的角度帶你介紹必備知識點,以及該知識點在項目中的實際應用。
幫你在現在的基礎上,重新梳理和建立 Android 開發的知識體系。無論是你短期內想提升 Android 內功實力,突破自己工作中的能力瓶頸,還是準備參加 Android 面試,都會在這個PDF中有所收穫。一些基礎不好的,這裏也有一份安卓基礎資料包,幫助鞏固基礎。
以下是這份PDF主要內容:
- Android 核心技術:介紹 Android 開發中常用的核心技術,比如自定義 View、Handler,以及一些開源框架的原理實現,來夯實你的底層能力。只有底層能力足夠出色,之後的進階之路纔會更加輕鬆。
- 常見問題剖析:介紹一些項目中常見的疑難問題,使你能夠對現有項目做出合理的重構優化。
知識梳理完之後,就需要進行查漏補缺,所以針對這些知識點,我手頭上也準備了不少的電子書和筆記,這些筆記將各個知識點進行了完美的總結:
以上內容均放在了開源項目:【github】 中已收錄,大家可以自行獲取(或者關注主頁掃描加微信獲取)。
不用多說,相信大家都有一個共識:無論什麼行業,最牛逼的人肯定是站在金字塔端的人。所以,想做一個牛逼的程序員,那麼就要讓自己站的更高,成爲技術大牛並不是一朝一夕的事情,需要時間的沉澱和技術的積累。