“這科技越來越發達,你就學電腦吧,你二姨兒子在縣城里就是自己開店子給人修電腦,能掙不少錢!”—— 父親大人 2009年7月
引子
最近一直在思考,作為一名軟體開發工程師,到底應該如何實作自我成長,是否有捷徑而言?其實斷斷續續有過很多思考,也有和各種年齡段的同學們做過不少交流,結合自身的經歷,有一些感悟和思考,本文可能可以適用到其他端,不過由于自己是一名 Android 開發工程師,所以就姑且從一名普通的 Android 開發工程師的角度來進行表述吧,
整篇文章可能讀下來會比較啰嗦和白話,但句句真言,字字真心,歡迎大家一起交流,整文也只代表個人觀點,同學們都可以發表自己的觀點即可,
先跟大家來總結下根據我自身的7年的開發經驗,所覺每一名軟體開發工程師都需要必經三個階段:
- 不知道自己不知道啥
- 知道自己不知道啥
- 不知道自己知道啥
看起來很繞,但實際上你品,你細品,你當下的階段正在經歷或是過去的已經經歷過,

一、迷茫:不知道自己不知道啥
對于大多數剛剛接觸到 Android 開發的學生來說,軟體開發是一片浩瀚的海洋,這是一片全新的領域,有著自己的生態圈,所以初入開發行業的學生們,完全不知道自己還有哪些是需要學習的,所以這些同學通常會陷入一個非常迷茫的階段,尤其是在校學生,
自己當初也是如此,天真的以為計算機專業就是開發游戲,倒騰電腦的專業,所以自己就成了計算機學院的一員,上大學后,才發現和自己想象的完全不一樣,依然要學習好多的數學專業課和語言專業課,只是這個語言不再局限于英語了,而是一些從未聽過的 C/C++、C#、Java、Python,
在學校的時候完全不知道自己應該學習什么,只能按照教學的安排一節課一節課的學習和實踐,學校老師布置的任務也一如既往的簡單,然而大家一片茫然,依然有很多的同學完全學不明白,埋頭努力卻得不到結果的感受,讓一些同學越來越厭倦去上課,越來越厭倦考試,尤其是遇到編程操作性科目,更是大腦一片空白,
大學階段學生們的普遍情況是,不知道社會需要怎樣的人才,需要具體哪些技能或是掌握到什么樣的程度,才能做一名合格的軟體開發工程師,在懵懵懂懂中就畢業了,
一部分在校學習刻苦,比較有遠見的同學在即將畢業的一年抓住了公司的實習機會,這時候他們先人一步接觸到了商業專案,會發現公司的軟體開發又是另一番景象,也許在學校學習的 Java 和 Python,但在公司卻要承擔起一名 iOS 開發的角色,于是在這里開始了他們的二輪學習,

因為身邊有一群有經驗的導師,這時候學習起來比學校輕松了很多,但依然是大多數時候不知道應該學習什么,對于自己而言,哪些是需要現在學習的,哪些是未來應該學習的,
如果這些同學足夠幸運,遇到一個優秀的 mentor,可能會輕松許多,應該 mentor 會授人以漁,在給你安排作業的同時,還會教給你做自己的職業規劃的方法論,有了一個詳細的學習規劃,會輕松很多,自己的學習還有 mentor 的定期 review 和反饋,這時候成長起來更快,這也是為什么我建議職業生涯初期的學生擠破頭皮也應該進入大廠的原因,
大廠通常都有足夠完善的新人成長機制,而且身邊的同學都是足夠自驅和優秀的,在這樣的環境氛圍中成長,真的是如同腳踏白云,一飛沖天,通常而言,職業生涯的前兩年也會一直有這樣的狀況,不清楚自己到底還有哪些知識需要學習,在完成了交代的開發任務后,就會陷入一個懷疑人生的階段,不知如何提升自己的能力,
這時候大多數同學就只能被動的靠趟坑來慢慢提升自己的實力,趟一個坑就漲一次記性,有的坑記憶不夠深刻,得趟個2、3次才夠,但這些同學會發現,職業生涯成長非常緩慢,如果不幸,可能 10 年的開發經驗,不過是一年的經驗重復使用了 10 年而已,
我所認為的原因
在這個階段的同學如果看的自媒體文章比較多,可能會陷入一個恐慌的階段,因為制造焦慮的文章實在是太吸引眼球了,它們是心靈雞湯,不斷地博取你的共鳴,從而消耗你的信心,
這時候,對自己“要求比較高”的同學就開始不斷學習,卻沒有任何規劃,
他們可能會選擇看很多博客,給自己收藏很多標簽,看到優秀的博主就趕忙關注,不關心博客的每一篇文章的質量,而盲目地迷信權威,反正別人說的,就一定是對的,很少有自己的思考,所以只要文章涉及范圍越廣,就越容易得到別人的認可,GitHub 上的 Star 也從來不會吝嗇,而我就是這樣一個博主,早些年靠文章的數量取到了數百萬的閱讀量,在 GitHub 上也有了 12k 的 Stars,
但我之前寫的大多數文章,都是毫無知識涵養的,所以,我一度斷更了很久,雖然當初我每一篇文章都有很認真的寫,
除了博客學習,一些同學還會選擇一些在線教學視頻網站,比如 mooc 網,網易云課堂,騰訊課堂,扣丁課堂等,這些網站上通常都有成套的語言教學,老實說,這上面的部分課程質量確實比學校教學的更加全面一些,但“高昂”的價格,讓大部分同學還是選擇了放棄了這一“捷徑”,
所以一部分同學把希望寄托給了書籍,
**讀書是一個好習慣,書籍也是一個好東西,**很多專業性的書籍,都寫的非常好,也非常全面,因為是文字性的描述,所以相對于視頻學習起來時間成本更低,但書籍的內容質量也是良莠不齊,除去其他同學的推薦,自己很難真正感悟到書籍的內容對自己的幫助,這時候建議你就需要看一下《如何閱讀一本書》,提升自己的讀書效率,但又發現,讀書真的很難堅持,
大多數人把上面這種方式歸咎為沒有學習氛圍,無法驅使自己認真學習,加上沒有健全的交流群,沒人給自己解惑,有些書籍偏向于基礎知識的講解,根本學不到真正的實踐技術,
所以一部分同學把希望又寄托給了培訓機構和一些專注于提升能力的收費課程,
大部分知識付費的專案還是非常不錯的,比如扔物線朱凱的 HenCoder Plus,比如騰訊課堂上的享學課堂Android進階課等,但比較遺憾的是,它們可能都是為大多數人制定的,而缺乏私人定制,可能并不適合現在的你,
二、頓悟:知道自己不知道啥
大多數人作業 3 年后,會陷入這個階段:知道自己不知道啥,明白自己的薄弱之處, 這個時候其實很好辦,因為自己知道問題出在哪里,當然好對癥下藥,剛好我也就是處于這個階段,這個時候不管是去選錄播直播加答疑形式的 HenCoder Plus,還是選輕付費的享學課堂Android進階系統課,都是合適的,
這個階段的同學最大的問題是時間不夠用,所以選擇以上的學習方式其實就是花錢買時間而已,大多數這個階段的同學可能都已經瀕臨成家養家的壓力,生活中的瑣事和壓力都多了起來,作業中可能也已經成為主程,除了要完成一些技術難題的攻堅,可能還需要指導一下新人,所以一定會出現時間極度不夠使用的情況,
時間不夠是最難解決的問題,可能也是最好解決的問題,時間確實就像海綿,擠擠總是有的,即使有時候我們會出現擠不動的情況,但那一定只是一個短期狀況,
這個階段的同學最需要讀書,因為這些同學通常都已經有了自己的知識體系,也明白自己的薄弱之處在哪里,這時候就需要做專項提升,越到這個階段,就會越發現基礎知識的重要性, 很多東西,真的需要學懂本質,這也是為什么大多數面試官都喜歡考察基礎問題,因為真的基礎才是根本,一個基礎優秀的同學從來都不會太差,
我也是最近半年通過部門開展的讀書活動才愛上了讀書,書讀百遍,其義自見是真理,很多書籍需要你反復軟磨硬泡幾次,每一次閱讀都是一次認知的提升,而認知的提升最侄訓帶給你財富的變現,

三、瓶頸:不知道自己知道啥
作業很久后,不少工程師會陷入第三個階段:不知道自己知道啥, 這時候,因為大多數知識已經成為了自己的血肉,很多設計理念和架構都會讓自己覺得理所當然,但真要較真起來,可能自己也弄不清楚到底是源自于哪里,
很多時候,這些同學會更加明白自己的不足之處在哪里,但時間卻更不夠用了,他們大多數都已經成為了團隊的領袖,成為了隊伍的靈魂,開始負責起團隊的大小事務,不能只關注到技術本身,而要關注很多技術之外的東西,比如產品感,專案推動能力,管理能力,大多數時候,Leader 決定了團隊的天花板,一個好的 Leader 能讓團隊的天花板更高,
但非常尷尬,這個階段的同學基本都有了自己的孩子,需要拖家帶口,需要處理人情世故,很難再把技術做的足夠純粹,即使很明白自己的技術不足之處在哪里,卻很難抽出時間去處理,因為這時候,可能軟素質的提升才是當務之急,
總結
總的來說,一名工程師都會經歷上面的三個階段,我們不能去扭轉什么,我們唯一能做的,通過學習縮短這個周期,讓每個階段提前,這樣才可以讓自己有更多的精力和時間投入到技術當中去,最后的最后,給大家在做些分享,希望能幫助到正在處于第二、三階段的朋友們,
我自己之前在技術瓶頸階段,報名過享學課堂的課程,讓我在短時間來成功跳槽阿里P7,再征得官方的同意下,給大家個福利,也算是給他們做個宣傳,分享一些他們內部的進階學習路線及檔案學習資料給大家!
- 架構師筑基必備技能
目前Android APP開發主流語言就是Java語言,Java語言最大的特性就是提高了軟體的互動可能性,可以說安卓手機幾乎所有應用程式都是利用Java語言來進行撰寫的,
知識要點:
1、深入理解Java泛型
2、注解深入淺出
3、并發編程
4、資料傳輸與序列化
5、Java虛擬機原理
6、高效IO
- 設計思想解讀開源框架
隨著互聯網企業的不斷發展,產品專案中的模塊越來越多,用戶體驗要求也越來越高,想實作小步快跑、快速迭代的目的越來越難,插件化技術應用而生,如果沒有插件化技術,美團、淘寶這些集成了大量“app”的應用,可能會有幾個g那么大,
所以,當今的Android移動開發,不會熱修復、插件化、組件化,80%以上的面試都過不了,
知識要點:
1、熱修復設計
2、插件化框架設計
3、組件化框架設計
4、圖片加載框架
5、網路訪問框架設計
6、RXJava回應式編程框架設計
- 360°全方位性能調優
在不同層次的開發工程師手里,因為技術水平的參差不齊,即使很多手機在跑分軟體性能非常高,打開應用依然存在卡頓現象,
另外,隨著產品內容迭代,功能越來越復雜,UI頁面也越來越豐富,也成為流暢運行的一種阻礙,綜上所述,對APP進行性能優化已成為開發者該有的一種綜合素質,也是開發者能夠完成高質量應用程式作品的保證,
1、設計思想與代碼質量優化
2、程式性能優化
- 啟動速度與執行效率優化
- 布局檢測與優化
- 記憶體優化
- 耗電優化
- 網路傳輸與資料儲存優化
- APK大小優化
3、開發效率優化
- 分布式版本控制系統Git
- 自動化構建系統Gradle
4、專案實戰
- 啟動速度
- 流暢度
- 抖音在APK包大小資源優化的實踐
- 優酷回應式布局技術全決議
- 網路優化
- 手機淘寶雙十一性能優化專案揭秘
- 高德APP全鏈路原始碼依賴分析
- 徹底干掉OOM的實戰經驗分享
- 微信Android終端記憶體優化實踐
- Android框架體系架構
Android框架體系架構(高級UI+FrameWork原始碼) 這塊知識是現今使用者最多的,我們稱之Android2013~2016年的技術,
Android開發者也往往因為網上Copy代碼習慣了而導致對這塊經常“使用”的代碼熟悉而又陌生:熟悉的是幾乎天天在和它們打交道, 天天在復制這些代碼 ;陌生的是雖然天天和這些代碼打交道,但是并沒有深入研究過這些代碼的原理,代碼深處的內涵,
本篇知識要點:
1、高級UI晉升
2、Android內核組件
3、大型專案必備IPC
4、資料持久與序列化
5、Framework內核決議
- NDK模塊開發(音視頻系列)
NDK(Native Development Kit縮寫)一種基于原生程式介面的軟體開發工具包,可以讓您在 Android 應用中利用 C 和 C++ 代碼的工具,通過此工具開發的程式直接在本地運行,而不是虛擬機,
在Android中,NDK是一系列工具的集合,主要用于擴展Android SDK,NDK提供了一系列的工具可以幫助開發者快速的開發C或C++的動態庫,并能自動將so和Java應用一起打包成apk,
本篇知識要點:
1、NDK開發之C/C++入門
2、JNI模塊開發
3、Linux編程
4、底層圖片處理
5、音視頻開發
6、機器學習
- Flutter學習進階
2019 年無疑是 Flutter 技術如火如荼發展的一年,
每一個移動開發者都在為 Flutter 帶來的“快速開發、富有表現力和靈活的 UI、原生性能”的特色和理念而癡狂,從超級 App 到獨立應用,從純 Flutter 到混合堆疊,開發者們在不同的場景下樂此不疲的探索和應用著 Flutter 技術,也在面臨著各種各樣不同的挑戰,
本篇知識要點:
1、Flutter跨平臺開發概述
2、Windows中Flutter開發環境搭建
3、撰寫你的第一個Flutter APP
4、Flutter Dart語言系統入門
…
- 微信小程式開發
微信小程式作為現在比較火的編程開發應用場景之一,深受市場的青睞,這讓不少開發者眼饞不已,但是對于初學者來說,就完全摸不著頭腦了,不知道微信小程式開發制作需要學習那些知識,有需要的朋友可以參考本篇,
本篇知識要點:
1、小程式概述及入門
2、小程式UI開發
3、API操作
4、購物商場專案實戰
- Android相關原始碼解讀
只要是程式員,不管是Java還是Android,如果不去閱讀原始碼,只看API檔案,那就只是停留于皮毛,這對我們知識體系的建立和完備以及實戰技術的提升都是不利的,
由于篇幅原因,以上完整學習筆記pdf如有需要,可以 點贊+評論 支持下,然后點擊這里免費自取!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/255863.html
標籤:其他









