最近一兩個月榔幸,作為公司的iOS面試官允乐,面試了幾十個人,其中不乏優(yōu)秀的面試者削咆,但大部分還是相對平庸牍疏,這些人通常都工作了兩三年,有一定的經(jīng)驗拨齐,但存在幾個關(guān)鍵性的問題:
1. 研究不深入鳞陨。
? 最普遍的問題就是只知道調(diào)用sdk或者第三方庫,卻不知道里面怎么寫的瞻惋。這種面試者一般在小公司工作了兩三年厦滤,能使用sdk去解決一般性的問題,但也僅僅只是停留在使用層面上歼狼,卻從來不鉆進(jìn)源碼里面去研究原理掏导,對于iOS系統(tǒng)較為底層的技術(shù)也是一知半解,或者壓根沒聽過羽峰。這種面試者我基本上都pass了趟咆,如果是招普通的工程師,也勉強說得過去梅屉,但我們招的是高級工程師值纱,對系統(tǒng)底層是一定要有些了解的,否則很多關(guān)鍵性問題就解決不了坯汤。
2. 缺乏程序設(shè)計方面的思考虐唠。
程序設(shè)計是區(qū)分一個開發(fā)者是普通還是高級的一個門檻,一般來說程序設(shè)計包括兩個方面:組件設(shè)計和架構(gòu)設(shè)計惰聂。組件設(shè)計是針對單個模塊的凿滤,相對比較簡單,架構(gòu)設(shè)計是針對整體的庶近,比較復(fù)雜。但總的來說眷蚓,都是要解決在版本不斷迭代鼻种,業(yè)務(wù)不斷變化的過程中,模塊的耦合性和可擴展性始終保持在一個合理的范圍內(nèi)沙热。很多人平時開發(fā)的時候只關(guān)注自己做的那個模塊叉钥,對整個應(yīng)用程序缺乏一個宏觀的思考罢缸,架構(gòu)設(shè)計的不合理。舉個例子來說投队,很多人喜歡把什么網(wǎng)絡(luò)請求枫疆、手勢處理、頁面布局和各種業(yè)務(wù)邏輯都往VC里面寫敷鸦,導(dǎo)致其無比臃腫息楔,不僅別的人看不懂,自己維護起來也麻煩扒披。還有單例模式的濫用值依,單例確實有時候挺好的,用來傳值碟案、發(fā)網(wǎng)絡(luò)請求都可以用單例愿险,但是濫用單例會破壞模塊的獨立性,且增加不必要的內(nèi)存開銷价说。還有些人喜歡增加一個新的功能就繼承一下原來的類辆亏,這樣在版本的迭代中,繼承關(guān)系越來過多鳖目,當(dāng)有一個新的模塊扮叨,要把某個功能從繼承關(guān)系中抽出來的時候,就發(fā)現(xiàn)抽不出來了疑苔,因為已經(jīng)耦合的太深甫匹。如果你想做高級工程師或者架構(gòu)師,這方面的技術(shù)是一定要修煉的惦费,而且越早越好兵迅。
3. 基礎(chǔ)不扎實。
這里說的基礎(chǔ)主要是在大學(xué)里面學(xué)的基礎(chǔ)課程知識薪贫,比如數(shù)據(jù)結(jié)構(gòu)恍箭、算法、操作系統(tǒng)什么的瞧省。一般來講扯夭,重點大學(xué)畢業(yè)的基礎(chǔ)知識會比普通大學(xué)畢業(yè)的要好,可能是因為在學(xué)校的時候要求比較嚴(yán)吧鞍匾,反正考到這方面的時候交洗,差別就很明顯∠鹗纾可能有些人會說构拳,算法這些在實際工作中能用到的太少了,考察這些沒有意義。確實置森,平時開發(fā)中直接使用算法的很少斗埂,因為我們都是直接調(diào)用系統(tǒng)或者第三方的sdk,這些人家都幫我們封裝好啦凫海。但正是因為如此呛凶,才讓我們少了去深入研究底層的一個機會。殊不知行贪,越到底層漾稀,越是講究性能和效率,這時候如果你算法瓮顽、數(shù)據(jù)結(jié)構(gòu)這些掌握的不扎實县好,就徹底完蛋了。現(xiàn)在的iOS開發(fā)說實在的暖混,真的沒有什么特別難的缕贡,難也就是難在幾個方面:圖像渲染、動畫拣播、音視頻晾咪、socket、runtime(這些都是屬于Cocoa底層框架)贮配,除此之外基本都是屬于業(yè)務(wù)層面的或者是應(yīng)用架構(gòu)的問題谍倦。當(dāng)你把Cocoa底層框架都研究透以后,你會發(fā)現(xiàn)自己已經(jīng)到了一個技術(shù)瓶頸泪勒,而這時你想要再提高自己水平的話昼蛀,就只能往系統(tǒng)底層去研究了。
4. 對網(wǎng)絡(luò)和后臺知識的了解匱乏圆存。
?雖然我們招的是iOS工程師叼旋,是做客戶端的,但我覺得如果只掌握客戶端的技術(shù)沦辙,而對網(wǎng)絡(luò)和后臺知識一無所知的話夫植,也是不合格的。因為實際的工作環(huán)境中油讯,避免不了要與后臺聯(lián)調(diào)接口详民,如果出了問題不知道從哪里著手,只知道依賴后端工程師的話陌兑,那工作效率肯定很低沈跨,這在一個創(chuàng)業(yè)型的公司里面是非常嚴(yán)重的問題。所以一個合格的iOS工程師或者說前端工程師兔综,是應(yīng)該要了解網(wǎng)絡(luò)和后臺知識的谒出。
5. 對待工作的主動性不夠葡幸。
?這種情況在工作了兩到三年的開發(fā)者中最為明顯典蜕。初入職場還不到一年的,一般還會主動去承擔(dān)工作任務(wù)枯途,因為他們想要提升自己的能力碌宴,得到領(lǐng)導(dǎo)的重視杀狡。而工作了兩三年以后,很多人已經(jīng)是“老油條”了贰镣,業(yè)務(wù)方面已經(jīng)很熟練呜象,一般的編程問題似乎也沒什么解決不了的,然后就會漸漸變得懶惰起來碑隆,不愿意承擔(dān)額外的工作恭陡,一下班就走人。這種人其實很危險上煤,在團隊中會起到一個不好的影響休玩,會讓整個團隊的士氣下降。 如果公司招了更優(yōu)秀的人才劫狠,那么他被解雇的可能性就會很大拴疤。
以上幾點只是我個人的看法,作為一個工作了6独泞、7年的程序員呐矾,我也曾經(jīng)經(jīng)歷過這么一段時期,也犯過一些錯誤懦砂,所幸那時候iOS的競爭還沒那么激烈蜒犯,找工作沒那么困難。但是隨著這一行從業(yè)的人越來越多荞膘,要想出類拔萃罚随,就必須在自己的工作能力和工作態(tài)度上面下功夫。最后衫画,希望大家都能找到好工作毫炉!