在過(guò)去五年中,我一直做Android相關(guān)的工作。在這期間,我與不同背景,不同水平的工程師進(jìn)行過(guò)合作。有些工程師有非常豐富的經(jīng)驗(yàn),有些是剛走出校園的應(yīng)屆生,它們擁有的只是學(xué)校學(xué)習(xí)到的知識(shí)并利用業(yè)余時(shí)間進(jìn)行App的開(kāi)發(fā)。還有些工程師甚至不是CS專業(yè),僅僅是自學(xué)的。在合作過(guò)程中,我目睹了不同類型工程師的工作交付內(nèi)容和方式。
所以,如果你是一個(gè)Android軟件工程師,可以嘗試讀一下這篇文章。首先,很多人誤認(rèn)為移動(dòng)開(kāi)發(fā)非常簡(jiǎn)單,移動(dòng)應(yīng)用就是把根據(jù)后端的設(shè)計(jì)把一些界面組合在一起。真的是這樣嗎,其實(shí)這與實(shí)際情況差的很遠(yuǎn)。實(shí)際上,如果你看一下PlayStore上的應(yīng)用,你就會(huì)發(fā)現(xiàn)app的質(zhì)量分布其實(shí)是一個(gè)高斯分布,低質(zhì)量的app很少,同時(shí)高質(zhì)量的app也很少。
這里我定義一下平庸的App是什么
在一個(gè)非?;镜膶用嫔希?一個(gè)平庸的app 與操作系統(tǒng)不能很好地兼容。首先,不遵循平臺(tái)要求的 設(shè)計(jì)語(yǔ)言,這會(huì)使得用戶感到困惑。第二,不考慮運(yùn)行環(huán)境(內(nèi)存、cpu、帶寬、電量)實(shí)際上是有限制的。第三,在某些條件下不能工作(比如在弱網(wǎng)環(huán)境下)。現(xiàn)在的大部分軟件都存在最后一個(gè)問(wèn)題。
簡(jiǎn)而言之,以上三點(diǎn)就是構(gòu)建一個(gè)好的移動(dòng)應(yīng)用的挑戰(zhàn)。此外,App需要與公司的基礎(chǔ)需求合理地整合,適應(yīng)不斷變化的業(yè)務(wù)需求。
所以如果我要尋找可以處理以上三個(gè)挑戰(zhàn)的軟件工程師,以下幾點(diǎn)是我關(guān)注的:
較好的軟件工程和技術(shù)水平 這包括:SOLID(面向?qū)ο笤O(shè)計(jì))原則,clean code,應(yīng)用架構(gòu)和測(cè)試。數(shù)據(jù)結(jié)構(gòu)和算法也很重要。但是我不在意面試者是否可以平衡二叉排序樹(shù)。我關(guān)注面試者是否理解基本的數(shù)據(jù)結(jié)構(gòu)(Lists, queues, trees, hash maps),是否理解 O 是什么,可以討論時(shí)間和空間的交換,就是最基本的技能。
熟悉java語(yǔ)言(如果面試者非常熟悉其他的語(yǔ)言,我也不會(huì)拒絕)。
理解并發(fā) 因?yàn)锳pp是響應(yīng)式的,所以不可以在主線程中執(zhí)行耗時(shí)任務(wù)。很多事情需要在其他線程執(zhí)行,如果面試者不能處理并發(fā)編程,他們需要在工作和項(xiàng)目中學(xué)習(xí)。
理解分布式系統(tǒng) 隨著移動(dòng)應(yīng)用變得越來(lái)越靈敏,需要設(shè)計(jì)為可以離線使用。這意味著如果網(wǎng)絡(luò)有故障,相同的用戶可能會(huì)面對(duì)不同的狀態(tài)。因此,面試者需要了解CAP(Consistency,Availability,Partition Tolerance theorem)理論和分布式系統(tǒng)的共識(shí)模型。
分析解決問(wèn)題的能力 面試者需要對(duì)事物的工作原理保持好奇,并且有大局觀。
較好的口頭和書(shū)面表達(dá)能力 在技術(shù)上,溝通交流非常重要。面試者清晰地表達(dá)自己的想法,同時(shí)合理的文檔說(shuō)明是非常重要的。其實(shí),是否擅長(zhǎng)寫(xiě)文檔一定程度上也代表了代碼能力。
理解當(dāng)前的技術(shù)環(huán)境和對(duì)設(shè)計(jì)與工程的影響
我并不擔(dān)心面試者是否對(duì)SDK本身理解多少。如果面試者理解以上的幾點(diǎn),即使他只是一個(gè)Android的用戶,也可以快速地學(xué)習(xí)。也就是說(shuō),面試者同時(shí)擁有好的CS背景,了解android生態(tài)環(huán)境,還要知道以下的一些基本概念:
可以畫(huà)出Android的基本架構(gòu)
可以描述在點(diǎn)擊Android studio的一個(gè)按鈕之后具體發(fā)生了什么邏輯
理解基本的Dalvik和ART 虛擬機(jī)
Android進(jìn)程間通信原理
app的沙箱機(jī)制以及為什么要用沙箱
權(quán)限系統(tǒng)(權(quán)限在底層是如果實(shí)現(xiàn)的)
進(jìn)程和應(yīng)用生命周期
還有一點(diǎn)是可以和面試者聊他擅長(zhǎng)的話題,如果他擅長(zhǎng)ui,就可以和他聊UI。
可以發(fā)現(xiàn)重要的是判斷面試者是否知道核心的基礎(chǔ)和概念,從而較好地處理分給他們的任務(wù)。一定不要雇傭只會(huì)使用一兩個(gè)library的員工。工程師不僅在必要時(shí)會(huì)使用library,而且可以在提供解決問(wèn)題的方法之前可以分析使用情景,預(yù)見(jiàn)可能的問(wèn)題。
再次強(qiáng)調(diào),一定不要雇傭只會(huì)使用一兩個(gè)library的工程師。
當(dāng)然,我這里描述的條件適用于senior 工程師。同樣也需要雇傭一些junior工程師。但是一定要控制好兩種工程師的比例。如果團(tuán)隊(duì)中有太多初級(jí)工程師,那么開(kāi)發(fā)過(guò)程非常艱難,需要修改一個(gè)接一個(gè)的線上問(wèn)題,直到可以代碼達(dá)到維護(hù)性和測(cè)試性良好的程度。
-
Android
+關(guān)注
關(guān)注
12文章
3943瀏覽量
127803 -
軟件工程師
+關(guān)注
關(guān)注
8文章
218瀏覽量
21156
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論