知乎 | 算法崗和開發(fā)崗有什么區(qū)別?
鏈接:https://www.zhihu.com/question/490150407 編輯:深度學習與計算機視覺 聲明:僅做學術分享,侵刪
https://www.zhihu.com/question/490150407/answer/2164415753
先說下開發(fā)崗和算法崗在職責上的區(qū)別,以一般的推薦/廣告系統(tǒng)為例,有數據庫 -> 召回 -> 粗排 -> 精排 -> 混排 -> 前端等上下游模塊。
開發(fā)崗需要做的是根據具體需求來搭建/維護對應的線上模塊,寫代碼實現線上邏輯。具體而言,開發(fā)崗更像純粹的“工程師”,需要根據需求來進行功能開發(fā)、測試、代碼上線,比如在召回等某個模塊修改個代碼邏輯以推進某個業(yè)務上線。由于每項工作都是目標確定,工作量也是可以直觀衡量的,所以工作確定性很強,產出也比較確定。一旦需求比較多時,就會堆時間加班解決,而加班多工作量肯定會更多,成績一般也更突出。所以,開發(fā)崗更多是“身體累”。
算法崗的目標主要是通過各種手段提升對應指標,比如推薦系統(tǒng)的點擊率、轉化率、用戶停留時長等。舉上面例子來說,是通過優(yōu)化召回、粗排、精排等策略/模型結構,優(yōu)化模型訓練數據,對接新業(yè)務優(yōu)化業(yè)務指標等各種不同方式來提升指標。到了現在算法已經接近瓶頸時,算法會過得非常難受,每個優(yōu)化點不一定會有用(大多是無效的),需要反復提出新方案、優(yōu)化、排查指標、再提出新方案不斷循環(huán)直到拿到某個收益點。有時改幾行代碼結果帶來收益,有時又投入巨大工作量也沒收益,所以,這方面工作量和工作目標上更不好量化,算法崗更多是“心累”。
在能力上,算法需要了解很多算法領域的知識,但是對工程能力的要求也逐漸與開發(fā)崗看齊。
算法需要熟悉各類機器學習/深度學習算法知識、各類策略、比較前沿的新算法/模型,除此之外,現在對算法的工程能力要求也是越來越高,基本的架構(比如上面說的公司內部推薦/廣告算法各個模塊的代碼)、架構開發(fā)基礎(C++,Java等)、數據開發(fā)(spark等、flink)。主要原因一方面是簡單的模型優(yōu)化已經很難拿到收益了,新開發(fā)的算法逐漸更復雜,想要讓模型更合乎預期就需要對架構很熟悉方便模型設計、指標排查、提出新方案等,另一方面,也是為了快速迭代,開發(fā)同學需求太多做不完的時候,算法崗不可能干等著別人開發(fā),自己動手完成一部分簡單開發(fā)能夠保證工作正常推進。
開發(fā)崗則需要對架構知識、開發(fā)基礎等各種知識比算法同學更深入,具體哪部分技術重要取決于具體的開發(fā)崗位。
最后談下這二者面試情況,大體上說算法崗有一定泡沫,內卷比較嚴重,開發(fā)崗位置更多。
由于前幾年ai太火,各個專業(yè)都往“算法”上轉,當年削尖腦袋進算法各方向的學生這兩年也開始批量畢業(yè)。因此,顯而易見的是算法崗面試會更內卷一些,尤其是cv、nlp等偏研究性質且落地場景不多的算法崗位。目前推薦/廣告算法還不算卷,主要原因是沒有平臺導致很少學校會專門研究這兩個方向。面試上主要還是看以往的算法項目經驗及對算法本身的理解、算法基礎知識、刷題等。
開發(fā)崗種類比較多,比如后端、前端等,而且根據不同業(yè)務可能又會使用不同的技術棧(比如一些用C++,另一些用go等)。開發(fā)崗是硬需求,每個公司都需要且數量不少,所以內卷程度會比算法輕。面試上,也都大同小異,主要也是問過往項目,基礎知識(對應開發(fā)方向的)以及刷題。
至于未來發(fā)展,個人努力是比不過時代潮流的,碰到好的業(yè)務好的領導算法能夠很容易帶來業(yè)務增長,那么個人上升速度也會很快。開發(fā)崗也是同理,選擇一個好的平臺,好的團隊比選擇開發(fā)崗還是算法崗更重要。
上面主要是以互聯(lián)網公司中推薦/廣告算法崗位和開發(fā)崗進行比較的,其他還有偏研究類型的cv、nlp等算法崗,這里就不再多說了。
https://www.zhihu.com/question/490150407/answer/2173649548
1.薪資待遇
前幾年的時候算法崗可能要比開發(fā)崗位薪資待遇更多。
2. 工作類型
算法崗有純粹的research,那種就是讀論文,搞模型,寫論文的,偏向高校的學術研究。
3. 技術棧
4. 崗位需求
5. 難度
https://www.zhihu.com/question/490150407/answer/2158935592本人工作title是算法工程師,實際工作中大約是50%的算法+50%的開發(fā),平時也會和朋友討論何謂算法,何謂開發(fā)。
從我一個入職不到一年的菜雞算法角度來看,算法崗玩的是數學關系,開發(fā)崗玩的是邏輯關系。
開發(fā)崗的職責是搭建一個產品的所有邏輯,從底層的到頂層的。前端頁面之間的跳轉邏輯,后端與數據庫之間的交互邏輯,前后端的交互邏輯,這些是開發(fā)崗需要做的。比方說我的產品是某視頻平臺,那么打開呈現的界面,點擊視頻進入到播放頁面,注冊賬號修改信息等操作,都是開發(fā)崗完成的。
算法崗的職責,顧名思義就是算法,算法分很多種,機器學習,數據挖掘,NLP,CV,推薦等都是常見的算法領域。算法崗很多情況下是某個產品的核心,在產品中負責某個非常細分的點,或是為某個關鍵功能提供支持?;氐揭曨l平臺的場景,每次刷新推薦頁都有新的視頻出現,如何確定刷新過后推薦給用戶什么視頻,是推薦算法做的事。一個算法會經歷很多輪迭代,會有很多算法工程師抓著頭皮想著怎么優(yōu)化,多做些特征工程?參數再調優(yōu)一下?換個更合適的模型?等等。這些操作,更多的是數學關系,比方說需要關注數據集的分布情況,相關性矩陣,模型損失函數等。
當然也有很多算法是研究方向,我舉的例子不過是一小部分。
https://www.zhihu.com/question/490150407/answer/2164598780
下面從算法崗的角度談談自己的理解。算法崗主要針對的是無法通過直接編程進行解決的問題(主要是非結構化的輸入,如圖像,語音,文字等的識別。如果通過人為地寫if-else規(guī)則去處理這類輸入,程序將變得繁瑣冗長且不一定能夠覆蓋所有情況),需要將它轉化為一個數學問題進行建模后,結合標注的數據進行該數學問題求解,用得到的數學模型(某個函數y=f(x)一般是個概率函數)。
而開發(fā)崗負責的就是能夠結構化的輸入了,需要處理的情況也是相對固定的。以一個人臉識別接口為例,開發(fā)崗負責的部分可能會包括,將需要識別餓圖像進行壓縮,然后通過網絡發(fā)送到服務器上解壓縮,然后將圖像輸入算法模塊得到的結果通過網絡傳回客戶端。如何承受短時間大量的人臉圖像輸入同時服務器不宕機,客戶沒感覺到卡頓,就是常見的后端開發(fā)崗需要解決的問題了。
像別的答案提到的那樣,開發(fā)崗往往是身體累,而算法崗是心累。開發(fā)崗面對的問題往往是比較明確的(怎么更快地處理輸入并保持準確),能通過代碼分析和debug找到問題所在,然后通過扎實的CS基礎知識解決或者堆機器解決,舉個簡單的例子,比如說我有一份幾十pb的數據需要找到top100,但是我內存放不下,可以通過堆排序的思想進行處理;或者有錢的直接使用很多機器進行分布式處理快速解決。
但是對于算法的一些問題,因為目前常用的算法模型是一個黑盒,往往是難以定位和解決的,沒有一套所有情況都適用的方案。比如說一個動物識別程序將某只哈士奇識別成了狼,這種bad case的原因是沒有一個明確的理論另外分析的,解決的方法一般也只是對這類情況增加更多的訓練樣本或者嘗試更先進的網絡結構??偨Y就是算法面對的不確定性更大。
https://www.zhihu.com/question/490150407/answer/2166902713
很多算法工程師最終成長為企業(yè)的首席科學家,或者是首席技術官等崗位,可以說算法工程師的發(fā)展前景是非??捎^的。
再來說說開發(fā)崗。其實軟件團隊的大部分崗位都是開發(fā)崗位,有前端開發(fā)、后端開發(fā)、移動端開發(fā)等,可以說大部分程序員做的都是開發(fā)崗的工作。與算法崗位不同的是,開發(fā)崗位人數多,占比大,而且大部分開發(fā)崗位的職業(yè)周期都比較短,一般開發(fā)崗位在做到一定年齡(比如35歲)之后都會轉型。
一部分會轉向項目經理等管理崗位,一部分會轉型做架構師,還有一部分轉型為行業(yè)咨詢專家等,當然,也有一部分開發(fā)人員轉型為算法工程師。
算法崗和開發(fā)崗哪個前景更好?其實只要技術到位,這兩個崗位未來的發(fā)展前景都不可限量。
如何成為一名優(yōu)秀的程序員,做好以下兩點非常重要:一方面要立足本職工作,另一方面也要緊跟技術發(fā)展趨勢,通過崗位提升和自主學習不斷完善自身的知識結構,從而提升自己的職場競爭力。
往期精彩:
