男,985計算機小碩一枚,去爭取演算法崗位還是開發崗位?

本人雙985小碩(保研),計算機學科,研二準備找工作了,現在糾結於爭取演算法崗位還是拿穩開發崗位。這幾年做過的東西種類很雜。數學建模,做過涉及回歸的科研項目,推薦系統,信號相關的科研,計較淺薄的圖像處理和應用,可穿戴設備和運動感測器應用之類的。具體情況如下:
1.C++開發方面的情況
概況:C++是第一語言,寫了5年,有80%以上把握拿到好的offer(這兩年拿過阿里巴巴和騰訊的實習offer,老師不放沒去)。
細節:
(1)計算機基本學科知識掌握的中等偏上(多數能講清楚,少數要翻書)。
(2)常年混跡leetcode和hihocoder,題目刷了大半。
(3)c++的四大名著快讀完了。STL有精讀。
(4)平時還寫matlab和object-c,有完成代碼的科研project(主要寫代碼,無paper)。

2.機器學習方面的情況
概況:僅掌握了理論知識,實踐很少,現在非常心虛。
細節:
(1)本科和讀研期間上過學校基本的人工智慧和數據挖掘課程。
(2)吳恩達老師的課程快學完了(寫黑板的那一版),李航博士的書也基本看完。公式半數可在資料輔助下推導,半數還不可以。
(3)項目經歷很少,只做過幾個月的推薦系統和圖像處理,期間沒有深究過理論。

3.現在糾結並想求助的問題
(1)以我現在的機器學習情況準備演算法崗位(阿里或者騰訊)的話,是否有資本一搏?如果有資本,那還需要怎麼準備才能更穩一些?
(2)想轉機器學習是因為覺得開發崗位沒有演算法有意思,覺得搞演算法更容易比寫代碼創新,也更接近與科研性質。這樣的想法(針對阿里或者騰訊)是否正確?
(3)在各位大牛周圍是否有人從寫代碼轉到過演算法崗,有沒有經驗可以告訴我。


我是機器學習方向的在讀研究生;本科時期在阿里實習過,實習職位是演算法工程師。
對這個問題說一下自己的看法。說的不對的地方,還望各位同行指正。

首先,我覺得題主完全有資本去報阿里或者騰訊的演算法崗。
如果題主的描述屬實,那麼題主算是一個基礎比較紮實的計算機學生了,而且對機器學習也是有一定程度的掌握。我本科拿到阿里演算法工程師offer的時候,實力比題主差多了。

就我當時實習的情況來看,阿里的演算法工程師賴以立足的還是工程能力,能幹活、能搬磚才是硬道理。某一個機器學習的演算法不會,學幾個小時或者幾天就足夠了,應用一個演算法、會調參數的門檻並不高。而且實際工作里用的最多的還是那些很經典、很基礎的機器學習演算法(邏輯回歸,決策樹之類的)。
而且如果你做的是數據挖掘,推薦系統之類的,你也應該知道你做的其實是特徵工程。很多時候,複雜、高深的模型效果不一定好;能讓結果效果有很大提升的往往是特徵的提取和選擇。所以比起演算法和模型本身來說,對數據、對業務的理解其實同等重要甚至更重要。

正面回答你的三個問題:

(1)以我現在的機器學習情況準備演算法崗位(阿里或者騰訊)的話,是否有資本一搏?如果有資本,那還需要怎麼準備才能更穩一些?

有資本。
如果你還想更穩一些,不妨做一些數據挖掘類的項目或者競賽。比如阿里天池平台上的競賽天池大數據競賽 或者kaggle上的一些比賽。據我所知,BAT的演算法崗還是非常認可這些競賽的。特別是天池上的一系列競賽,不僅獎金高,做得好的也基本能穩拿阿里演算法崗的special offer

如果你覺得做競賽太耗時間了,去github上follow一些比較有意思的機器學習項目也是不錯的選擇。總之,有意識地加強一下自己機器學習實踐方面的背景吧。
另外,並行計算、分散式系統也在演算法工程師的技能樹裡面。如果你有時間也可以學一下spark之類的,比較推薦伯克利的一門課。
參考SS Wang的知乎回答零基礎自學如何成為合格的數據挖掘工程師? - 數據分析:

1. BerkeleyX: CS190.1x Scalable Machine Learning CS190.1x Course Info
這門課是伯克利開的,教機器學習基礎、Python Spark實現。我很懂機器學習,但不懂spark和python,花了1周多時間看完視頻、做完作業。如果沒機器學習基礎的話幾周應該夠了。學完了可以用spark處理大數據,做分類、推薦系統。

這門課包含了機器學習基礎,python spark實現。學這門課的時候記得做作業。

(2)想轉機器學習是因為覺得開發崗位沒有演算法有意思,覺得搞演算法更容易比寫代碼創新,也更接近與科研性質。這樣的想法(針對阿里或者騰訊)是否正確?

我覺得並不正確。以我所見的情況,阿里、騰訊的演算法工程師一般不會涉及到演算法創新;這部分工作可能會專門挖名校PhD甚至名校教授來做。MSRA、百度IDL這種地方倒是挺接近科研性質的;但我阿里實習期間的見聞,演算法工程師做的還是工程,並非科研。
而且雖然你的title是演算法工程師,但並非你就只做和演算法相關的事。本質上,演算法工程師也是一塊哪裡需要往哪裡搬的磚。如果你的項目組需要你干別的活,你當然也要承擔起別的和演算法完全無關的工作。比如我實習期間,因為我的主管想分析別的網站的數據,就讓我去幹了一些爬蟲的活。有一段時間我天天都是忙著從別的網站爬數據。
所以,不要太介意「演算法工程師」「數據科學家」之類的title,對於應屆生來說能幹活才是硬道理。

(3)在各位大牛周圍是否有人從寫代碼轉到過演算法崗,有沒有經驗可以告訴我

有,而且還不少。我當時的那個組是阿里某個部門的演算法組,裡面的大多數人title都是演算法工程師。但不少人都是從開發崗轉過來的;畢竟幾年前, 機器學習還並不是很火。
另外,就我觀察到我的同學找工作情況,研究生期間並沒有什麼機器學習方面的項目背景,但拿到BAT演算法崗的例子也是不少的。

總之,其實本科生/研究生去公司做機器學習,和PhD去企業做機器學習,是不同的概念。
那些發了很多頂會甚至已經做出有影響力的成果的PhD(比如 @田淵棟@賈揚清@Naiyan Wang@Filestorm 等等),他們去公司做機器學習是做research scientist. 他們做的工作,和本科/碩士生做的演算法工程師,並不是同一回事。

更新:
賈揚清大牛在評論里補充了一些看法。我覺得很值得參考,所以把這一段搬到我的回答里:

其實演算法崗和開發崗的區別並不很大,比如說我現在負責開發Facebook的人工智慧底層平台,並不是單純的research就可以,同時也需要保證開發的系統可以在百億級別的數據上進行快速深度學習的訓練,這個沒有系統開發的支持是很難做到的。我們現在招人,都會注意開發產品級別的代碼的能力,所以很大程度上應該是演算法和代碼能力並重,甚至一定程度上代碼能力比演算法能力更重要。


我覺得第一個要說的事情就是:你兩種崗位都找,又不矛盾……
事實上找工作就是這樣的啊,別管黑貓白貓,覺得不太差就去面,那麼多公司,我還沒見過投了演算法崗就不給你安排應用崗的……
等手裡攢一堆offer,再上知乎提問:我究竟是選XX公司的演算法崗好呢,還是選XX公司的應用崗好呢?順便收割一堆膝蓋


首先從結論來講,如果題主的描述屬實,我覺得題主的計算機基礎和演算法基礎已經足夠進BAT非核心組的演算法崗了,畢竟像我這種半路出家只讀了半本統計學習方法的人就敢去投豬場和A的演算法崗,最後還在豬場蹭了幾個月的飯(不得不說豬場妹子真多,,,)
但是和題主比較起來,我還是有某方面的優勢,首先,我當時面試的時候雖然沒有實際的演算法項目,但是有參加阿里的比賽,雖然沒進複賽,但也是全套流程都走了下來,實際面試的時候面試官也會對這塊問的比較深,像業務邏輯理解、特徵工程、演算法間比較等內容。
其次,我還有hadoop、spark、hive方面的工程經驗,雖然不是很深入,但是一些簡單的業務場景都是可以應對的,這一塊不苛求深入理解,但是基本的操作和原理還是需要知道的,排名第一的匿名答主推薦的就很不錯。
最後,正如很多人提到的,真正的演算法改進大部分會招一些名校的PHD去專門做,我們在實際工作中做的很可能也是工程業務方面的內容,就像匿名答主說的,能幹活才是硬道理,如果題主去實習過以後說不準會對這點有更深的體會。
PS. A場的HR說我不是17界應屆生所以把我拒了,不知道是不是在安慰我,求知情人來解惑,,,


搞演算法的是有很多時間做開發方面的事情的,而搞開發的可沒那麼多時間去做演算法方面的事情。


1)感覺開發崗把握更大些。題主主要經驗還是c++工程方面,演算法崗的話,c++寫得一坨屎樣也夠了,進度催得急,上線,效果好,發完喜報,就完事了。升職加薪,後面的坑留給別人。大公司演算法崗和工程崗分得很開是這樣(BAT某司的某大演算法團隊)。
如果有意投演算法崗,天池,kaggle之類的比賽現在趕緊練練手開搞起來。畢竟跟實際工作場景比較接近:提出問題,然後各種數據分析,特徵處理,模型ensemble,結果分析。最後上線,效果好,指標有提升,完事。工作中反而比較重實踐,輕理論。有時候演算法說不清楚,能調調參出結果也行。當然,我沒有說理論不重要的意思。但隨便抓個所謂的「演算法」工程師過來,也不一定說得清楚特徵歸一化有啥用。做一個調包俠又不需要了解這個。所以,題主可以增強一下自信心。

2)too simple,something naive。開發崗和演算法崗各有各的無聊。創新啊,科研啊,多美好。但公司只是雇你來搬磚而已。如果能兼顧業務和技術創新那當然最好,不能的話,上班還是要以業務為重。有些時候只能用用很low但業務上有效果的方法。

3)我勉強算是吧。

感覺更關鍵的是看題主個人興趣和職業發展規劃。題主看上去能力挺強的,兩種崗位應該沒啥問題。面試的時候其實挺看重基礎和學習能力,工作具體用到的技能不一定剛好已經學過,這時候快速學習的能力就很重要了。


可能我的情況和題主正好相反。相比題主來說,我C++其實還沒有正式入門。我主要的工程語言是Python。不過我倒是對演算法,包括傳統經典數理演算法和機器學習,數據挖掘,圖像處理演算法略有研究(可能和思維方式有關,我本人以前做的東西是物理導向的,所以入手演算法可能比一般的碼農要快一點)。

正好您提到的幾個方向,我恰好都略有涉足。我建議您如果要申請機器學習類的崗位,不妨」臨陣磨槍。「有幾本非常經典的書當然要反覆閱讀,常讀常新。比如演算法導論,Norvig的AI:a modern approach; Forysth的CV: a modern approach, Murphy的,machine learning,a probabilistic perspective, Jiawei的 數據挖掘:概念與演算法等等。這些都是經典書籍。我平時自己搞演算法偏重於從」數學物理化的思想「方面去理解。當然這個要看個人的情況。

我另外給您推薦一本極其容易閱讀,便於迅速地」爆兵「的書:

白話大數據與機器學習-高揚-電子書-在線閱讀-網易雲閱讀

面試以前刷一遍,很便於脫稿講基本演算法。

題主加油。


能演算法就演算法,最好是bat的。至少在bat演算法工程師和開發工程師重視程度不是一個級別的。這麼跟你說吧,拿百度研究院舉例。一個應屆博士演算法工程師,兩三年到t7很正常。t7年薪就有100w了。而且演算法工程師升級沒有名額限制。當然了前提是真演算法工程師,別是一天到晚跑數據的,那就落下乘了。


就想知道樓主有女朋友沒,我能自薦嗎


計算機專業的都不投演算法崗,讓我們這些通信、電子專業的怎麼投研發崗啊


其實,應該是爭取錢多的崗位,還是錢少的崗位吧??
如果這個問題,你自己回答不出來,還要問大家的話,我可以告訴你:
爭取錢少的崗位吧,錢多的崗位還是留給大家。


題主我只能回答你 你醬紫的比較適合做男朋友這一職業⊙_⊙


同題主,985保研計算機
剛開始我也在考慮是搞演算法還是搞開發
甚至我還考慮過學點架構搞架構
研三開學就拿到一個軟體公司offer
但是最後決定
.
.
.
.
.
.
.
.
.
.
.
.
.
.
回家進國企


瀉藥。研一,深度學習方向,圖像語言啥的都做過。看你描述,是給老闆幹了幾年雜活啊。給你說說我的一些經歷和看法。不管演算法崗還是開發崗,都是去解決問題,只不過是個人喜好罷了。
回答你第二個問題:機器學習就是自己想辦法改進、總結,或者提出更好的辦法來做到一定效果,而開發崗也是有一個既定目標或功能,去實現。我喜歡演算法,因為演算法不會遇到開發的各種問題,可以在自己的世界裡開心的想開心的做,但是演算法也比較枯燥,很久想不出好的辦法,會性冷淡的。總的說,你的想法沒有對不對,做久了一樣,肯定想換換。


題主牛逼,但是感覺不怎麼自信啊!


從我看,演算法和開發是一致的。
我感覺你自己是將開發中負責寫邏輯演算法端 和普通的用戶端處理 分開了,從這個意義看,自然是偏向演算法。


搞架構的也沒有那麼不堪吧。分散式計算,存儲,並行計算。門檻沒那麼低吧。計算機又不是除了演算法沒別的了。


作為一個多年的程序員,建議是演算法,具有核心競爭力和技術壁壘。


題主,從描述中看得出你C++基礎及數據結構演算法的基礎較強,從這一點上來說適合研發,而又了解機器學習演算法,往演算法工程師方向也行。
研發門檻不高,工程性質的活多。但演算法不一樣,像是最新技術深度學習,深度增強學習,注意力機制等都屬於演算法類的,考慮長遠發展的話還是更偏向於演算法這一塊。但具體還是要結合題主你自己的實際情況了。
以上。


我要是題主的話會考慮自己興趣吧…這個行業興趣真的是很大的動力…


當然是演算法崗位咯,開發崗位根本用不著碩士學歷,

當然一些研髮型的開發還是很難的。不過碩士去做開發和工作兩三年的本科開發基本不是一個級別的。就前途來說,如果演算法感興趣的話,還是選演算法。


推薦閱讀:

工作五年以上的程序員,應該幹些什麼?
如何在debug的同時保持溫柔屬性?
程序員的優越感從何而來?
IT 工程師被叫「碼農」時是否會不舒服?
如果男性程序員為降低bug 率可穿女裝,那女性程序員應穿什麼?

TAG:程序員 | 機器學習 | C++ | 工作 |