在過去五年中,我一直作Android相關的工做。在這期間,我與不一樣背景,不一樣水平的工程師進行過合做。有些工程師有很是豐富的經驗,有些是剛走出校園的應屆生,它們擁有的只是學校學習到的知識並利用業餘時間進行App的開發。還有些工程師甚至不是CS專業,僅僅是自學的。在合做過程當中,我目擊了不一樣類型工程師的工做交付內容和方式。html
因此,若是你是一個Android軟件工程師,能夠嘗試讀一下這篇文章。首先,不少人誤認爲移動開發很是簡單,移動應用就是把根據後端的設計把一些界面組合在一塊兒。真的是這樣嗎,其實這與實際狀況差的很遠。實際上,若是你看一下PlayStore上的應用,你就會發現app的質量分佈實際上是一個高斯分佈,低質量的app不多,同時高質量的app也不多。java
這裏我定義一下平庸的App是什麼android
在一個很是基本的層面上, 一個平庸的app 與操做系統不能很好地兼容。首先,不遵循平臺要求的 設計語言,這會使得用戶感到困惑。第二,不考慮運行環境(內存、cpu、帶寬、電量)其實是有限制的。第三,在某些條件下不能工做(好比在弱網環境下)。如今的大部分軟件都存在最後一個問題。面試
簡而言之,以上三點就是構建一個好的移動應用的挑戰。此外,App須要與公司的基礎需求合理地整合,適應不斷變化的業務需求。算法
因此若是我要尋找能夠處理以上三個挑戰的軟件工程師,如下幾點是我關注的:編程
較好的軟件工程和技術水平 這包括:SOLID(面向對象設計)原則,clean code,應用架構和測試。數據結構和算法也很重要。可是我不在乎面試者是否能夠平衡二叉排序樹。我關注面試者是否理解基本的數據結構(Lists, queues, trees, hash maps),是否理解 O 是什麼,能夠討論時間和空間的交換,就是最基本的技能。c#
熟悉java語言(若是面試者很是熟悉其餘的語言,我也不會拒絕)。後端
理解併發 由於App是響應式的,因此不能夠在主線程中執行耗時任務。不少事情須要在其餘線程執行,若是面試者不能處理併發編程,他們須要在工做和項目中學習。網絡
理解分佈式系統 隨着移動應用變得愈來愈靈敏,須要設計爲能夠離線使用。這意味着若是網絡有故障,相同的用戶可能會面對不一樣的狀態。所以,面試者須要瞭解CAP(Consistency,Availability,Partition Tolerance theorem)理論和分佈式系統的共識模型。數據結構
分析解決問題的能力 面試者須要對事物的工做原理保持好奇,而且有大局觀。
較好的口頭和書面表達能力 在技術上,溝通交流很是重要。面試者清晰地表達本身的想法,同時合理的文檔說明是很是重要的。其實,是否擅長寫文檔必定程度上也表明了代碼能力。
理解當前的技術環境和對設計與工程的影響
我並不擔憂面試者是否對SDK自己理解多少。若是面試者理解以上的幾點,即便他只是一個Android的用戶,也能夠快速地學習。也就是說,面試者同時擁有好的CS背景,瞭解android生態環境,還要知道如下的一些基本概念:
能夠畫出Android的基本架構
能夠描述在點擊Android studio的一個按鈕以後具體發生了什麼邏輯
理解基本的Dalvik和ART 虛擬機
Android進程間通訊原理
app的沙箱機制以及爲何要用沙箱
權限系統(權限在底層是若是實現的)
進程和應用生命週期
還有一點是能夠和麪試者聊他擅長的話題,若是他擅長ui,就能夠和他聊UI。
能夠發現重要的是判斷面試者是否知道核心的基礎和概念,從而較好地處理分給他們的任務。必定不要僱傭只會使用一兩個library的員工。工程師不只在必要時會使用library,並且能夠在提供解決問題的方法以前能夠分析使用情景,預見可能的問題。
再次強調,必定不要僱傭只會使用一兩個library的工程師。
固然,我這裏描述的條件適用於senior 工程師。一樣也須要僱傭一些junior工程師。可是必定要控制好兩種工程師的比例。若是團隊中有太多初級工程師,那麼開發過程很是艱難,須要修改一個接一個的線上問題,直到能夠代碼達到維護性和測試性良好的程度。
若是你是一個Android工程師,你能夠看一下如下的文章以提升本身的技術水平:
軟件工程技術
Clean Code — by Uncle Bob Martin
The Pragmatic Programmer — by Andy Hunt and Dave Thomas
Refactoring — by Martin Fowler
Head First Design Patterns — by Elisabeth Freeman, Eric Freeman, Bert Bates and Kathy Sierra
Patterns of Enterprise Application Architecture — by Martin Fowler (his blog is also worth following)
java
Effective Java, Second Edition — by Joshua Bloch
併發
Java Concurrency In Practice — by Brian Goetz
數據結構和算法
Introduction to Algorithms (a.k.a The Cormen book) — by Charles E. Leiserson, Clifford Stein, Ronald Rivest and Thomas H. Cormen.or The Algorithm Design Manual — by Steven Skienna
計算機文化
Subscribe to ACM Queue
Love the Papers
Listen to Software Engineering Radio and/or Software Engineering Daily
問題解決技巧
How To Solve It — by G. Polya and John H. Conway
寫做技巧
On Writing Well — by William Zinsser
值得follow的一些blog
Chet Haas’s blog. Specifically These series of articles he (Chet) wrote about Android development
Dan Lew’s blog
Jake Wharton’s blog
Jesse Wilson’ blog
Cyril Mottier’s blog
Chris Bane’s and Roman Nurik’s blogs for UI related subjects.
Listen to Android Backstage and The Fragmented Podcast.
And finally do subscribe to Android Weekly, to read about the latest stuff in the Android development world.
此文爲譯文,原文地址hackernoon.com/what-makes-…
歡迎關注公衆號wutongke,天天推送移動開發前沿技術文章:
推薦閱讀: