大數據文摘出品
來源:medium
編譯:Fisher
有這麼件事,相當棘手,給人壓力,有點像希臘神話裡赫拉克勒斯面對的12項艱巨考驗——通過考驗就能成為英雄,可是又有點像馬戲團裡的動物跳圈圈,沒啥意思,這個事就是面試。人人都討厭面試,但它是我們職業生涯不可避開的一部分。
當作者帶著幾分天真,第一次勇敢地參加技術面試時,沒過多久,他就覺得要在兩三個小時之內判斷一個軟體工程師的能力,準確程度跟中世紀的刑偵手段也差不多。
但是,他一直好奇,怎麼才能像桌子對面的面試官一樣,了解一個工程師是否適合某個崗位。過去幾年裡,作者作為面試官經歷了100多場軟體工程技術面試,雖然各家公司有各自流程,面試者往往會掉入一些共性的坑。如何避坑?下面是他的誠實建議。
「成功之路與失敗之路幾近相同。」
– Colin R. Davis
何謂「好的軟體工程師」,並沒有唯一的定義。它與崗位的需求有關,與公司的多元性和成熟度有關。一家初創公司無疑是要儘快讓產品進入市場,而一家更成熟的公司,在客戶群增長之後,可能需要面對的是尺度和架構上的挑戰。在理解業務的同時構建產品,這跟解決複雜的技術挑戰不是一回事。一個細節完美主義的工程師和一個快速迭代的工程師也是不同的。你需要知道公司在找什麼人,然後把自己的行為和話語框定在公司的思路裡。不要做一張通吃的簡歷,要根據實際情況進行調整。如果你必須做一個自我推銷(某種程度上,你總是要做一個自我推銷的,不管是否正式),你要展示你將能成為這個公司的有用之才。你應該了解一個崗位為何不可或缺,並問問自己這點能否激勵你,如果能,就接受它。你應該弄清楚在這家公司的語境下「好」是怎麼定義的,然後來展示你的知識、經驗和態度確實符合這個定義。
「在準備工作上的失敗,已經為失敗做了準備。」
- Benjamin Franklin
去面試卻對公司一無所知,就好像去約會卻只談論你自己,不敢說你就沒戲了,但是人家對你印象肯定不會太好。下點功夫了解公司業務,公司的宗旨、使命、戰略和成績。作者表示自己不會因為面試者對此一無所知就把他掛掉,但這點反映出他的動機不足。這也是HR評估面試者的一個標準依據。在業務目標之外,如果公司有技術博客那一定要查看,了解他們的技術棧。面試者並不經常表現出對公司的足夠興趣,但如果他們這麼做,就是脫穎而出的絕佳方式。
「受過教育的頭腦的一個標誌是,能夠審視一個想法而非徑直接受它。」
- Aristotle
在職業生涯中作者曾遇到過傑出的技術專家,這些人個性都不一樣,但至少有一點是他們共同具備的:他們是那種挑戰現狀,使工藝和技術得到改進的人。很多應聘者在被問到是否有問題時,都說沒有要問的。不去提問等於是浪費機會,應該抓住這個時機,問一下公司做出的技術決策和面臨的挑戰,討論一下各項技術的利弊。
例如:
他們是否在考慮轉向HTTP/3了?
他們是否正在轉向事件驅動的微服務架構?他們在使用什麼樣的消息代理?為什麼不使用 Kafka來替代RabbitMQ?
他們使用的是什麼資料庫技術?用例是什麼?在該用例中,ElasticSearch是否是SQL的良好替代品?
等等。對技術決策的問詢將表明,你不僅了解這些技術、可以論證何時該使用這些技術,而且可以批判性地思考,並且你很在乎改進你工作中所用的應用程式。
再多的實驗也不能證明我就是對的,但只要一個實驗就能證明我是錯的。
- Albert Einstein
當前的技術面試不近人情,存在著相當直接的不公,足以令人震驚。大多數面試裡都有跟計算機科學基礎相關的算法問題,比如圖搜索或排序算法。作者聽說過一個傳聞,一個應聘者被要求以最小的資源來實現一個tree transversal算法,所以當他得到這份工作時,首先要做的是調試一個十年前的單片機。經歷過應聘者和面試官的雙重角色之後,作者覺得這種自命不凡的試圖美化我們工作複雜性的做法令人沮喪。這樣的挑戰很可能會讓對這些概念已經因長久不用而生疏的高級開發人員望而卻步,儘管他們可能在這個崗位上擁有極豐富的經驗。
作者同意這類練習並非完全無用;快速解決小問題的能力與解決跨度數天的複雜問題的能力是相關的,但兩者有本質區別。面試過程應該儘可能地反映日常工作的實際情況。他覺得有些方式比刁鑽的算法問題要合適得多,比如在真實的應用程式上尋找和修補bug,結對編程,或者實現一個自動化測試。對於這類場景,面試者一定要對公司選擇的程式語言能得心應手,不要害怕提問,以理解任務的全貌。
不過,在大多數面試裡,你都會面對一些算法或數據結構的問題,這個沒辦法繞過,你得有良好的計算機科學基礎知識。像《Cracking the coding interview》這本書、Leetcode或者Pramp等等都是不錯的參考資源。
無論碰到哪種問題,一定要把你的思路大聲說出來。通常情況下,問題都是層層疊加的,只要你能出色地解決剩下的問題,哪怕是中間有一步失敗了也沒關係。如果你卡住了,面試官會幫助你。對面試官來說,關鍵是看應聘者能否在經歷一個不熟悉的題目後恢復狀態,做好接下來的題目。另外,有經驗的面試官可能會在你解題吃力的時候,由提問題改為教你怎麼做,不要把這種改變理解為失敗,這種情境變化有助於大多數人跳出解題中的困境。
面試官這麼做是為了幫助你,並在幫助的同時評估你,而不是一上來就評判你。把他看成一個正在指導你解決問題的老同事,跟他討論解決問題的不同方案和其間權衡,這將展示你對問題的了解程度。
成功就是爬起來的次數比跌倒的次數多了一次。
- Oliver Goldsmith
作者曾經見過一個應聘者,在面試的時候很是戰戰兢兢,缺乏信心。儘管他缺乏自信,總是懷疑自己,但他問題解決得很好,所以還是被錄用了。但是安頓下來之後,在日常工作中他非常自信,能夠引領討論,在技術課題上指導團隊。後來作者問他,怎麼在面試的時候心態這麼差?他解釋說,他有過一連串災難性的面試,當時面對可能的被拒,心態不是太好。被拒是面試的一部分,不要讓它掌控你。
用幾個小時來評估與軟體工程師相關的全部各項能力,本來就不可能。所以每個面試都會選擇公司關心的能力,用儘可能好的方式來評估。面試官選的可能是你擅長的,也可能不是。
糟糕的僱員對公司來說是棘手的,尤其是他們所在團隊的士氣會受影響,同時人力成本也很高。再加上很多公司沒有一個標準化的流程(重要的是比較候選人,所以每個面試官應該給出同樣的題目,同時應該有一個規定流程,每個面試官都走這個流程),你會遇到相當比例的假否定。也就是說,面試結果不好,並不意味著你很差。而是意味著你所表現的能力在那個特定時間裡、特定流程下不是最好的。
作者稱,如果自己面試失敗了,然後讀到或聽到上面的話,肯定也覺得這都是扯淡。在生活中,他一直試圖成為一名拳手。有一些時候,他輸的太多,一個總輸的拳手,充其量就是個沙袋。然而,有時你必須找到內在的力量,把自己從躺倒的廢墟中拖出來。站起來,舉起手來,再打一次,不要讓失敗掌控你。
「工作會填充你生活中的一大部分,要想讓自己真正滿意,唯一的方式就是去做你認為偉大的工作。要做偉大的工作,唯一的方式就是熱愛你所做的事情。如果你還沒找到,那就繼續找,別停下。跟隨自己的本心,在找到的那一刻,你會知道自己找到了。」
- Steve Jobs
當我們在日常生活的困惑和混亂中前進時,我們渴求那些清晰的時刻:在挑戰或任務當中達到完全的忘我,時間彎曲,現實消隱。在這些非凡的超越時刻,好像整個一生都會在不經意間流逝。這就是編程對我們許多人所具有的意義,那是刻在我們內心深處的永恆而堅定的激情。同樣的激情,也是成功的秘訣。
作者見過一些應聘者在面試過程中表現出色,但被錄用之後卻表現平平。他們並不差,他們有天賦,也懂行,但他們的表現只是平平。有時候,你擅長的事情並不是你真正喜愛的,但唯有激情才會促使你成功。要評價一個軟體工程師是否有激情並不容易。但如果他問你做過什麼業餘項目,或者你做過的最好的項目是什麼,你可能會熱烈地討論若干項目,花上整整一個下午。不管你的項目是一個百萬用戶級的平臺,還是一個勉強運行的業餘項目,這都不重要。一個充滿激情的程式設計師會熱情洋溢地描述他用到的每一個方案,完成的每一次挑戰,甚至是每一次搞砸和失敗,帶著喜悅和懷念。然後,任何一個面試官都會知道,對面的人和他一樣,是一個對寫代碼充滿無可救藥的激情的程式設計師,同道中人。
這是一種非常真實的反應,你幾乎可以從他們的眼睛和肢體語言中看出來。要麼充滿激情,要麼沒有。如果你屬於前者,一定要談那些打動你的項目,這將區別一場平淡的面試和一場出色的面試。
作者一直覺得,作為應聘者的壓力就是知道自己需要得到這份工作,需要證明自己足夠優秀。面試官的角色並不是完全沒有壓力,面試官要確定有充分理由認可或者拒絕一個人。這樣,做的決定才經得起審核。對他來說,一直如此,對得起我的良心。
大多數面試官都要在某些時候被別人面試,所以他們是通情達理的。作者希望從面試官的角度幫到大家,真誠地希望這些建議能助你獲得心儀的工作。
相關報導:
https://medium.com/swlh/my-advice-after-interviewing-100-software-engineers-e34bc3cbc669實習/全職編輯記者招聘ing
加入我們,親身體驗一家專業科技媒體採寫的每個細節,在最有前景的行業,和一群遍布全球最優秀的人一起成長。坐標北京·清華東門,在大數據文摘主頁對話頁回復「招聘」了解詳情。簡歷請直接發送至zz@bigdatadigest.cn