天天看點

解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結

程式員的标準與要求

初級程式員

僅能完成簡單子產品和項目的開發工作,難以勝任複雜子產品的開發。通常是入行不久, 1 年及以下工作經驗的同學。

能力要求

  1. 有良好的JAVA基礎,熟練掌握面向對象思想。
  2. 熟練掌握UI設計、常用布局、動畫特效。
  3. 熟練Android四大元件(Activity、Service、ContentProvider、BroadcastReceiver)
  4. 熟練Android資料存儲(檔案、網絡、SharedPreferences、SQLite、ContentProvider)
  5. 熟練Android 平台下XML和JSON解析
  6. 熟悉圖檔的緩存技術,并且能夠對圖檔的優化進行相應的處理。
  7. 掌握OOM異常的處理,并可以對應用進行相應的優化。
  8. 熟練Android下的自定義控件的使用,具備開發自定義控件的能力
  9. 熟練掌握ListView的優化及異步任務加載網絡資料。
  10. 熟悉掌握各種常見的設計模式。
  11. 熟練使用Handler以及AsyncTask異步架構。
  12. 有一定的螢幕适配經驗。
  13. 熟練運用AIDL遠端調用。
  14. 熟悉UML設計,可以設計程式的用例圖、類圖、活動圖等。
  15. 熟悉Android系統下消息推送機制。
  16. 對Android底層有一定的認識,研究過相關的Android源碼。
  17. 熟悉Android的JNI/NDK 開發。
  18. 掌握常用的Android 開源架構。

中級程式員(阿裡 p5)

在必要的輔導或标準流程支援下,能獨立負責一個子子產品或者一個項目的具體任務,對及時性和準确性負責。通常是 2-3 年工作經驗的同學。

能力要求

  1. 除了前端基礎知識外,熟悉計算機、網絡等專業基礎知識。
  2. 熟練掌握工作中使用的技術棧開發業務。
  3. 能了解一個需求從開發-上線整個生命周期,并對各個環節負責。
  4. 具備基本的邏輯分析、問題分解、歸納總結等能力。
  5. 了解基本的資料結構和算法,寫代碼較熟練。
  6. 知道從靠譜的管道去查找問題,在找不到合适輪子的時候,會造一些簡單的輪子輔助業務開發。
  7. 熟練掌握NDK JNI方式的開發,對Android framework十分了解。
  8. 移植一些開源項目,比如FFmpeg、Mplayer到Android上運作。
  9. 邁向進階,熟悉android開源代碼的結構,中間件下層的庫,比如webkit、opencore、opengl。

進階程式員(阿裡 p6)

具有獨擋一面的能力,能夠高品質完成工作,能把握一個系統/團隊的整體實作,在推行過程中能提煉新的方法或方案,或對現有方案提出改進建議并被證明有效。通常是 3 年+ 工作經驗的同學。

能力要求

  1. 具有獨擋一面的能力,能高品質的完成子產品級的工作。
  2. 熟練掌握工作中使用的技術棧,并能了解它們的實作原理。
  3. 能夠在一個需求從開發-上線整個生命周期中找到痛點,并能使用技術的手段解決,提升效率。
  4. 能在子產品次元對問題或需求做出分析和拆解,并做出相對合理的實作方案。
  5. 熟練掌握基礎的資料結構和算法,代碼符合規範,邏輯清晰。
  6. 有較好的技術選型能力。
  7. 熟練的Linux驅動開發,精通Linux核心結構。
  8. 掌握Android移植,比如常見的TI OMAP、Qualcomm MSM的硬體移植。
  9. 邁向頂級,發現Android系統中的0day漏洞,可以輕松的找出Root系統的10種方法,幫助Google改進Android作業系統。
解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結

程式員的進化之路

初級 -> 中級

通常在初級這個階段,是進步空間最大的階段,這個階段是不存在天花闆的。

編碼

編碼是初級階段最需要經常做的事情,古話說孰能生巧,寫代碼也是同樣的道理。

  • 寫什麼的樣代碼在公司要多做業務,嘗試不同的業務,目标是讓自己先成為一個熟練工。 下班後也可以折騰點小項目做,可以選擇自己感興趣的内容,嘗試自己實作一遍。
  • 如何寫代碼學會模仿,參考大牛的編碼風格,照葫蘆畫瓢。 如果公司有代碼規範,跟随着公司的代碼規範走,如果沒有,參考業界規範,并用工具(如 eslint)限制自己。 遇到一些不會寫的,哪怕找到可以參考的代碼,跟着抄一遍也行。

工作

大部分時間都在工作,那麼如何合理的利用好 8 小時工作時間呢。

  • 熟悉業務 不要僅僅埋頭寫代碼,也需要對業務了解,認真參與需求評審環節,明确自己所做的任務。
  • 熟悉工作流程要熟悉從需求-開發-聯調-測試-上線的每個工作環節,認真按照規範來執行,對上線要有敬畏心。
  • 提升效率工作的時候,盡量不要被打斷,可以安排一個免打擾時段,比如下午的 2點-4點,隻編碼而不去處理其它事情。減少在群裡 灌水和鬥圖的時間。
  • 加班可以接受合理的加班(比如為了趕某一個需求加班一陣子),不接受沒有任何補償和調休的日常加班(996),因為日常 加班會壓縮你學習和生活的時間。

學習

初級階段是需要通過大量的學習來提升自己的能力。

  • 明确自己的學習目标 學習是為了提升能力,能讓你勝任更複雜和有挑戰的工作。
  • 應該學習什麼内容 ,Android基礎反複學習。 了解一些廣度知識。
  • 找到合适的學習方式看書+編碼:購買經典的書籍閱讀,并作為平時寫碼的參考工具,看書和編碼是一個反複的過程,基本就是看書->編碼->看書->編碼循環個 3-4 次,這個過程就是在不斷修煉内功。看視訊的話認真的跟着老師學習一遍寫一遍,遇到不懂的要積極提問,學習在于深入而不在于多。視訊比書籍的好處在于更貼合實踐,也更貼合公司業務,另外,課程的更新和更新也更加靈活。官網文檔:學習每一個新的技術棧,入門最好的方式是通過它的文檔學習,可以系統的過一遍文檔,手敲它每一個示例。社群:慕課網手記、掘金、CSDN、InfoQ 等中文社群,利用碎片化時間看一些高品質文章學習。GitHub:學會 GitHub 的使用,知道 clone、fork、pull、push 等基本操作。
解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結
  • 花更多的學習時間 如果想比别人成長的快,就得花比别人更多的時間用來學習(這也是為什麼不鼓勵日常加班),尤其是初級這個階段,成長曲線是非常快的。
  • 知識沉澱 俗話說好記性不如爛筆頭,可以養成寫部落格的習慣,把學習的内容用文字的形式記錄下來,整理成文,并按學習的技術方向做歸類。

提問

在初級階段,免不了經常遇到問題,會提問也是一門技術活,好的提問姿勢能讓你事半功倍。

  • 不好的提問方式“這個報錯是什麼意思?”;缺乏思考,沒有展現自己關于問題的思考過程。“為什麼我的代碼和你的一模一樣,就是運作不了?”;缺乏上下文,應告知代碼是編譯不過還是運作不起來、錯誤提示資訊、相關代碼、可能出錯的代碼分析。沒有足夠的上下文,神仙都不知道如何解決相關的問題。“為什麼 xxx 能(不能)yyy”;問的問題本身就是一個錯誤的結論,通常是隻是看到了現象,而沒有分析問題的本質。
  • 好的提問方式首先你在提問之前,自己應該經過充分的思考,并學會把問題拆解,在拆解的過程中就會把問題的複雜度降低。 其次要善用搜尋引擎,把關鍵字提取出來去搜尋引擎上去搜尋,先嘗試自己去解決問題。如果仍然不能解決,可以将問題的相關上下文、截圖及必要辨別及自己的思考過程、查找到的相關資料,以及自己的分析發送給想要幫助你的人,并能提供最小化複現的問題。最後,請将你的問題及解決方案重新整理,并告知幫助你的人問題已經解決,重新整了解決問題的過程會幫助你理清思路、進而對問題有着更深的了解。

中級 -> 進階

到了中級階段,基本上意味着你可以在大公司缺人的時候進入大公司工作了,如果想成為大公司不可拒絕的人才, 那你還需要朝着進階階段努力。

編碼

沒錯,到了中級階段,你想要提升最重要的途徑還是要編碼。

  • 寫什麼的樣代碼和初級不同,除了做業務之外,你也參與開發做一些偏技術類型的項目,比如參與組内元件庫的開發,一些通用 JSSDK 的開發,這些會對你的技術要求會更高。有機會去參與平時使用到的一些開源技術棧的共建,比如想實作每個 feature 但現有開源庫不滿足,實作難度不大的情況下可以去提一個 pull request。
  • 如何寫代碼學會模仿,除了參考大牛的編碼風格,還要琢磨他們的編碼思路,多思考他們為什麼這麼做。學會元件化、子產品化的開發方式,學會複用和封裝,減少 CV 的操作。對自己的代碼品質負責,可以經常組織 code review。

工作

想要進階,需要在工作方面有所産出。

  • 業務思考要明白業務和公司的目标,參與到需求的早期階段中,同時也要多思考業務,想着有沒有通過技術手段來提升業務價值,比如移動端的白屏時間減少,可以帶來很好的使用者體驗,提升使用者的留存率。
  • 技術思考思考業務開發中的一些痛點,如何用技術手段去優化業務的開發流程,提升開發效率,比如為業務量身定制一款腳手架工具。
  • 優化工作流程不僅要熟悉從需求-開發-聯調-測試-上線的每個工作環節,還要多思考每個環節有沒有可以提升的點,特别是上線過程,比如能不能做到自動化,能不能做到小流量上線,能不能及時復原代碼。
  • 技術分享把工作中遇到的一些問題的解決方案、學習的一些新技術,産出的一些技術項目總結下來,作為組内技術分享和輸出,這樣一是可以總結沉澱你的技術,二是可以讓大家能知道你做的東西,并活躍組内的技術氛圍,三是鍛煉自己的表述能力,這個能力在大公司的晉升述職中非常重要。

學習

中級階段仍然需要通過大量的學習來提升自己的能力。

  • 明确自己的學習目标學習是為了提升自己的硬實力,不僅僅能夠提升工作效率,還能讓自己更好的服務于業務,升職加薪。
  • 應該學習什麼内容研究工作中所用到的工具鍊,不僅僅是運作時的 MVVM 架構,還可以是編譯時的 webpack,必要的時候去研究其中的源碼實作。深入學習一些廣度知識,比如 HTTP、正規表達式、Web安全、性能優化、設計模式,資料結構和算法,并把它們應用到你的工作中。
  • 找到合适的學習方式看書:找到所學習方向的經典書籍閱讀,适當做一些學習筆記。視訊,官網文檔:可以嘗試去看一下英文文檔。社群:StackOverflow、HackerNews,慕課網手記、掘金等,除了利用碎片化時間看一些高品質文章學習,也可以往上面釋出一些優質文章。GitHub:關注 trending,參與開源社群的共建,并嘗試自己造一些輪子。
  • 學習時間與深度在中級階段,你仍然需要花很多時間去學習,這個時候要注重自己學習的深度了。
  • 知識沉澱俗話說好記性不如爛筆頭,可以養成寫部落格的習慣,把工作中深入學習到的一些非敏感覺識記錄下來并釋出,而不僅僅去釋出一些基礎知識的學習了。
  • 技術視野除了自己工作中的使用的技術棧之外,也要了解同類其它優秀的開源技術棧,從多個次元(feature 完整性、文檔、上手難度、維護力度、生态等)去做對比。要保持對新技術的敏感的關注,并時刻思考這些技術能否為自己的業務帶來價值,在需要的時候做合理的技術選型。
解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結

總結

所謂技術能力其實就是解決問題的能力和學習能力,是以無論你在哪個階段,甚至是更高的階段,不斷提升這兩個能力都是你應該一直要做的事情。

在這我也分享一份大佬自己收錄整理的Android學習PDF+架構視訊+面試文檔+源碼筆記,還有進階架構技術進階腦圖、Android開發面試專題資料,進階進階架構資料這些都是我閑暇還會反複翻閱的精品資料

解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結
解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結
解密Android初、中、進階程式員的進化之路程式員的标準與要求初級程式員中級程式員(阿裡 p5)進階程式員(阿裡 p6)程式員的進化之路初級 -> 中級中級 -> 進階總結

“當你感到悲哀痛苦時,最好是去學些什麼東西,學習會使你永遠立于不敗之地”。

希望大家都能成為自己最想成為的人!

點選【Android學習PDF+架構視訊+面試文檔+源碼筆記】加入我們的圈子領取資料和我們一起吧學習交流吧!