可供工程師選擇的大資料崗位
- 從雇主需求看,如何發掘自己轉崗優勢
- 為轉崗工程師提供的建議
ps:本回答較長,讀完約要6分鐘。
可供工程師選擇的大資料崗位
大資料平台/開發工程師
他們的工作重心在于資料的收集、存儲、管理與處理。通常比較偏底層基礎架構的開發和維護,需要這些工程師對 Hadoop/Spark 生态有比較清晰的認識,懂分布式叢集的開發和維護。熟悉 NoSQL,了解 ETL,了解資料倉庫的建構,還可能接觸機器學習平台等平台搭建。有些大資料開發工程師做的工作可能也會偏重于應用層,将算法工程師訓練好的模型在邏輯應用層進行實作,不過有些公司會将此類工程師歸入軟體開發團隊而非大資料團隊。
算法&資料挖掘工程師
此類工程師的工作重心在于資料的價值挖掘。他們通常利用算法、機器學習等手段,從海量資料中挖掘出有價值的資訊,或者解決業務上的問題。雖然技能構成類似,但是在不同團隊中,因為面對的業務場景不同,對算法 & 資料挖掘工程師需要的技能有不同側重點。因而這個類目下還可細分為兩個子類:
1. 算法工程師
這類團隊面對的問題通常是明确而又有更高難度的,比如人臉識别、比如線上支付的風險攔截。這些問題經過了清晰的定義和高度的抽象,本身又存在足夠的難度,需要工程師在所研究的問題上有足夠的專注力,對相關的算法有足夠深度的了解,才能夠把模型調到極緻,進而解決問題。這類工程師的 Title 一般是「算法工程師」。
2. 資料挖掘工程師
有的團隊面對的挑戰不限于某一個具體問題,而在于如何将複雜的業務邏輯轉化為算法、模型問題,進而利用海量資料解決這個問題。這類問題不需要工程師在算法上探索得足夠深入,但是需要足夠的廣度和交叉技能。他們需要了解常見的機器學習算法,并知曉各種算法的利弊。同時他們也要有迅速了解業務的能力,知曉資料的來源、去向和處理的過程,并對資料有高度的敏感性。這類工程師的 Title 以「資料挖掘工程師」居多。
了解了市面上有哪些可以轉為大資料方向的崗位後,公司都希望能夠招聘到一個怎樣的大資料工程師呢?
基礎的邏輯、英文等素質是必須的,聰明、學習能力強是未來成長空間的保障,計算機基礎需要紮實,最好做過大規模叢集的開發和調優,會資料處理,還熟悉聚類、分類、推薦、NLP、神經網絡等各種常見算法,如果還實作過、優化過上層的資料應用就更好了……
嗯,以上就是招聘方 心中完美的大資料相關候選人形象。
但是,如果都以盡善盡美的标準進行招聘的話,恐怕沒幾個團隊能夠招到人。現在大資料、資料挖掘火起來本身就沒幾年,如果想招到一個有多年經驗的全才,難度不是一般的高。
是以對于雇主而言,如何調整招聘中的取舍,成為想要轉崗大資料方向的工程師的突破口:
從雇主需求看,如何發掘與培養自己轉崗優勢
1. 挖掘長處,發揮優勢比對崗位
以某一家計算機視覺領域的大資料公司的招聘需求為例,該團隊中既需要對算法進行過透徹研究的人才,把圖像識别有關算法模型調整到極緻,也需要工程實力比較強的人才,将訓練好的算法模型在産品中進行高性能的實作,或者幫助團隊搭建一整套視訊圖像資料采集、标注、機器學習、自動化測試、産品實作的平台。
對于前一種工程師,他需要在深度學習算法甚至于在計算視覺領域都有過深入的研究,程式設計能力可以稍弱一些;而對于後一種工程師,如果他擁有強悍的工程能力,即使沒有在深度學習算法上進行過深入研究,也可以很快接手對應的工作。
即使在算法工程師團隊内部,不同成員之間的技能側重點也可能各不相同。
比如某一資訊内容推薦公司的算法團隊中,一部分工程師會專注于核心算法問題的研究,對解決一個非常明确的問題(比如通過語義分析進行文章分類的問題,如何判斷「标題黨」的問題等等),他們需要有足夠深度的了解;另外一部分工程師,則專注于算法模型在産品中的應用,他們應該對業務非常有 sense,具備強悍的分析能力,能夠從複雜的業務問題中理出頭緒,将業務問題抽象為算法問題,并利用合适的模型去解決。兩者一個偏重于核心算法的研究,一個偏重業務分析與實作,工作中互為補充,共同優化個性化内容推薦的體驗。
對于後者來說,因為對核心算法能力要求沒有前者那麼高,更重視代碼能力與業務 sense,因而這個團隊可以包容背景更豐富的人才,比如已經補充過算法知識的普通工程師,以及在研究所學生階段對算法有一些了解的應屆生。
看了兩個公司的例子之後,我們來看一個具體應用的例子,本來主要從事利用GPU伺服器進行運算加速工作的宋翔,在公司的需求下,轉型從事機器學習平台的開發和平台搭建工作。
對于宋翔而言,他了解如何讓算法在機器上運轉得夠快,才能夠縮短模型疊代的時間,加速模型優化的過程。而大部分算法工程師可能對此了解甚少,宋翔就可以充分發揮自己的特長,利用硬體和底層系統加速機器學習算法。
當需要訓練的資料量特别大的時候,比如幾十 T 以上甚至 PB 級的時候,在分布式系統中, I/O 或者網絡可能成為瓶頸了,這時需要系統工程師的介入,看怎麼優化資料傳輸使得 I/O 的使用率提高;看怎麼去存儲,用 HDFS 還是用 Key Value Store 或者其他存儲方式,可以讓你更快地拿到資料去計算,或者你用磁盤的存儲還是 SSD 存儲 或者 in-memory 的存儲。這其中,系統工程師也需要平衡成本和效率之間的關系。 系統工程師還可以幫助你設計一個系統,讓算法工程師快速地送出任務,或者友善地同時訓練多個模型,嘗試多個參數 系統工程師非常擅長把本來串行的工作拆分之後變成并行工作。比如可以把資料預處理和深度學習運算做一個并發,等等
除了對底層系統有深入了解之外,宋翔現在也在了解機器學習的算法。他帶領的小團隊中,除了有2名系統工程師之外,還有兩名算法工程師,他一直鼓勵兩種工程師互相學習,共同提高,這樣才能夠讓整個團隊效率最大化。如果系統工程師對算法不了解的話,可能也不知道怎麼去優化算法運作的效率;算法工程師也應大概了解不同模型在CPU、GPU機器上的運算速度,幫助自己設計出更高效的算法。
對于期望轉崗為大資料相關的普通工程師來說,一旦通過自身擅長的技能切入新團隊之後,就有了更多橫向發展的機會,幫助自己在大資料相關領域建立更強競争力。
2. 如果現階段技能水準不能比對:紮實基礎,展現自身可成長性
成長空間一直是一個老生常談的問題。這個問題在目前市場供給偏少的大資料相關領域,更加突出。那麼,為什麼成長空間這麼重要?與其說是成長空間,不如說是看中了這些工程師背後的潛力。這些有成長性的工程師可以利用已有的工程實力完成一部分基礎工作,并在經過1-2年的鍛煉之後,接手更複雜的問題。
從大資料方向金字塔技能模型上看:

越是偏金字塔底部的素養,對于企業來說越是重要。最底部的基礎素養,代表的是未來的成長空間。目前網際網路高速發展,每家企業都是跑步前進,如果一個目前技能不錯的工程師,未來成長空間有限,也可能變成企業的負擔。
再上一層的計算機基礎 - 基本的算法與資料結構,某一門程式設計語言的精通,是幾乎每個工程師崗位都重視的能力。一個基礎不紮實的程式員,可能會讓企業懷疑其學習能力。紮實的基礎,會為應用技能的學習掃除障礙,更容易建立深度的了解;而數學基礎對于算法了解上的幫助十分重要。
這最下方的兩層構成了一個工程師人才的基礎素養。如果底層的基礎比較紮實,掌握應用層技能所需要的時間也許比我們預想的要少一些。
TalkingData 的技術 VP&CTO 闫志濤在操作(招聘)環節中的具體考慮如下:
TalkingData 的大資料工程師工作中非常依賴 Spark 技能,但是了解 Spark 本身并沒有那麼難,因而候選人的 Spark 技能對我而言并不是最強吸引點。 相比于對 Spark 了解更多的人,我更願意招收那些 Java 學得好的人。因為 Spark 的接口學習起來相對容易,但是要想精通 Java 是一件很難的事情。 如果你把 Java 或者 C++ 學透了,你對計算機技術的認識是不一樣的。這其實是道和術的問題。
在 100offer 平台上就有這樣靠紮實的個人功底和成長空間轉崗成為大資料人才的候選人。
曾在中國移動負責機頂盒業務的後端架構進行服務化轉型工作的趙平抱着對基礎平台架構的濃厚興趣加入宜信。他在這家公司做的第一個項目是分布式存儲系統的設計和開發。第一個項目完美收官之後,他的學習能力、基礎能力備受褒獎。當宜信開始組建大資料平台團隊時,趙平看到了自己理想的職業發展方向并送出了轉崗申請,基于他過往的優異表現,順利地拿到了這個工作機會。
轉崗之後,趙平也遇到了一些挑戰,比如大資料涉及的知識點、需要用到的工具更加豐富,Spark,Scala,HBase,MongoDB…,數不清的技能都需要邊用邊學,持續惡補;比如思維方式上,需要從原來的定時資料處理思維向 Spark 所代表的流式實時處理思維轉變。不過基于他紮實的基礎,以及之前做分布式存儲系統經驗的平滑過渡,加之整個團隊中良好技術氛圍的協助,最終順利完成第一個大資料項目的開發工作。
轉崗建議
- 重視基礎。無論各種崗位,基礎是成長的基石。
- 發揮專長。從能夠發揮自己現有專長的崗位做起,可以讓新團隊更歡迎你的加入。比如算法模型的工程化,偏重于業務的資料挖掘,大資料平台開發,機器學習系統開發等等,這些工作對于普通工程師更容易上手。而普通工程師直接轉偏研究方向的算法工程師,難度更高。
- 準備充分。請預先做好相關知識的學習,有動手實踐更佳。如果沒有一點準備,雇主如何相信你對這個領域真的有興趣呢?
- 考慮同公司轉崗。在同公司轉崗阻力更小。亦可考慮加入一家重視大資料的公司,再轉崗。