最近有一位讀者去今日頭條面試 Android 開發,這位讀者師出名門(BAT中的一家公司),是有十年的軟體開發經驗的高階 Android 工程師,但今日頭條卻以沒有技術深度拒絕了他。
昨天早上,我在給他做模擬面試的時候也發現了這個問題,因為從簡歷上看他的出身,呆過兩家知名的網際網路公司,面試官一定會不自覺的提升對他的期望。他雖然有豐富的專案經驗,但真正交流下來又發現雖然在知名公司工作卻沒有掌握“核心科技”,他的優勢一下就變成了劣勢。
隨著年齡的增長,你原來的優勢都在慢慢變成你的劣勢。
寫給資深或即將資深的Android工程師
當我們是初級工程師的時候,最希望的就是有豐富的專案經驗,好把自己蒼白乾癟的簡歷填的炫麗飽滿。然而隨著時間的積累,簡歷上的專案是挺“飽滿”的了,但我們只看“外表”的行為造成了自己另一個困境:看似很資深,其實又沒有做過什麼有難度的事情,工作了十年可能只是 1 年的工作經驗用了 9 次。
正如這位去面試的讀者,從簡歷上看確實是能看到他輝煌的專案經歷,在經歷之下會發現簡歷中沒有深入的地方。有些雖然寫的很有技術,但是確實只是在使用API的程度而已;有些解決問題的方式很有技巧,但還不成體系。
可惜沒有多走兩步,沒有去研究和擴充套件。
那麼如何改變呢?
對方也在問我這個問題,而且很迫切,迫切到希望我今天說明白之後他明天面試就可以變得深入。
我很無奈且直接的說明了這個多半不可能。如果是可能的話,別人也可以很快掌握核心技術變得很深入。但長期的話我認為是可能的,比如給自己半年的時間,對以前專案中的某一項技術框架進行學習擴充套件和實踐。最好能利用一下你目前所在公司的資源,比如做這個框架的專案組,和他們搞好關係,向他們學習、和他們討論你遇到的每一個問題。
但是絕對沒有其他的方式,可以讓你通過看一下或者臨時準備一下就提升到有深度的地步。如果你能做到,必然是已經在某方面是個很精深的高手了,自然可以忽略我說的話。
沒有深度的原因
我們沒有技術深度,最重要的原因有兩個:第一是迴避問題,第二是沒有興趣。
當我們在工作中遇到問題的時候,第一選擇往往是迴避它,不管是從設計上還是從技術上,或者找到其他的替代方案,如可使用別人的開源庫,使用別人造出來的輪子。這樣做無可厚非,但如果我們想有更深一步的提升或者更有技術深度的話,我們一定要把這個問題搞明白,至少把別人是怎麼能解決這個問題的思路和方式搞明白。
第二關於興趣,很多人沒有往更深入的地方多走兩步,很重要的一點就是沒有興趣,一點都不好奇。如果我們遇到一些很有意思的解決方案、框架或者一些詭異的問題,但我們完全不想去“招惹”它們,唯恐避之而不及,自然,我們也失去了在這些點上有突破與深入的機會。
自己該在哪個點上深入呢?
我們工作了很多年之後,技術一定是需要具有一定的深度和廣度的,廣度自然不必說,你也會明白它的必要性。深度最好是跟自己的興趣或者比較接近的工作模組相關,如果你在公司相關的模組深入,你可以利用更多的資源。或者是你感興趣的模組的話,即使沒有資源,由於你很有興趣,你也會有辦法去找到你需要用的東西的。
我們永遠不缺方法。
帶領和被帶領
技術的深度是一個帶領和被帶領的關係。
關於這點我本身就有一個深刻的體會,在我剛開始做Android開發的時候,我的工作是去維護Android自帶的系統應用,客戶提的問題或者進行二次開發,我都能很好的解決。然後就會有一些空閒的時間,反正也是閒著,我就找了個系統應用裡面最簡單的一個應用(記事本)練練手。
我想既然這麼簡單,那我就自己照著寫一個吧,就從零開始實現一個記事本應用。當我開始寫時,顛覆了我對安卓應用的理解,我發現以前認為懂的地方自己都沒懂,我遇到了很多毫無頭緒的問題,就這麼一個簡單的應用,我要靠不停的對照原版的程式碼實現才能發現自己的問題所在,然後才確信真正的做和看中間的差距有多大。
如果你只是在別人的基礎上去做事情解決問題,哪怕你覺得自己想出了很好的點子,好像靈光一閃,很巧妙的解決了客戶的問題,但其實這只是一種技巧,在怎麼建造這個應用、構架和設計組織這種大的方向上,你並沒有多大的實質進步。
這個時候你只是一個跟隨者,你是被別人的原始碼帶領著的。
即使你看過和使用過很多應用框架,但紙上得來終覺淺,只是新增了些許紙上談兵的資本。你始終是一個被帶領的人,帶領者給你定好了框架,給你定好了一條大路,然後你在他定好的道路上耍了一下滑頭,卻生出一種假象:覺得自己很厲害,很有技巧。
而你自己寫一個這樣的框架,或者去設計一個思路,去指定一個方向和路徑的話,你會發現它沒有你想象中的那麼簡單。
你是要做帶領別人的人?還是要做一個被帶領的人呢?
小結
沒有技術深度是大多程式設計師的一種常態。
並不能說這是一種壞的或者好的現象,這只是一種合理的狀態,因為很多工作,很多人從事的專案並不需要有多少技術深度。即使你有深度,你也可能發現用不上。對於大多數人,合乎理性的做法不是去追求技術深度而是夠用就可以了。
但轉到個人的話就不一樣了,在技術上你需要夠用,但是在某方面上你需要有一定的深度,以突出你自己的學習理解和運用的能力,而且這個能力是要有成功案例來背書。
特別是當你成為一個資深的工程師的時候,很多公司並不希望你還是那樣平庸,沒有深度。雖然你會納悶,我就算有深度你們也不一定用得上呀?然而到了這個級別的人需求量並不像初中級開發那麼多,公司更理性和穩妥的做法是選擇有深度的人,不是嗎?