Categories
程式開發

面試造核彈:細數那些有毒的開發崗位描述


免責申明:本文的所有觀點都是作者個人的看法。

如果你在軟件行業工作足夠長時間,就會對人們用來美化事情的“套路”有所體會。

例如,“具有軟件開發全生命週期經驗”的潛台詞就是“我們沒有完備的流程,所有的事情都很急,如果有必要,我們想把你放在哪個位置上就放在哪個位置上”。

這個問題我深有體會,因為幾年前我在招人的時候就用到了這種職位描述,覺得它聽起來很棒。巧合的是,也就是在那個時候,我發現公司裡一直很忙,需要很多“萬金油”型的“救火”工程師。

人們會花很多時間寫花哨的職位描述,或者在面試時跟你玩套路。我寫這篇文章的目的是為了確保你不會掉到這些坑里。

一份好的職位描述應該包含以下幾點:

  • 對公司業務有一個清晰簡明的總結,不使用過多的流行詞彙;
  • 對你將從事的工作有一個清晰簡明的總結,不過多使用流行詞彙;
  • 清晰合理的工作內容描述;
  • 清晰合理的崗位職責描述;
  • 不提及抽象的品質(例如幽默感、毅力、決心……)。

接下來,我們來看看那些不符合上述標準的職位描述。

反面示例1:對崗位職責要求過多

公司簡介:

納斯達克上市公司,為政府提供數字服務。

崗位主要職責:

  • 參與軟件開發生命週期的所有方面,包括服務和Web 組件設計、評審、開發、DevOps 和測試;
  • 與業務方確定需求和相應的解決方案;
  • 與技術團隊以及外部供應商和外包合作夥伴建立良好的人際關係,為客戶提供更大的價值;
  • 為現有的軟件解決方案和部署在AWS 上的基於JavaScript (NodeJS & AngularJS) 的Web 服務提供支持;
  • 具備深入研讀現有代碼庫的能力,理解其中的功能、設計並找出需要重構的地方;
  • 分享過去的經驗,並指導團隊成員改進團隊的開發紀律。

技能要求:

  • 有實際使用Node JS 開發Web 應用程序的經驗;
  • 有並行編程、異步和JavaScript 回調編程經驗;
  • 有微服務架構和REST API 開發經驗;
  • 有消息架構經驗(SQS 或RabbitMQ);
  • AWS 經驗(SQS、Lambda、EC2、ECS、API 網關、Beanstalk);
  • 使用AWS Cloudwatch 或Elasticsearch 進行集中式日誌和日誌分析;
  • NoSQL 數據庫使用經驗(MongoDB、DynamoDB);
  • 關係型數據庫(MySQL) 使用經驗;
  • 安全(OAuth 2.0)、單點登錄;
  • 測試驅動開發。

首選技能:

  • 對SPA 有很好的理解;
  • GraphQL
  • SQL 查詢和Mongo 查詢;
  • 持續集成和交付;
  • 使用Ionic Framework/React Native 開發混合移動應用;
  • API 文檔(Swagger)。

公司福利:

  • 有競爭力的薪酬計劃;
  • 醫療/ 牙科保險;
  • 股權激勵計劃;
  • 符合401k 計劃的100% 分紅;
  • 殘疾保險;
  • 人壽保險;
  • 公司健康計劃;
  • 人性化的辦公環境;
  • 帶薪假期;
  • 培訓費用報銷。

現在讓我們來仔細說道說道。

參與軟件開發生命週期的所有方面,包括服務和Web 組件設計、評審、開發、DevOps 和測試。

認真的?你要我既是一名軟件架構師、開發者,又是一名DevOps 工程師和QA 工程師,是嗎?

任何一個在公司里工作過的人都知道,SDLC 的全流程是非常複雜的。初創公司可能會要求工程師個人擁有整個流程的經驗,並身兼數職,但一家在納斯達克上市的公司並不是初創公司。

與業務方確定需求和相應的解決方案;

與技術團隊以及外部供應商和外包合作夥伴建立良好的人際關係,為客戶提供更大的價值。

除了上面的那些,你還要求我是產品負責人、合作夥伴經理和業務拓展員?

具備深入研讀現有代碼庫的能力,理解其中的功能、設計並找出需要重構的地方。

誰會喜歡去重構別人的壞代碼?

分享過去的經驗,並指導團隊成員改進團隊的開發紀律。

好吧,你還要求我是團隊負責人。

首選技能反映了職位的荒謬程度——對於開發者來說,既要專注於JavaScript 開發,又要處理AWS 服務、消息隊列和日誌/ 日誌分析機制,這似乎是一項非常艱鉅的任務。

其中有一項技能是DevOps,這些可都是全職性的工作,除非你是一個天才,幾乎什麼都懂,能在一個小時內搞定問題,才有可能勝任。

福利很有競爭力,但仍然不足以與這份地獄般的工作相匹配。其他一些公司也會提供同樣具有競爭力的福利,但他們不會要求應聘者做太多的事情。

反面示例2:我們需要有挑戰意識的工程師來完成有挑戰性的工作

工程技術、軟件工程師、入門級

必須是我國公民。這個崗位的工作地點位於需要特殊權限才能進入的位置。

基本資格:

大學軟件工程或相關學科學士學位。

我們將提供平等機會,所有符合條件的申請人,不論種族、膚色、宗教、性別、是否懷孕、性取向、性別認同、國籍、年齡、是否退伍軍人或殘疾,都將被考慮錄用。

加入我們,你的使命就是我們的使命。我們的工作需要非凡的勇氣、韌性和精準度,甚至具有危險性,提供了改變世界和拯救生命的機會。這些都是我們關心的。

作為領先的技術創新公司,我們與世界各地的合作夥伴合作,解決客戶最艱鉅的挑戰性難題。我們的員工遍布美國的多個州以及世界各地,在很多國家和地區都有我們的業務。

加入我們,你的使命就是我們的使命。我們的工作需要非凡的勇氣、韌性和精準度,甚至具有危險性,提供了改變世界和拯救生命的機會。這些都是我們關心的。

這聽起來就像是一則電視廣告,我的眼前出現了海軍陸戰隊敬禮、行進、在大雨中訓練、破壞建築物的特寫鏡頭……等等,你確定這是軟件工作崗位描述?

這確實是一則很棒的電視廣告,但如果是招聘廣告,實在糟糕透了。

招聘描述裡沒有提到任何細節,你也不知道工作內容是什麼,不知道基本要求是什麼。

聽說過“誘變誘餌”嗎?有時候,你申請的工作並不是你真正的工作內容,對於這種情況,招聘方就會這麼做。對於這樣的招聘信息,你要小心。

寫這個招聘描述的人似乎真的相信公司的使命(或者他們有一個專門的營銷部門),但他們腦子裡想的是那些對公司有同樣想法的潛在求職者或者是急需工作的人。

反面示例3:必須具備人類所有的優秀品質

我們正在尋找一個初級工程師來完成軟件/ 互聯網公司的各種技術任務。應聘者應具備較強的分析能力、求知欲、願意麵對挑戰、渴望進步並有幽默感。在5 年的時間裡,你可以在一家軟件/ 互聯網公司學到幾乎所有的東西(歡迎有抱負的初創公司創始人)。這份工作真的會讓你受益匪淺,而且在這個過程中會非常有趣!企業家精神是必需的!西裝和領帶不是必需的。

具體任務包括:

  • 軟件開發;
  • 系統管理;
  • 文檔化;
  • 客戶支持;
  • 質量保證;
  • 售前支持;
  • 任何可能出現的問題……

應聘者需要具備以下條件:

  • 計算機科學本科/ 碩士學位或同等學歷;
  • 0 到3 年工作經驗;
  • 企業家精神;
  • 很強的分析能力;
  • 優秀的溝通技巧;
  • 高質量的性格特質;
  • 高質量的源動力;
  • 願意在小公司努力工作;
  • 追求卓越,願意“盡一切努力”完成工作;
  • 渴望了解一切與軟件/ 互聯網公司有關的東西;
  • 有HTML 經驗;
  • 有C/C++、C# 或者Java 經驗;
  • 有JavaScript 經驗;
  • 了解關係數據庫;
  • 了解TCP/IP 網絡概念;
  • 進步理想主義者;
  • 相信自己可以與眾不同;
  • 謙遜,認識到理想主義/ 樂觀主義可能是就是無知/ 傲慢。

這個職位描述提的要求有點多,我自己都看笑了。

應聘者應具備較強的分析能力、求知欲、願意麵對挑戰、渴望進步並有幽默感。

“幽默感”?為什麼要幽默感? 《程序員面試金典》(Cracking the Coding Interview)這本書是教我們如何各個擊破面試題,而不是要我們去講笑話的。

幽默感是我們都想從別人身上得到的東西,比如我們的朋友、家人、同事、約會對象……但是這不應該出現在工作崗位描述中。

具體任務包括:

軟件開發;

系統管理;

文檔化;

客戶支持;

質量保證;

售前支持;

我想請你解釋一下,這是一個怎樣的初級職位?

你要招的人需要是開發人員、系統管理員、技術文檔團隊、客戶支持團隊、QA 團隊和銷售工程師。

我已经在这个行业工作了很多年,我甚至都不知道我自己是否能胜任这些工作的一半。

任何可能出現的問題……

比如?這是一個軟件工程師職位,可不是給體育酒吧招人。像這樣含糊其辭、開放式的描述沒有任何好處,因為應聘者總是希望確切地知道他們在申請怎樣的職位。

企業家精神

這個我已經看到過幾次了,它到底指的是什麼?

有的人可能會認為這是指打破常規,有的人可能會認為是毅力和決心,有的人可能會認為是思想開放和創造力……

這類與特質相關的問題在於它們是開放式的、模糊的、無用的。它們沒有任何意義,因為它們可能代表任何一種含義。每個人都希望自己是“企業家”——看看那些在LinkedIn 上把自己描述為“企業家”的人就知道了。

這對於求職者來說意味著什麼?這意味著公司對他們要找的人有明確的想法,但不知道如何清晰地向求職者傳達。

高質量的性格特質;

高質量的源動力;

願意在小公司努力工作;

追求卓越,願意“盡一切努力”完成工作;

渴望了解一切與軟件/ 互聯網公司有關的東西;

……

進步理想主義者;

相信自己可以與眾不同;

謙遜,認識到理想主義/ 樂觀主義可能是就是無知/ 傲慢。

同樣,這些特質應該是你在面試時從求職者身上評估出來的,不應該列在工作描述裡。

當然,每個人都想招到積極、有活力、正直的人。有沒有人看到這個後想:“我其實是個懶惰的混蛋,最好還是不申請這個職位了”?

“盡一切努力”究竟要多努力?需要我犧牲第一個孩子嗎?還是要我獻祭一隻山羊?

最後兩點也驚到我了。候選人必須樂觀,但又不要太樂觀……

對於合適的人來說,這種職位描述可能聽起來很有趣,很有吸引力,但從我的經驗來看,這在大多數情況下是一種危險信號。

好的職位描述

接下來,我們來看看一些好的招聘描述。

正面示例1:面面俱到

我們是一家醫療保健技術公司,利用基因信息幫助醫生和病人做出醫療決定。我們的軟件工程師從事各種各樣的項目,從醫療保健系統的創新到生物學。我們不斷改進我們的工具和技術,為患者健康提供最高質量的可操作信息。如果你想用你的知識和技能來改善數百萬人的生活,請加入我們的團隊吧。

關於我們的團隊:

我們需要具有不同背景的工程師來幫助我們完成使命——為數十億人提供遺傳信息。我們是一個跨職能團隊,由科學領域的專家和敬業又好奇的工程師組成。我們建立了一個系統,將大量的基因組數據與科學文獻結合起來,再加上多年來經過嚴格整理的成果,然後將它們打包,供我們的科學家使用。隨著數據越來越大,我們的系統需要變得更好更快。

你要做的是:

  • 根據技術和業務需求一起定義和構建新的功能或應用程序。
  • 編寫結構化、可測試、可讀和可維護的代碼。
  • 參與代碼評審,確保代碼質量。
  • 主導技術工作,滿足內部或外部客戶的需求。
  • 通過不斷學習和成長為團隊成員提供支持。

你需要具備:

  • 具備全棧架構和分佈式系統的經驗。
  • 多年後端或前端框架經驗,如Python/Django/JavaScript/React/Scala/Play。
  • 其他通用行業標準。
  • 有數據庫經驗(MySQL、PostgreSQL、NoSQL 等)。有調優和查詢優化經驗更佳。
  • 良好的溝通技巧,具有分佈式團隊工作經驗者優先。
  • 以任務為導向的心態和持續學習的願望。

我們提倡多樣性,不分種族、膚色、宗教、國籍、性別、性取向、年齡、婚姻狀況、是否退伍軍人或殘疾,為所有員工和應聘者提供平等的就業機會。

這個非常棒。有關公司和團隊的描述非常有趣,同時也提供了足夠的細節。

我們建立了一個系統,將大量的基因組數據與科學文獻結合起來,再加上多年來經過嚴格整理的成果,然後將它們打包,供我們的科學家使用。

這一句話就足以讓你了解他們可能在做的幾件事:

  • 大數據;
  • 數據處理與分析;
  • 軟件開發(顯然);
  • 學術研究或研發;
  • 有可能通過機器學習從上述數據中獲取見解。

“你要做的”和“你需要具備”非常清晰、簡潔、合理。

如果我對這個領域感興趣,我會申請這個職位的。

正面示例2:簡短明了

我們有一個測試工程師空缺職位,需要他來幫助我們改變與環境的互動方式。我們目前的工作重點是零售和商業建築應用程序,並將繼續隨著市場需求的變化而變化。

我們正從概念驗證過渡到第一次生產迭代,有很多應用程序需要開發。現在是加入一個快速成長的團隊的最佳時機,在這裡你可以發揮影響力,並與我們一起發展你的職業生涯。

我們正在構建一個獨特的微服務架構,連接雲平台和內部系統,提供各種服務,包括數據收集、機器運行狀況監控和用戶交互。

你將:

  • 負責我們的QA、測試和發布過程;
  • 建立和維護我們API、後端和硬件接口的自動化框架;
  • 定義和細化測試需求;
  • 實施持續集成;
  • 參與新服務和應用程序的計劃和執行;
  • 與我們的軟件和硬件團隊緊密合作,確保交付API 和功能。

我們的技術棧是基於可伸縮概念,包括:

  • Node.js,Go,Kubernetes,Docker;
  • Linux (Ubuntu) 命令行技能、Python。

職責描述得很清晰。雖然沒有明確列出,但可以從它們的技術棧和工作內容中推斷出來:

  • 微服務;
  • Node.js,Python和Go;
  • Kubernetes,Docker,Linux;
  • 專注於零售及商業建築領域。

正面示例3:通用接地氣

作為一名軟件工程師,你將參與創造一個直觀的產品,幫助我們的客戶建立、管理和發送他們的電子郵件。你將與一個充滿激情、多才多藝、有協作精神的團隊一起工作,在持續推動技術進步的同時,解決棘手的問題。此外,你將有機會影響和實現架構解決方案,讓我們成為世界上最值得信賴的通信平台。

我們的辦公室就是我們第二代產品的總部,也是我們的技術運維和客戶生命週期工程團隊的樞紐。

你要做什麼:

  • 傳播我們的文化價值觀;
  • 與其他團隊成員合作,包括產品團隊和API 的團隊,一起影響和改進我們的產品;
  • 使用Github、Jira 和我們的構建/ 部署系統來管理你的工作;
  • 為我們的代碼測試和產品交付提供幫助。

我們的技術棧包括:Go、AWS(DynamoDB、Lambda、EC2、Kinesis、SQS、S3)、ReactJS、Snowflake、Terraform、Redis、SolrCloud、Kafka、Riak、Docker/Kubernetes 和Linux。

關於你:

  • 一般來說,有2 到4 年的雲應用程序軟件開發經驗;
  • 擁有計算機科學學士學位;
  • 2 年以上Go 和Python 開發經驗;
  • 2 年以上HTML、CSS 開發經驗;
  • 具備大規模分佈式系統開發經驗;
  • 有使用現代JavaScript 框架開發以UI 為中心的Web 應用的經驗;
  • 積極的態度,能夠在小團隊中快速學習和完成任務;
  • 有AWS 經驗優先;
  • 了解微服務架構和雲應用。

清晰、簡明地描述了公司的業務、期望和應聘者的職責。

與前面的示例一樣,列出了技術棧,並根據職位和資歷級別列出了合理的要求。這是一個很好的職位描述。

不要止步於不好的工作

作為一個蓬勃發展的行業的候選人,你有很多選擇。世界上有很多偉大的公司,他們不僅提供了出色的職位和豐厚的福利,還有非常好的晉升和職業發展機會。

在找工作的過程中不斷磨練你的技能,看看哪些公司是垃圾公司,不要浪費了你的時間。

原文鏈接

如何從其描述中停止有毒軟件作業