在過去五年中,我一直做Android相關的工作。在這期間,我與不同背景,不同水平的工程師進行過合作。有些工程師有非常豐富的經驗,有些是剛走出校園的應屆生,它們擁有的只是學校學習到的知識并利用業余時間進行App的開發。還有些工程師甚至不是CS專業,僅僅是自學的。在合作過程中,我目睹了不同類型工程師的工作交付內容和方式。
所以,如果你是一個Android軟件工程師,可以嘗試讀一下這篇文章。首先,很多人誤認為移動開發非常簡單,移動應用就是把根據后端的設計把一些界面組合在一起。真的是這樣嗎,其實這與實際情況差的很遠。實際上,如果你看一下PlayStore上的應用,你就會發現app的質量分布其實是一個高斯分布,低質量的app很少,同時高質量的app也很少。
這里我定義一下平庸的App是什么
在一個非常基本的層面上, 一個平庸的app 與操作系統不能很好地兼容。首先,不遵循平臺要求的 設計語言,這會使得用戶感到困惑。第二,不考慮運行環境(內存、cpu、帶寬、電量)實際上是有限制的。第三,在某些條件下不能工作(比如在弱網環境下)。現在的大部分軟件都存在最后一個問題。
簡而言之,以上三點就是構建一個好的移動應用的挑戰。此外,App需要與公司的基礎需求合理地整合,適應不斷變化的業務需求。
所以如果我要尋找可以處理以上三個挑戰的軟件工程師,以下幾點是我關注的:
較好的軟件工程和技術水平 這包括:SOLID(面向對象設計)原則,clean code,應用架構和測試。數據結構和算法也很重要。但是我不在意面試者是否可以平衡二叉排序樹。我關注面試者是否理解基本的數據結構(Lists, queues, trees, hash maps),是否理解 O 是什么,可以討論時間和空間的交換,就是最基本的技能。
熟悉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
+關注
關注
12文章
3937瀏覽量
127481 -
軟件工程師
+關注
關注
8文章
218瀏覽量
21141
發布評論請先 登錄
相關推薦
評論