廣受谷歌員工歡迎的 macOS 包管理器Homebrew 的開發者,技術大佬Max Howell,去谷歌面試時由于不會做一道非常基礎的算法題——翻轉二叉樹,而被谷歌拒了。

當時圈內炸了鍋,有人覺得是大佬不屑于去做,有人順帶吐槽了自己的類似經歷......

其中一位網友的評論切中要害:“大佬不會做翻轉二叉樹,但他仍然開發出了Homebrew ;你雖會做,但卻開發不來。”
至少我們能發現谷歌的這道題并沒能挖掘出大佬真正的技術實力,從招聘目標來看,其實是有些失敗的。
他承認自己當時確實不知道二叉樹,但強調了谷歌不能因此拒掉他。
雖然他不懂很多CS 理論,但他開發出了在乎用戶體驗、飽受好評的Homebrew, “真正開源世界中一顆閃亮的星”,他認為這跟CS 理論沒有半點關系。
01 為什么總出算法題?
企業為什么執著于出算法題呢?
有三方面原因:
省時省力:技術崗位的主要任務是完成工程項目,并沒有太多時間和資源來針對崗位需求來制定題目。
算法題則無需編程語言或環境的配置,甚至用白板都能直接進行考核,對企業很方便。
算法題容易評估:企業要出跟實際項目相關的題型,就需要更多的時間和資源來設計和評估,許多復雜的細節難以量化和評價。
算法題有標準答案和客觀指標,如時間/空間復雜度來直接評價候選人的水平。
企業的“保底思維”:算法題考察了程序員的基本功,像一個大漏斗,留下來的至少基本功不錯,里面可能存在合適具體崗位的人選。
但只考算法題存在著許多局限性。
02 算法題的局限
2.1 實際項目有時不需要懂太多算法
有人會說,算法考核的都是基礎,若連基礎都不會,那怎么證明他有更強的實戰能力呢?走路都不會,又怎么參加長跑比賽呢?
但算法與實際項目的關系,并非上樓梯似的遞進,而更像水分子跟水一樣的層級關系。人類真正了解水分子結構不過幾百年,但不妨礙人類一直在用水。
就像打造一個游戲引擎,需要學習很多算法,但游戲設計師使用游戲引擎來設計游戲,卻不需要懂太多算法。
其實,許多算法早已被封裝好,集成在各種工具和框架中,除非底層開發工作,比如開發新的游戲引擎,許多崗位早已不需要接觸這些算法原理了。
現實工作中,如何很好地完成業務需求,更多取決于候選人如何很好地去使用相關的工具與框架。
算法題通常是抽象、簡化、標準的,實際項目中的問題往往是具體、復雜、多變的。
招聘時的算法題,往往預先設計了一個最優解,讓候選人在限定時間內解出。
但現實中,工程問題往往不僅沒有標準答案,有時甚至連問題在哪,是否能用現有技術解決都不清楚。
比如招聘中,企業會讓候選人寫一個從A到B點的最短路徑算法。這類題目通常被精心設計,數據被構造,一定存在最優解,問題的輸入和邊界條都相對簡單和規范。
但實際的交通系統項目中,存在著擁堵、施工、事故多種路況,步行、汽車、公交多種方式、用戶隨意更改目的地,以及要實時同步交通數據,這些都是要候選人花更多精力考慮的復雜情況,而非僅需記憶類似Dijkstra 的一個算法就能搞定。
項目代碼是真實世界的,存粹的算法代碼只存在于閹割版的證明理論里。
只有理論,而無法高效實現的算法也并不少,比如Kruskal 算法很早就出現,但很久之后才找到了較好的實現方式,變得實用。
技術人才的核心價值,是用代碼實現具體的功能,而非僅懂理論概念。
但現實中復雜的項目,技術人員可以長時間溝通交流、協作,并且自行查閱資料。
隨著AI 發展,查閱理論算法知識,更是輕而易舉,記憶算法的價值大幅減弱。
這是我用AI 工具實現的“關鍵詞出現頻率統計”功能,其中涉及到了Porter Stemming和Snowball Stemming 等詞干提取的算法,而我對這些算法一無所知。

目前算法題考核招聘方式,無法還原實際場景中的資料搜索、溝通協調等相關能力。
總之,通過算法題先篩人,再進一步靠面試判斷崗位匹配度, “先篩人,后匹配”的模式,僅是旁敲側擊挖掘能力的方式。
不僅會漏掉如Howell 那種有潛力、創造力、有專長的技術大佬,也容易招到一群只會做算法題,但缺乏溝通協作、解決實際問題等擁有工程能力的人。
好比打靶并沒刻意瞄準靶心,只是先讓自己手別抖,這樣“彈孔”容易穩定地集中在某一區域,招到一群相似的“優秀”人才,但卻可能偏離崗位的“靶心”。
有沒有什么方法,能直接沖著“靶心”瞄準,反過來從崗位出發,直接招到匹配該崗位人才的方式呢?
ShowMeBug 致力于深挖技術實力,為企業找到技術崗位的最佳匹配人選,專門打造了基于崗位的“實戰題型”。
從崗位需求出發,ShowMeBug 自研能力模型,將崗位能力細化為逐條能力維度,再基于能力維度,推導出具體的技能與知識點。同時也支持企業自行調整。

這些知識點,是ShowMeBug 與各類行業大佬合作,總結大量過往實戰項目案例提煉得出。
確保了什么樣的崗位,就能明確需要什么樣能力,并出相應的題目考核這些能力,使得通過測評的的候選人完美匹配崗位的需求。
比如,除了像 Java、JavaScript、C++、Python 等考核編程語言能力的基礎編程題,也有像 Vue、SpringBoot 等,考核候選人使用前后端框架進行需求實現能力的題目。
下圖中,就是一道考察候選人“是否能夠處理耗時任務”的實戰編程題:

這道題目模擬了一個常見的場景:用戶在前端點擊按鈕后,需要優化接口,讓后端將耗時任務放入不同線程中異步執行,從而讓前端不需要等待所有任務完成才能收到響應,優化用戶體驗。
同時,ShowMeBug 題庫也支持“開卷有益”功能,企業可以在試卷設置AI 編程助手。最大限度還原候選人現實中的工作環境,考核他的實戰工作能力。

總之,企業在招聘時,可直接使用ShowMeBug 的5000+ 道題目直接進行考核,節省下大量時間與精力;
企業也可針對不同崗位,通過調整相應的能力維度、技術與知識點,來自定義想要考核的題目,滿足自身個性化的招聘需求;
“實戰題型” 的內容與AI助手,也很好地把候選人放在了真實工作環境下,去解決貼近實際項目的問題,最大限度地在屏幕前直接還原他的真實技術能力,助力企業精準擇優。