如何(不要)應徵軟體工作
我審閱過大量的履歷和書面面試資料,其中很多都寫得不好。這篇文章要說明,在應徵軟體工程職位時,有幾件事千萬別做。
我在 Canonical 工作(關於我們的流程,請見我的後記),不過我相信這些建議在應徵任何公司時都適用。
以下大多是寫作方面的建議,適用於撰寫履歷、求職信,以及求職申請中其他需要文字表達的部分。事實上,我認為其中大部分也適用於任何類型的非虛構寫作。
先來設定一下情境,想想你的讀者是誰:一位忙碌的用人主管,或是一位被指派來審閱你(以及另外數百份)申請資料的工程師。他們必須在資訊有限的情況下做決定,而他們想找的是那些能脫穎而出、真正做出過東西、並且善於溝通的人。
別用 ChatGPT
我知道它只是個工具,但請先聽我說完。一開始我對「別用 ChatGPT」這個建議還加了但書:「如果要用,請小心使用」。但我現在強烈的建議是:就別用了。至少到 2023 年 9 月為止,用它只會讓你聽起來像個機器人。
當求職者剛開始(很明顯地)用 AI 來寫申請資料時,我會因為「作弊」而直接淘汰他們。後來我改變了做法:我把所有送件都當作是人寫的來評審,如果寫得不好,我就拒絕。
問題是,所有明顯使用 AI 工具的送件都很糟糕:文法或許完美無瑕,但內容極其無聊,而且幾乎沒有包含求職者自身的經驗。
我們公司有一個相當開放的問題是:「請描述你在軟體維運與營運線上服務方面的經驗」。以下是 ChatGPT 產生的典型答案:
我擁有 5 年軟體維運與管理線上服務的經驗。在過去的職務中,我在部署與維護線上服務方面扮演了關鍵角色,運用了包含 Python 與 Golang 在內的多元技術與工具。我曾成功主導部署與版本發布管理流程,導入健全的監控解決方案以確保系統健康,並有效管理事件,強調快速解決與根本原因分析。我的經驗還包括因應需求成長的可擴展性專案,以及提升系統效能的最佳化工作。
為什麼這麼糟?這是華麗、被動、卻毫無細節的空話。裡面沒有任何有趣或個人化的內容,幾乎可以套用在任何一位軟體工程師身上。
對比一下這個引人入勝、個人化的回答:
我當初是為了幫舅舅的修車廠追蹤汽車零件,才學寫程式並做了一個網站(用 PHP 和 MySQL)。我還加了一個簡單的健康檢查系統,每分鐘 ping 一次網站,出錯時就寄 email 通知我。進入第一份正職工作後不久,我就用 Ansible 和 Python 腳本自動化了許多值班流程。最近我則在一個負責三個微服務的團隊中,服務跑在用 Terraform 管理的 EKS 叢集上。我為公司建置了 Datadog 的日誌與監控系統,也是與 DevOps 團隊共同輪值的 on-call 成員之一。
具體、有吸引力,而且真實!當然還可以再改進,例如說明自動化如何幫助團隊:「這讓我們的部署時間從 2 小時縮短到 15 分鐘」。但即使如此,也已經比第一個版本好太多了。
如果你不是以英語為母語,也完全沒關係——我寧願看到帶有瑕疵、卻真實反映你經驗的文字,也不想看到完美無瑕卻空洞的文章。
更好的提示詞能讓 ChatGPT 聽起來更真實嗎?可以,更好的提示確實能改善用詞。但它不可能憑空寫出基於你個人經驗的內容。你當然可以用拼字和文法檢查工具來潤飾,但請確保那終究是你自己寫的東西。
別寫華麗的空話
別寫像上面那句那樣的話:「運用包含 Python 與 Golang 在內的多元技術與工具」。你的重點會淹沒在一堆大詞彙裡。直接說「我用過 Python 和 Go」就好——審閱者會感謝你的。
再舉一個例子,有位求職者寫了類似這樣的內容。他:
- 對 Java 有精深的掌握(他又不是James Gosling)
- 他的旅程就此展開(他又不是Bilbo Baggins)
- 他精巧地打造了程式(他又不是Stradivarius)
- 他拓展了他的專業(不只是專家,還是加長版的專家)
- 他精心打造了 Lambda 函式(我比較喜歡手工職人等級的 Lambda)
- 他善用了 Spring Boot(還是只是用了它而已?)
- 他迅速適應(這有點聽膩了)
- 他一絲不苟地閱讀文件(很好,我會聘他來當校對)
- 他擁抱物件導向程式設計(就像 90 年代的每個人一樣)
- 以及他帶來了紮實的經驗(但他帶來的是紮實的 Forth 經驗嗎?)
我懷疑這是 ChatGPT 寫的,但也不確定——也可能只是用了同義詞詞典。無論如何,請別把形容詞和副詞開到最強。
我建議拿掉那些誇張的修飾語,把上面那串改寫成這樣:
- 我有 Java 經驗
- 我開始了
- 我打造了
- 我學會了
- 我寫過 Lambda 函式
- 我用過 Spring Boot
- 我適應了
- 我讀過文件
- 我使用物件導向程式設計(或乾脆刪掉這句)
- 我累積了經驗
別光說,要展現!
這點很簡單:別告訴讀者該怎麼想你,用你做過的事來證明。前面的糟糕範例不只是華麗的空話,也是光說不練。
說「我精巧地打造了程式」是在告訴讀者該怎麼評價你;寫「我用 500 行 Java 打造了一個快速的 POSIX Make 子集」則是展現你實際做出的東西。如果是開源專案,還能附上 GitHub 連結,那就更好了。
記住,你的讀者是用人主管,他想看到的是你具體完成了什麼。
別寫得空泛
我們另一個面試問題是「你會如何為線上服務設計與實作新功能?」
很多求職者(同樣,可能藉助了 AI 工具)回答的卻像是這個問題:「教科書如何定義軟體開發生命週期」。但我們想聽的是你的經驗,用你自己的話說出技術細節。
下面這段就太空泛了:
設計與實作新軟體始於蒐集需求、撰寫規格、徵求利害關係人的回饋,然後進行高品質的實作。實作完成後,自動化測試與手動 QA 很重要。接著我們部署軟體並確保妥善監控。
試試改成這樣:
我很喜歡簡潔的規格和事前規劃。舉例來說,設計新的驗證服務時,我寫了一份 3 頁的規格,包含架構圖和 API 端點的簡要說明。在部署到正式環境前,我認為對真實伺服器做負載測試很重要,所以我建了一個類似的預備環境,來測量它能處理多少併發請求。上線後,監控至關重要:我曾使用 Datadog 以及 Prometheus 這類開源工具來偵測與診斷問題。
總之,別寫得空泛。除非你寫的是參數多型。(抱歉,忍不住開個玩笑。)
別玩流行語賓果
這點和華麗空話、內容空泛密切相關:盡量別用那些沒什麼實質意義的商業行話。我今天稍早才看到類似這樣的句子:
進行全面的資料解讀與分析,以得出可付諸行動的洞見,為客戶創造價值。
除了聽起來像影集The Office裡的反諷台詞,這句話基本上什麼都沒說。幾乎所有在電腦前工作的人都會「解讀與分析資料」,也都希望能「得出可付諸行動的洞見」來為客戶創造價值。
使用流行語在某些人聽來或許很聰明,但在我看來,那只是掩飾你其實沒說什麼的手段。
如果你是資料科學家,不妨改成這樣說:
在我於 Sunnyville Hospital 擔任資料科學家的職務中,我使用 Python 和 Pandas 分析來自醫療器材的龐大資料(每天數 GB),找出異常情況,協助醫生改善手術室的流程。
這解釋了你的職務內容,同時也說明了你所在的領域、使用的工具、你的「客戶」是誰,以及你如何幫助他們。
別忽略指示
你可能會覺得這點還需要說嗎,但有些求職者似乎不太會遵守指示。
舉例來說,如果申請表上寫著「為幫助我們減少偏見,你的書面面試應保持匿名」卻有人在開頭就寫上全名,這就不是什麼好跡象。大家都會犯錯,所以我不會只因為這樣就淘汰這些申請,但忽略指示絕對不會對你有幫助。
一些履歷小提醒
以上所有建議也都適用於履歷/CV 的撰寫。不過,針對履歷這裡還有幾個額外的提醒。
檢查你的 GitHub 個人頁面
如果你要附上 GitHub 個人頁面連結,請確保上面有像樣的專案。如果上面只有像 fork-of-popular-project-i-never-touched、random-university-assignment 和 half-baked-data-science-script 這類專案,那就乾脆別附連結。
但如果你有幾個精心整理、讓你引以為傲的專案,那就儘管附上連結吧。
展現你做過的東西
把關於 GitHub 頁面的建議再推廣一點:展現你做過的東西。這是新創公司最看重的強烈訊號之一,對已具規模的公司也同樣有效。
如果是你打造的專案,就附上它的網站或 GitHub 專案頁面。如果是對熱門開源專案的重要貢獻,用一兩句話描述,並附上你的 PR 連結。
即使是在不公開原始碼的公司,你也可以透過清楚描述你負責產品的哪些部分,來展現你的成果。例如:
在 Shopify 任職期間,我重新設計了他們的 HTML 電子郵件範本,新設計讓點擊率幾乎翻倍,從 15% 提升到 27%。
用英文(或要求的語言)撰寫
如果申請表是英文的,請確保你的履歷和求職信也是英文。我們公司以英文溝通,因此要求申請資料使用該語言,這樣所有人才能閱讀。
技能欄:別全部列上去
別在「技能」欄裡列出幾乎所有你聽過的程式語言或框架:
Skills: JavaScript, TypeScript, Node.js, React, Java, Kotlin, Python, Django, Flask, R, Rust, PHP, Perl, C/C++, Golang, C#, .NET, Bash, Powershell.
在我看來,這就像是樣樣通、樣樣鬆。我更想看到的是像這樣的寫法:
對 Python 有深厚經驗,並接觸過 C#。精通 shell scripting,且能依需求快速學習新語言。
我寫程式快 30 年了,用過十幾種語言,但在履歷上我盡量只列出關鍵的幾種:
我精通 Go、Python、C、SQL 和英語。也寫過不少 JavaScript、HTML、C++ 和 x86 組合語言。
讓履歷脫穎而出
讓你的履歷 PDF 看起來專業,但不是那種律師西裝式的專業。試著加一點好的設計感——我不是指把背景弄成粉紅加綠色,而是多用心在版面配置和字型上。
引述一位朋友的話:
別讓它看起來像一份 Word 文件。如果我看到滿滿的文字牆、黑色框線的表格、難看的字型和毫無間距的排版,很快就會覺得「這人不善於溝通」。上網搜尋「resume template」就能輕鬆找到不少不錯的範本。
我相信還有許多其他履歷技巧可以分享——如果你有建議,歡迎來信告訴我。
後記
我在 Canonical 工作,我們每個月要從數以萬計的求職申請中挑選最適合的人選。網路上對我們的面試流程有不少討論,並非都是好評。我也希望我們的聘僱流程能更簡短一些,但其中的書面面試環節(也就是大家最常抱怨的部分),我反而覺得相當有用。
有趣的是,就在我撰寫這篇文章期間,Canonical 在申請表上新增了以下聲明:
在本次申請過程中,我同意僅使用自己的文字。我理解抄襲、使用 AI 或其他生成式內容將導致我的申請被取消資格。
我認為避免使用 ChatGPT 能讓任何申請加分,但 Canonical 現在是要求你不能使用。我猜其他收到大量申請的公司也會跟進。
Canonical 的文件部門主管曾寫過一篇文章,談到我們的書面面試如何也能減少面試過程中的偏見。
我們是一家完全遠端工作的公司,因此書面溝通非常重要——評估一個人能否僅用文字清楚描述自身經驗、傳達技術想法,是不可或缺的。
是的,我們一直在徵才。
隨機一篇部落格
留言
登入後參與討論