來源: Medium (by Try Chen)
最近,我招聘一個內核工程師的職位,幾十個人過來面試。這些應聘者都來自優秀的大公司,不是開發晶片的,就是開發內生的操作系統的。其中有些人聲稱自己在內核上開發的時間至少 10 年!他們的簡歷美輪美奐,各種完成的項目、各種獲得的褒獎。
但是絕大多數人都無法回答一個最基本的問題:當我們調用一個標準內存分配函數時,在內核中會發生什麼?
別驚訝。當我請其中一位應聘者寫一個簡單的,基於在 glib 庫中 hash 函數上搭建的 LRU 緩衝框架時,他表示壓根沒用過 glib。這也正是我想要的答案。我給他看了 glib hash 的 api 頁面,同時非常詳細的給他介紹了 API。之後一個小時過去了,他所能給我的,僅僅是寥寥草草的幾行亂七八糟的程式碼而已。
我不知道這種情況是不是適用於其他國家,但是在中國,或者準確點兒來說在北京,這就是現實。所謂的「高級」工程師,那些多年在大型的,有名氣的外國公司供職的工程師,甚至無法在最簡單、基礎的問題上證明自己的能力。
- 為什麼會這樣?
我越想,越覺得原因並非簡單歸咎於他們自身,還和他們供職的公司有關。這些公司經常備好了一套程式碼,好幾年沒有重大調整。與這套程式碼相關的技術已經形成了框架,人們的技術就在這框架中,遵循既有的路徑走就好了,而創新精神就在這個過程中消失殆盡。
如果你在很長時間內就跟這一種程式碼打交道,並沒有將觸角伸向外面的世界,很快你就會發現自己置於悲慘境地。在公司或者團隊裡,你被尊稱為「專家」,但很不幸的在這個市場上你將無法找到一份勝任的工作。
這就是所謂的「專家陷阱」。日復一日,我們工程師都夢想成為公司或者團隊裡的行家。但是,等這一天真的來到時,我們自陷囹圄、固步自封。逐漸的,我們無法從無到有的憑藉自己的能力,開發出一套完整的項目。
因為擺在眼前的程式碼實在太穩定了(不僅全面而且還帶來真金白銀)。更糟糕的是,如果我們的主要工作僅僅是保證現有的程式碼更好的存在下去,沒有任何大的變動,那麼過上一段時間,不管我們研究閱讀了多少的程式碼,最終我們沒辦法寫程式碼了,即使問題像學生作業一樣簡單。
這就是工程師困境,我們以寫程式碼賴以為生,但是到最後,我們所供職的公司卻讓我們丟了謀生的手段。
- 如何逃離困境?
對於個人來說—
首先,做你自己的項目,你必須持續不斷的打磨自己的能力。如果工作本身無法幫你做到這點,那麼就在業餘時間選擇你想要攻克的難題。這樣做很快你能學到新的東西。如果你發布了個人的作品,比如在 github,很有可能你能遇到一些人,他們能把你從現如今的泥潭中拔出來。
另外,不要在同樣一個團隊待超過 2 年時間。即便還是待在一個公司,逼著自己不斷的轉調職位,你會遇見新的挑戰、學習到新的技術。每 18 個月走出去面試一次,你其實不需要跳槽,只是看看你與這個市場的結合能力是否如以往那樣緊密。
對於團隊和公司來說—
給你的僱員以挑戰和壓力。讓內部職位不斷調換,讓所謂的「專家們」有機會豐富自己的技能,開發新的項目,讓「武士」在「實戰」中強大起來。
定期舉行駭客松,這有助於培養創新的氛圍。人們將相互你追我趕,那時候肯定有人在心裡說:「我靠,那個混蛋竟然在 24 小時內寫出如此漂亮的程式碼,我必須努力了!」
- 延伸閱讀
你自己選吧:當工程師不需數學好,但神級工程師的數學都很好
神級 Coder 絕不犯的錯誤:為炫耀編出超短碼
想成為神級程式設計師,先練寫作讓思考更上一層樓吧
真正「神級」程式設計師的 7 項特質 — 都與技術無關!
Google 員工現身解惑:想成為 Google 軟體工程師,你需要準備什麼?