前言
從實習一年、正式工作三年,從一般的軟體工程職位軟體工程師 II (Software Enginner II) 開始爬,一年後升到資深工程師 (Senior Software Engineer),第三年升到首席工程師 (Principal Software Engineer),依照正常流程,這樣的躍遷是快的。
在薪水上可能會有點失望,必須了解到能力好與不好之間並沒有太大的差別,也就是說薪水不會有 30% 的差異,同時職位之間的差別也不到 20%。但工作量卻顯著地增加,這社會相當奇怪,這也難怪很多高科技的高手最後反而會想離開大公司的體制,自行創業或者轉行都是會發生的狀況。
從成功嶺出獄的第一天上班,頂著小平頭也參與面試流程,從那開始三年間面試了不少人,也與一些身歷百戰的朋友聊了一下狀況,而我卻沒站在白板上參與真的面試,大部分都是工作直接來找,看到需要繁瑣面試的公司都想直接忽略,畢竟身為一個偏科生,肯定是會被刷掉的,要找通才去找血統純正的學歷吧。
面試狀況
電話面試
最近受到疫情影響,會盡量先以 電話面試 為第一關,通常會從簡單的問答看出端倪,如基礎的時間複雜度分析、程式架構、開發經歷上著手提問。有時會配上線上共享文件撰寫簡單的程式,這對刷 leetcode 準備面試的人都不算難。
通常用解說定義為主,或者可以分享一些使用經驗,對於模糊不清的項目直接表達說知道但是不熟悉,一旦描述錯誤或者是甚至在使用完全錯誤的方向,就會凸顯沒有仔細了解,在錯誤理解下又有大量的錯誤衍生,下場就會非常慘。
雷點如下:
- 不知道二元樹的定義 (到底是怎麼碩班畢業的?)
- 不知道遞迴的實際流程 (到底是怎麼大學畢業的?)
- 要求指定語言的工作條件,卻不知物件導向 (可以不滿足所有應徵條件,但請理解每一項大概是什麼內容再來。)
自我介紹
通過第一階段後,很多人就會來到這個環節,通常要準備三十分鐘自我介紹,我比較喜歡稱作武力展示,但不是像相親那樣的自我介紹,如學歷、出生年月、興趣嗜好都不需要。如果早已遞交履歷,那些訊息不需要提第二次,這些口頭描述就像流水帳,聽起來也很無趣。
對於碩博剛畢業的人而言,大部分都直接拿論文出來講,對於程式能力比較吃重的職位,偏好程度很低,實在是不想當論文口委,畢竟研究領域差太遠,也不能驗證對錯與否。如果用口述方式表達,專有名詞與公式都也無法理解是否具有該實力。
從以前讀過碩班的經驗,很多碩士都是老師放水過關的,也有可能完全不需要寫程式的經驗也能畢業。對於那些跨科系的碩士及學碩學歷差異大的,都需配上其他的實務經驗,才能讓面試官比較有信心。
履歷部分請參考相關文章
- 《How the HR department and a programmer reads your resume?》 — roga’s blog
- 《HR 和程式設計師怎麼看你的履歷?》 — Heresy’s Space
在過程中的確有幾個實際發生的項目
- 博士學位的面試者容易遇到本公司可能無法讓你發展所才,請另尋他路的勸導
- 原本想要的,但實在是太高學歷了。
- 以 Microsoft Office Word/Excel 出現在技巧描述中
- 因為大部分的工作工作都是之後再學,像這種被 GUI 固化的工具,很難拓展。
- 只有在課堂上寫過程式,完全沒有課堂以外的程式項目或參與專案
- 課堂以內是可接受的,但需要體現足夠自我挖掘與學習能力
- 履歷上的縮排混雜著空白字元和跳脫字元
- 若採用中文履歷,可參閱 github/中文文案排版指北
- 體現細心與自我要求的程度,通常會視為考量部分。
在其他未提及和重點項目,
- 履歷鏈結中出現
?fbclid=XXX
,作為一個從事資訊行業的人會直接出局。 - 強調的內容卻用淡色系的文字或其他方式呈現,脫離一般的思考模式。
- 個人網站
- 能提高具有該實力的證明。
- 展示出資訊整合的高度能力就是寫作,也可以從中看出溝通能力。
- 因分享教學是最好的學習,請參閱「費曼學習法」。
- github/bitbucket 等代碼託管帳號
- 自行開發的項目架構一覽無遺,直接進行武力展示。
- 參與的開放項目,展現其求知慾與發現問題並解決的能力。
- 參與的專案討論,展現其挖掘與辯論分析的能力。
在過程中可以透過白板直接介紹,也可以純口頭表達,亦可以採用簡報的方式,手法不受任何限制,但盡量貼合目標工作內容所需要的技能或是該公司缺少的項目為主軸。千萬別忘記體現自己所做過,拉回自己擅長的領域。
有時面試官突然問個太細節的問題,則需要準備概要和講給不同領域的人能理解的一句話,否則將容易錯失表現機會。畢竟那些項目細節上網搜尋即可,就像論文描述幾十頁,而摘要卻只有幾百個字一樣,唯有充分理解的人,才能做到的能力。千萬別花半個小時去描述需要解決的問題定義,適可而止!
筆試
好的公司是不會有筆試的。若有,則筆試應該只是參考依據。對沒有推薦人或認識的狀況下,筆試都是從嚴審核。反之,就不會佔有太大的比重。
不同類型的公司對筆試的考核方式皆不同。
對於著重實作細節的公司,如指定語言下的語法考試,甚至有一些未定義行為 (undefined behavior) 的項目需要注意,有的還會考以前大學教科書上附錄不想見的問題。這類型因為工作環境和需求,可能會讓新人非常受挫,對於新人的要求會比較高,才剛畢業的人通常要具備在沒有搜尋資源下,也能略知一二的能力。
對於跨領域的公司,會有一些其他領域題型,具有博學能力的人就會特別被選拔出來。像我們 EDA 公司,就有機會看到電子電路的題目,實際上答不出來也很正常,不用太沮喪,導致下一個階段表現不好。
對於應用方面,題目描述的手法也不一定像學校所學的非一即二的要求。若看到含糊不清的描述,那表示接下來的工作環境就是那種含糊不清的需求,則在答題上要自己以自身經驗去約束和討論問題,才能符合需求,原則上是以申論題的模式作答。
雷點如下:
- 沒有檢查輸入、輸出的定義
- 那個不是已知的條件,不能假設,常理上是絕對不行的啦。
- 不完整的程式片段
- 到底要回傳什麼,記得寫。
- 不完整的上下文描述
- 沒有計算過程的答案
- 直接迸出一個數值。如果答錯,是完全沒有轉圜的餘地的。畢竟不知道你是不是費馬,還是把過程列出來吧。
- 全然忘卻高中數學
- 如為什麼 $\sin \theta$ 是 $\frac{a}{c}$
- 相關題目的邏輯矛盾
- 如在前一題答說 A 是缺點,卻在下一題答 A 是優點
- 履歷中有提及此項目,卻無法以此作答
- 履歷上的項目看起來只是掛名的對吧?像是上百人團隊的工作項目。
- 論述內容呈現大學必修科目沒有學好
- 如說雜湊的整體空間複雜度是 $\mathcal{O}(1)$
- 在行為準則考題中,連演都不演的真性格
- Q: 能不能與同事合作 A: 完全無法
同時,在撰寫的代碼中很容易展現出經驗差距,容易出錯的寫法雖然沒錯,卻間接告訴面試官有經驗不足的缺點。
白板題
解決只刷 leetcode 的假工程師的回合 (與考驗同事的時候)。
每題作答 30 分鐘,採用白板討論構思方向與實作細節。通常考三題,答題過快會有第四個防破台題目出現,題目對於以前打比賽的都是水題,基本上都會在十分鐘內解決。
類型通常都是教科書上每一章節的經典算法,答不出來或者構思錯誤,多半都會被刷掉。即使答出來,討論實務經驗時,也會從中觀察出是否有足夠的學習基礎,以及對所學的概念應用的能力。那些培訓班出來的假高手通常會在變化題型受挫,分析相關問題時無法應答,及缺少實務相關經驗。
後話
不太選用從短程培訓班出來的,風險相當大,因為太多沒有實戰或者過時技術的老師在外頭開補習班。試想過,為什麼能力好卻不從事開發工作,卻跑來當老師的原因嗎?再者,程式補習班老師多半沒有學過教育學程,跟教授一樣不需要,那麼教學品質很難有所保證。
現在又有大學入學程式考試 APCS (Advanced Placement Computer Science),自稱老師的越來越多,家長又瘋狂地看著老師的名號去選擇,而不知道科技業每一個職位與工作時間是有很大的差異,就像工作沒幾年就轉戰的 youtuber ,的確是高學歷也很聰明,但對於整體知識的養成與發展概念,通常都還沒沒達到融會貫通,只有問 A 答 B 的快速反應,缺少對 A 的定義及其他種非正規的可應用解的能力。
如何了解、觀察、解決、應用問題,適當地啟蒙學生才是老師要引導的。若像大學教授一樣教學生,九成的大學生畢業之後都不到八成內容。只是要知道問題的解決方法,可能還贏不了 Google,看看複製貼上的工程師就明白了。
有一些認識的學長,也開始從事家教和補習班老師,希望能遏止這種劣質的教學環境,就看看近期有沒有發展吧。
藉此,了解到不少學校的學生都找家教當槍手,學歷似乎也不能證明任何能力,家長資助和選對槍手才是當代的生存之道。面對欺瞞的文化,不行就說不行,請不要裝作很行,在面試過程中試出來,公司可是會記錄評價的。