作者 | Karl Hughes
譯者 | 冬雨
策劃 | 蔡芳芳
很多學過、做過軟體開發的人不想再從事軟體開發工作,這篇文章將向軟體開發人員介紹許多可行的職業道路。我會解釋每一份工作是做什麼的,你可以怎樣跨入這一職業的大門,你已經掌握的開發技能和知識在其中能夠發揮什麼優勢,以及這些工作的長期前景。
本文最初發布於 freeCodeCamp.org,經原作者及網站授權由 InfoQ 中文站翻譯並分享。
在過去的五年裡,我做過幾十次客座演講。大家總會問到這幾個問題:「我接下來應該學哪種語言?」、「如何準備技術面試?」、「你們招人嗎?」
但是當時有一個問題我一直無法給出很好的答案,那就是,「如果我不想當個開發人員去編寫軟體,那麼該何去何從呢?」
最近,我一直在思考這個問題。在帶過近十年的產品和工程團隊後,我意識到自己已經做好了迎接新挑戰的準備,於是今年夏天,我開始進行自由的技術寫作。
當我籤下第一個客戶時,還沒覺得技術寫作可以像許多職業道路一樣成為前軟體工程師的新職業,但沒過多久我就意識到了這確實是可能的。
軟體開發人員還能做什麼?
這一發現令我陷入沉思:「除了寫軟體,軟體工程師還能做什麼?」答案之多令人咋舌。
這篇文章將向軟體開發人員介紹許多可行的職業道路。我會解釋每一份工作是做什麼的,你可以如何邁入這一職業的大門,以及從長遠來看前景如何。
不管你是因為沒有找到合適的軟體工程師工作,還是因為你意識到軟體開發不適合你,正在尋找另一條職業道路,這個指南都會幫你依據自己的能力找到合適的職業。
面向客戶的崗位
人際交往能力是一項軟技能,很多職業都能從中受益,軟體工程師也不例外。但有很多軟體工程師並不甘於此,我採訪過的一些人不希望整天靜靜地坐在那裡寫代碼。如果你希望你的職業道路有更多的機會與人交流,可能以下工作會適合你。
開發者關係,宣傳,或傳道
現在越來越多的公司在努力建立與開發人員的關係,開發人員就是他們的客戶、用戶或擁護者,開發者關係領域也因之迅速發展。
開發者關係專家(一些公司稱他們為開發人員提倡者、開發人員傳道者、社區經理或「DevRels」)負責幫助建立一個以公司軟體為中心的社區。
他們經常參與開發應用程式 Demo、撰寫博客文章、在會議上發言,以及管理科技公司的社交媒體帳戶。許多知名科技公司(如 Facebook、谷歌、亞馬遜等)都聘請了開發者關係專家團隊。
如果你對這個領域感興趣,可以了解一下 Mary Thengvall 和 PJ Hagerty 現在正在做什麼。他們是這個領域中我最喜歡的兩個人,具有很高的影響力,一起推出了社區脈搏播客。
開發者營銷
雖然這一工作與開發者關係有一些重疊,但相比而言開發者營銷更側重於對外。
針對開發者進行營銷特別棘手,因為我們不喜歡人家給我們「賣」東西,所以許多較激進的營銷策略在其他市場或許有效,但在這裡卻成了禁忌。作為一個有技術背景的人,你自然更理解開發人員的思維方式,會比傳統的營銷人員有更大的優勢。
SlashData 發布了很多關於開發者營銷的內容,包括在 2018 年就這一主題出版的一本書。如果你想在這個領域起步,可以學習一下網絡營銷:SEO、社交媒體、內容營銷、影響者營銷,等等。你可以在你的博客上練習這些技能,在應聘崗位之前先把自己的能力展示出來。
銷售工程師
許多工程師對任何標有「銷售」字樣的工作都不感興趣,但那只是因為我們遇到過的都是些糟糕的銷售人員。
其實,每個人都在做銷售。無論你是在面試過程中身為求職者「推銷」自己,還是鼓吹你的工程團隊採用的新框架,這些都是在做銷售。銷售,就是用恰當的解決方案去滿足客戶的需求。
在一定程度上,擁有一些技術專長的銷售工程師會很獨特。對於那些不想整天寫代碼但又了解軟體工程的開發人員來說,這是一個很不錯的選擇。
從事銷售的另一個好處是你不需要任何專業認證。Hubspot 做了一份很不錯的簡介,裡面介紹了一些技能和資源,你可以據此進行入門學習。由于越來越多的公司在圍繞工程師開發軟體工具和服務,使銷售工程師在未來十年可能會變得更加搶手。
技術招聘
還有一份職業在軟體工程師中的口碑也不太好,那就是技術招聘。
我遇到過一些誠實、真誠的技術招聘人員(例如,來自我的家鄉芝加哥的 Taylor Dorsett 和 Matt Hoffman),但我也遇到過一些糟糕、無知的招聘人員,他們只是專注於為完成指標而去篩選候選人。
好消息是,具備軟體開發背景的你,會比其他技術招聘人員更有同理心和可信度。和銷售一樣,這個行業需要更外向、注重人際關係的個性,而不需要專門的證書或課程。
壞消息是,許多技術招聘的入門級職位都是在一些低端公司,所以在求職之前一定要先在網上查查他們的聲譽。
面向產品的崗位
如果你想繼續留在產品團隊,但又不確定是否想成為一名軟體開發人員,那麼也有許多領域可以考慮。這些角色在工作中需要與工程師緊密協作,所以你的編碼知識會有所幫助,但這些崗位也需要具備一些其他的專業知識。
質量保證或測試工程師
雖然質量保證和測試工程師之間存在著細微的差別,但他們的共同點都是在軟體上線之前從事測試工作。
如果你眼尖心細,喜歡想些創造性的方法來自動化重複的工作,這可能是一條很好的職業道路。它可能需要一些編碼以及一些手工測試工作。
規模較小的公司一般會讓他們的軟體工程師彼此之間互測,所以基本上都是在大公司中才能見到專門的測試和 QA 崗位。公司進行測試的方式有很大的差異,所以一定要問問他們使用的工具,他們的測試的自動化程度,以及你的崗位需要做多少手工測試和自動化測試。
業務分析師
產品開發生命周期的另一個端點是業務分析師。它們通常充當業務團隊和技術團隊之間的橋梁,以確保需求、限制和時間安排得到充分理解。取決於團隊的結構,他們還有可能參與一些測試和質量保證,因此他們需要具備豐富的產品知識。
如果你具有業務、產品開發或設計方面的背景和一些編碼技能,你就可以勝任初級業務分析師的角色。如果還不具備這些條件,我建議你去找一些在線課程來幫助你對這個角色有一個大概的了解,知道它的崗位基本需求是什麼。
項目經理
與業務分析師一樣,項目經理必須了解產品的業務需求和技術約束。
它們的關鍵區別在於,項目經理通常會深入參與到某個項目中。他們經常為該項目的團隊定義任務和資源,在項目臨近發布日期時跟蹤項目的進展。
較小的公司可能會以各種方式合併業務分析師、項目經理、Scrum Master 和產品經理的角色,而較大的公司可能會單獨定義各自的崗位職責。
作為一名項目經理,優秀的組織能力、對業務的理解和人際交往能力是其取得成功的關鍵。在這個職位上,要具備管理期望的能力,並且,能夠激勵那些可能比你更資深或更有經驗的人,所以你必須與他們迅速建立起彼此信任的關係。這個角色的多面性使得它非常適合那些不想再寫代碼的分析型、技術型人員。
Scrum Master
在敏捷團隊中,Scrum Master 幫助確保每個人都了解並認同 Scrum 理論、最佳實踐和規則。
看起來這很像是項目管理,但需要特別注意的是,它是為其他構建產品的團隊提供服務的。與上述很多角色一樣,這個崗位不一定總是只負責這些工作,可能還要肩負其他的職責,但在較大的組織中,可能會設有專崗。
管理期望和約束的能力對能否成為一名成功的 Scrum 管理員至關重要。你還需要了解敏捷的最佳實踐,因此我建議你就這一主題找一些合適你自己的課程或書籍。在各種規模的組織中,敏捷已經得到了廣泛的採用,因此在未來的十年中,這條職業道路可能會繼續發展下去。
產品經理
我在 2019 年花了很多時間學習產品管理,以改善我們在 Graide 網絡的產品交付流程。產品經理從整體上看公司的產品,以確保它們是符合預期的(客戶想要的),在商業上是可行的(有商業意義的),在技術上也是可行的(我們能做得出來)。像這樣能在高層次上思考的能力是很稀缺的,所以如果你擁有這樣的能力和一些技術背景,可能會成為一名出色的產品經理。
初級產品經理可以從產品中比較小的組件開始入手,或者先來噹噹項目經理。這可以讓你對產品開發有一個初步的了解,並在被委派管理你自己的產品之前,幫你與所有必要的利益相關者打好關係。
設計師
如果你有設計或藝術背景,可以考慮當一名具有編程能力的 UI 或 UX 設計師,這是一個令你在這一領域脫穎而出的好方法。綜合運用這些技能將使你能夠更有效地與工程師交流,使用 HTML/CSS 創建交互式模型,而不僅僅是靜態圖像文件。
如果你在設計方面沒有太多經驗,那就上上課,動手做一個作品集。許多公司也會僱傭沒有相關學位的人,只要他們能展示出自己的知識和技能。在我見過的作品集平臺中,最常用的是 Dribbble,當然,你也可以選擇使用自己的網站。
無代碼或低代碼開發人員
在過去的幾年裡,無代碼和低代碼開發工具的激增使一些公司可以無需僱傭開發團隊即可快速構建軟體。這些工具可以讓你在數小時內就能創建一款移動或網絡應用程式,而不必再花費數周的時間。而且,它們每年都在進步,越來越多的公司開始擁抱無代碼應用程式。
Makerpad 和 No Code Jobs 是嘗試入手這類工作的不錯選擇。因為這是一個新的領域,你會發現它有著各種不同的技能要求和工資標準,但你會寫代碼的背景毫無疑問會是一個競爭優勢。
支持類角色
其實,要保持伺服器、網站和運維的順暢運行需要許多員工的幫助,很多新入行的軟體工程師都不知道這些幕後的角色。其中一些角色需要編寫自動化腳本,或者對伺服器管理有深入的了解,但是如果你正在尋找傳統產品開發周期之外且又偏技術型的崗位,那麼這些角色可能非常適合。
系統管理員或 DevOps 工程師
大型軟體公司每年都有成百上千臺伺服器需要打補丁、升級和輪換使用。雖然雲計算的廣泛採用改變了這項工作,將它從物理插拔伺服器變成了與 Terraform 和 Kubernetes 這樣的軟體打交道,但這個領域仍有大量的工作要做。
傳統上,系統管理員負責根據工程團隊的需要維護和管理伺服器。隨著組織的發展,伺服器遷移到雲上託管,許多組織都採用了 DevOps 工程師這個頭銜,表示提升了這個過程中的自動化程度。實際上,兩個角色之間有很多的重疊。
無論是其中哪一個,你都需要對作業系統、託管平臺、自動化工具、bash 腳本和系統架構有基本的了解。想在這個領域找到入門級的工作是很困難的,因為它需要大量的技術知識儲備,但是如果你喜歡不藉助於 UI/UX 來解決工程問題,這是一個很好的過渡角色。
資料庫管理員
一些公司將資料庫管理員與系統管理員混為一談,但其實它們屬於不同的角色。
資料庫管理員處理底層數據存儲系統的安全性、供應、擴展和優化。如果從事這一崗位,你需要具備 SQL 和 NoSQL 資料庫的知識、安全最佳實踐以及一些基本的腳本技能,但整天都去編寫代碼的可能性不大。你還需要關注一些非常小的優化問題,比如調整索引和緩存。
如果你是軟體開發方面的新手,那麼入門的時候請儘可能學習資料庫方面的知識。你需要知道哪款資料庫適用於哪類應用程式,以及如何對每個資料庫進行大規模優化,因此你靠自己一個人是很難做到的。如果你想找一些大型數據集來使用,可以到 Kaggle 看一看。
網站可靠性工程師
網站可靠性工程師負責解決生產環境中出現的致命問題。這通常意味著他們必須輪流值班,以便時時有人待命以便能「隨叫隨到」,所以你的工作時間可能會與大家有點不同。積極的一面是,你將真的能夠擅長解決各種不同尋常的問題、編制自動預警和看懂伺服器日誌。
由於網站可靠性的工作要求隨時立即做出響應,所以很難做到讓富有經驗的軟體工程師長期擔任此類崗位。也就是說,如果你在尋求第一份軟體開發的工作時遇到困難,那麼它可能是你入行的不錯選擇。你甚至可能會發現自己喜歡上這種快速解決問題的挑戰,喜歡上這種刺激的感覺。
技術或客戶支持
雖然有些工程師害怕與客戶打交道,但也有一些工程師覺得整天幫助人們解決問題能讓他們活力滿滿。在軟體公司中,你的編碼經驗將使你成為客戶支持這一職位的理想人選,這些公司需要有技術背景的人來回答問題並提出解決方案。
在支持團隊工作的缺點是,你可能不得不在人家最不爽的時候與人家打交道。心懷不滿、滿腹怨氣的用戶可能不願意與技術支持團隊交流,因此你需要極大的耐心和極厚的臉皮才能長期擔任這個角色。教學與寫作類角色
我一直都很喜歡教學,所以我很喜歡那些讓自己有機會去做這件事的工作崗位。如果你喜歡把複雜的話題拆解簡化並介紹給其他工程師,那麼下面幾條職業道路可能會適合你。
技術寫手
我在大學的第三個實習工作是在一家大公司做技術寫手。這是一份非常枯燥的工作,但我喜歡每天學習新東西。
我發現技術寫作不僅僅意味著寫文檔。你可以將目光瞄向技術博客或文案;你可以編寫內部或外部文檔;你可以編寫應用程式演示和教程。對於寫手來說,這是收入最高的領域之一,所以值得考慮。
顯然,如果你走這條路,需要擅長寫作,此處還需要能夠將複雜的想法有條理地組織起來,並善於學習新東西。你自我改稿的能力越強,你的工作就越有價值,所以一定要在相關工具上投資,讓它們幫助你變得更好、更有效率。
一開始,你可以先為一些付費的社區寫作項目寫作,然後建立和完善你的關係網和作品集,在此過程中把這些經驗轉化為一份全職工作。
教師
有幾種途徑可以使你從軟體開發的職業轉向教師。你可以在編程訓練營找到一份教學的工作,你可以在大學或高中教書,你可以加入 egghead.io 這樣的平臺。或者你可以使用 Teachable 或 Educative 創建自己的課程網站。選擇什麼道路,取決於你的背景和承擔風險的能力。
無論如何,教師必須能夠快速學習新知識,並通俗易懂地呈現給學生。你必須適合聽眾的水平,他們樹立起成功的信心,這樣才能取得成功。教學的報酬可能比不上軟體開發,但它也可以成為一個非常令人滿意的職業道路。
培訓師
企業培訓是另一種教學形式,也是一個很值得考慮的選擇。培訓師可以是獨立的諮詢師,也可以是大公司的員工,他們通常會到客戶辦公場所提供特定軟體的實操培訓。
培訓師可能有深厚的專業知識,但也有可能只是一些技術高超的傳播者。做企業培訓通常比教學收入高,但它也可能更受銷售導向的影響。培訓師經常在峰會上演講,在社區講習班講課,或者在培訓課程間隙參加些聚會。
如果你喜歡在臺上講述技術概念,這可能是一個理想的職業道路。
分析類角色
科技公司的很多職位都需要具備分析能力。雖然它們大多都需要接受一些專門的教育,但是如果你想不再從事軟體工程方向,還是值得考慮一下的。你的工作節奏將與大多數以產品為中心的工程師不同,像上面提到的支持角色一樣,你可能要與公司的其他角色進行交互。
數據科學家或工程師
這兩個角色(有些公司將它們合併在一起)的主要工作是使用大數據來幫助企業或客戶做出更好的決策。
數據工程師通常是圍繞數據攝取和數據組織流水線開展工作,而數據科學家則是設計實驗和算法,將這些數據處理成有用的結果。數據科學(人工智慧、機器學習等)是一個立足於數學、軟體工程和統計的廣闊領域。
關於數據科學和工程,有一些專門的課程、訓練營和大學學位,但是如果你有很強的數學背景,也可以自學一些基礎知識。如果沒有這方面的背景,可以考慮先溫習一下數值分析、矩陣代數和統計。
因為這些技能需要花很長時間才能掌握,而且數據科學家的需求量又很大,所以這個職位薪水很高,而且短期內不太可能消失。
安全分析師
如果不出現問題,信息安全角色通常得不到關注。雖然每個開發人員都應該對安全漏洞和風險有一定認識,但一般都會專門招聘安全分析人員來查找安全問題,對這些問題予以歸類,並提出修復建議。
有些工作是請獨立的顧問來開展的,但在大公司,可能會有內部的安全團隊。這個角色很有意思,因為它既需要掌握技術和法律法規,也需要掌握業務,能夠做風險評估。
安全崗位也是最難招聘的崗位,所以你從事這一工作會很有保障。信息安全是一個非常廣泛的領域,因此,如果你有興趣致力於此,可以有很多選擇。
研發
對於擁有軟體工程技能的人來說,在研發部門的工作會成為一種獨特的經歷。像谷歌和亞馬遜這樣的大公司會拿出一部分利潤由研發團隊進行一些高風險且可能會有高回報的實驗。這些跨學科團隊可能包括軟體開發人員、數據科學家、業務分析師和項目經理。
進入一個優秀的研發團隊並不容易。這些崗位往往要面對很強的競爭,並且它需要非常專業的知識,這些知識可能在編程訓練營是學不到的。所以說,有些公司僱傭道德黑客、創始人或多語言達人來幫助團隊更加完善,並為團隊注入一些創造性思維。
獨立的、靈活的角色
雖然有些職業常常允許我們遠程辦公,有時甚至有學術休假,但你可能想讓自己的生活更加靈活、自由。如果你有動力創業,可以選擇每周只工作 4 小時,一年花 6 個月的時間來旅行,或者把一半的時間花在開源項目上。創業並不容易,但是作為一名軟體開發人員,相比大多數人有很大的優勢。
自由職業者或顧問
如果想要更加自由,有個方法是辭掉朝九晚五的工作,成為一名自由職業者。作為一名自由職業者,你可以把自己僱傭給一個或多個客戶,他們會按小時付費請你為他們寫代碼。公司經常僱傭自由職業者從事特定的短期項目,清理技術債務,或者在正式員工休假時補個缺。
諮詢師是為客戶解決特定問題的高端自由職業者。雖然他們可能會編寫代碼,但他們的賣點主要是他們的專業知識或獨特的背景。自由職業者和諮詢師之間的界限是非常模糊的,所以不要在名稱上太過糾結。
入行做自由職業者或顧問是最困難的。如果你沒有一個龐大的關係網,可能將依靠 Upwork 或 Toptal 這樣的平臺來尋找客戶。這些平臺的抽成佔你收入的很大一部分,而且你還必須得與世界各地許多其他自由職業者直接展開競爭。
如果你贏得了口碑和聲譽,有了自己熟絡的客戶,他們的推薦能讓你得到更多的工作。推薦的好處在於,客戶是基於可信的關係來找你的,而不是在網絡上盲目搜索。如果你真的很擅長做自由職業者或諮詢,可以把你的報酬標準提得足夠高,這樣每次做完一項工作就可以休息更多的時間了。
創業公司的創始人
網際網路上充斥著軟體工程師創業的故事(1, 2, 3),所以你可能會覺得創業很簡單,甚至是個好主意。
事實上,這要視情況而定。
創業通常需要很長一段時間才能產生收益,所以在你取得成功之前,可能幾個月甚至幾年都沒有收入。話雖如此說,但如果你想開一家自己的軟體公司,幾乎有數不清的好處。
你也可以一邊上班,一邊開一家公司。雖然這很難做到(可能會有法律後果),但也並不罕見。如果你能找到一兩個其他的創始人一起創業,可能會增加成功的機會。
結 語
軟體工程是一個令人興奮的領域,但它並不適合所有人。即使你離開這一領域,決定做些別的事情,你已經掌握的技能也不會白白浪費。
許多人對於在軟體開發領域之外找工作充滿顧慮,而我鼓勵你走自己的路。在務實(賺足夠的錢來生活)和你的興趣之間找到平衡,希望你能找到一條讓工作感覺不像是「工作」的職業道路。
我們很想聽聽你的想法。如果你有著不同的職業道路,歡迎在評論區留言。
嘉賓介紹:Karl Hughes,前創業公司的 CTO,現轉行成為作家。https://draft.dev 的創始人,幫助打造高質量的軟體工程博客。