為什麼越來越多的公司退出傳統演算法競賽了?

這裡的傳統演算法指ACM(ICPC)/OI,或者類似的。曾經舉辦過傳統演算法競賽的公司包括但不限於 有道難題 華為編程馬拉松 攜程編程挑戰賽 微軟編程之美 騰訊編程馬拉松 百度之星 現在之中大多數轉型為 機器學習/數據挖掘類競賽。 這預示著什麼。給我們什麼樣的啟示?


這些競賽的本來目的是招人才,競賽排名靠前的基礎素質是有保障的。我曾經招過3個ACM競賽獲獎的工程師,雖然都剛畢業,但是帶起來飛快,2-3個月邊學邊干基本上就可以頂工作2-3年的老工程師,而且質量遠超。但大多數企業最大的問題其實是急功近利,公司上層不停的傳達壓力下來,大多數管理者就把這個壓力傳導下去,在他們眼裡3個月不能出很多成果是無法接受的。另外,演算法只是基本素質,還有很多其他方面的素質決定一個工程師是否合格。所以,演算法競賽沒有帶來預期的收益,就搞不下去。

順便說說演算法的重要性,很多求職者老是問我,工作中誰會用到二叉樹啊,你讓我寫這個根本沒用,要用的時候我複習一下,或者下載個包,不是什麼都解決了?素質,同學,懂不懂什麼叫素質啊?你學了4年計算機,二叉樹的原理都不記得,我怎麼能相信在某些環境下你能發現需要用到某個演算法?這些演算法是有開源包,所有人都會用,但是這些演算法同時也培養了你思維的敏感性,在你想一個問題的時候是否能自然考慮到更優的方案,設計一個數據結構的時候是不是不單單從完成當前功能出發。這些都決定了你的工程項目會給未來挖多大的坑。這就是為什麼Google,Facebook等公司堅持面試的時候大量演算法編程題,這是基本素質。


1. 時代一直在變化,就算是 GCJ 這樣的比賽,近年來不是也有考察以分散式程序設計為主題的 dGCJ 的分支。類似的 OIer 中的提交答案題也是從無到有的。某天量子計算機發明了,出現考察量子演算法的比賽想必也是可能的事情。。

2. 出一道好的傳統演算法題,實在是太難了。我已經忘記自己上一次做到令自己難忘的題目是什麼時候了。

3. 而且演算法比賽也沒沒落吧?gcj、tco、fhc、yandex、mujin、vk、tinkoff,由企業贊助的 onsite 還是多到打不完吧。。。只是國內的大家最近似乎發現了 finalist -&> offer 中間的 bug,現在從自己的業務出發,辦些更有針對性的比賽也沒什麼不妥。。。想找 pure algorithm contest 可以去做 IPSC 啊。。


這個問題我這幾天一直在關注,主要是一個r姓同學的觀點引起了大家的爭論。

先回答一下題主所提的問題。問題中所提到的編程比賽都是國內公司舉辦的。其中微軟雖然是美國公司,但是編程之美這個比賽只在中國舉行。在國際大公司如Google和Facebook以及獵頭公司Topcoder所舉辦的比賽至今都包括傳統演算法項目,俄羅斯的Yandex, VK和http://mail.ru舉辦的比賽也都很有生命力。Google在兩年前還推出了Distributed Code Jam,即分散式演算法競賽,但是比賽方式也類似於傳統題目,還是提倡選手寫出能夠理論上證明資源消耗達標的程序(資源消耗包括運行時間和內存,對於分散式程序還包括通訊量和數據依賴)。

而國內公司的比賽我在高三之後就沒有參加過了。為什麼呢?就是一個字,爛!我當年對國內比賽徹底失望決定不再參加,是因為那年百度之星預賽為了創參加人數最多的吉尼斯紀錄,搞個了第一名得iPad之類獎品,但是10道題目都是原題,最後比的是誰找代碼快。。。。。。資格賽出原題這件事也不是那麼不可接受,但是你這個資格賽有獎品,還這麼搞,這不是拿大家當猴耍?除此以外,各種亂搞題、甚至錯題層出不窮,就算合格的題目(嚴謹並有一定原創性)也都非常無聊。比賽環境也各種不健全,這個問題現在都做不好(見如何評價編程之美2016? - 知乎)。其實比賽環境這個問題倒是不難解決,掛到HDU上面

競賽命題是一個很難解決的問題。Google的題目質量一直很好,這是靠Google大量對演算法競賽有熱情的工程師義務勞動實現的(命題的工作量和酬勞絕不成正比),Topcoder靠副島真(rng_58)和陳高遠(cgy4ever)等人。國際競賽認可度高,也有更多高手參加,所以有好的題目大家也更願意投稿給這些比賽。國內比賽聲望不高,除非出高價,否則得不到優質的原創題目。但是這些公司顯然並不願意拿出足夠的資金來把比賽辦好。而且,世界上演算法競賽最發達的地區是前蘇聯各國,除了中國大陸以外,日本、波蘭、台灣、美國、韓國的水平也和中國大陸不相上下。這樣只在中國舉行的比賽的影響力在競賽界是很有限的。

最後,個人感覺Google, Facebook等公司舉辦比賽主要目的是branding,就是擴大自己在優秀人才中的影響力,而不是直接通過競賽進行招聘。GCJ的冠軍被Facebook員工拿了什麼的很正常,因為Google員工根本不允許參加。還有即便打進決賽Google也不會因此給你發offer。

--------------------------------廣告的分割線------------------------------------

打個廣告,5月24日晚我將在B站直播ACM/ICPC總決賽,歡迎大家來觀看陳老師的精彩表現。

5月24日ACM/ICPC總決賽直播(測試中) - s-quark - 嗶哩嗶哩直播

--------------------------------保證不會TJ的分割線---------------------------

先寫到這,下面會談一下OI和ACM的內容是否合理的問題。


謝邀。

我離開傳統演算法競賽挺久了,離開的時候還是那個線段樹必考的相對簡單的時代。我想各大廠退出傳統演算法競賽的一個原因是,目前 ACM/OI 競賽考察內容越來越偏向「智商選拔」,和大廠普遍的人才需求方向相去甚遠,各種花式DP、數據結構、初等數論已經不是實際工作中必備的技能棧,更多大廠是抱著「既然你能理解並實現插頭DP,那麼以後你應該在機器學習深入領域上也能有所成就」的心態去招人的。

其實這個問題真沒什麼好討論的,現在時代如此,大家張口閉口的大數據、人工智慧、機器學習,你說這些大廠總該花點錢表現一下自己對這些科技的關注度和熱心吧?或許公關和企宣才是人家的第一目的。

掃了一些回答,有人說搞 ACM 的應屆生代碼質量不行,充滿了各種 hack,那你是覺得不搞 ACM 的應屆生代碼質量就優秀了?真希望你自己能作為校招面試官體驗一下,平均上來看,不搞 ACM 的,只會更差,而有 ACM 參賽經歷的,往往還有更好的實際解決問題能力。

還有人說大廠搞數據挖掘競賽是為了拿選手模型去做商業化運用,這就更可笑了,大廠養了一批每年要花上幾千萬的演算法碼農不用,去用學生幾天內做出來的模型?數據挖掘競賽不就是比比誰先對測試集過擬合嗎?傳統演算法競賽可以打表,可以卡時間隨機優化,可以二分答案,Kaggle 競賽上也可以有各種模型融合的 trick,競賽為了追逐名利總歸有它功利性的一面。我這還有一個歷史三年收益超過 3000% 的量化交易模型,你們要不要拿去悶聲大發財?


舉辦演算法比賽其實很多時候費力不討好,出題組織等工作任何地方做的不好可能都會影響公司口碑,都做好了也並沒有帶來太多好處,給冠軍獎勵也不代表人家就能來你這個公司。

機器學習比賽雖然搞砸了也影響口碑,但你可以把實際產品遇到的問題放出來讓大家做,排名靠前的模型直接拿去用,得到的利益可能就遠高於辦比賽的成本了,直接砸錢挖排名靠前的人也比招單純一次演算法比賽排名靠前的更能快速直接的為公司做貢獻。


@阮行止 的觀點實在是太可笑了。

下面我來逐條批駁一下。

從高二開始,每次我學會一個新東西,我會感覺十分開心;然後想到這個數據結構或演算法,在我以後的工作中不會有任何用處,內心就無比凄涼。

任何事物存在就有它的價值。很多東西你覺得沒用,只是因為你不知道而已。

我就不談 RB-Tree 之流在資料庫之中的應用了,因為這些數據結構說實話,離 OI 還是比較遠的。我就舉個你可能比較熟悉的,並且 OI 中確實會用到的例子:Splay。如果之前你覺得 Splay 是個沒用的數據結構,那麼你不妨來看一下 Chromium 中的一段你熟悉的 [Splay 代碼](https://chromium.googlesource.com/v8/v8/+/master/src/splay-tree.h)。

建議不要對自己不了解的事物妄加評論,輕易地去否定一種東西存在的價值。

就像你證明了哥德巴赫猜想,你狂喜,沉醉,你登上了王位,你躺在一片鮮花與掌聲中。轉頭來,突然發現這個東西對人類沒有任何用處。這種悲哀感和無助感是深入骨髓的,你會發現你所做的一切都是在浪費光陰。彷彿你的研究失去了意義,你的成果唯一的用途就是被別人研究。

被人研究並不等價於沒有意義,理論是指導我們前進的方向。理論往往先於實踐發展。如果沒有理論,我們就將止步不前,永遠停留在現有的階段,毫無進步。

作為一名高中生,你應該在物理書上看過這個故事:

在法拉第展示第一台發電機時,一位貴婦問道:法拉第先生,這東西有什麼用呢?法拉第答道:夫人,一個剛出生的嬰兒有什麼用呢?

我想這個道理在這裡同樣適用。相對論被提出的時候,有人會知道他會在導航定位系統中發揮重大作用么?你永遠不知道你提出的東西說不定將來就在什麼地方被用上了。

況且你的成果被人研究難道不是為人類作出了貢獻?科研難道不是一件很美好的事情么?想必你也無法理解將一樣東西的理論複雜度降低了一個微小的量級的意義吧。照你這麼說,純粹數學研究就應該廢掉。就算你的成果沒有什麼作用,你得到這個成果的過程中所用到的方法也會給人以借鑒意義的。

PS:你竟然覺得證明哥德巴赫猜想沒有任何作用……

很不幸,OI正在離實際生活越來越遠,屠龍之術正在一步一步地流行起來。OI就像小學奧數一樣,玩到後期,就只能教給你一些亂七八糟的伎倆,以此來衡量選手的智力。

你的字裡行間透露出你對所謂 「伎倆」 的不屑。

你聽說過 「煉丹」 這個詞么?我想提醒你,以後的工作中也有玄學,而且可能比你現在的更玄。我認為 OI 中的伎倆和你以後在工作中遇到的玄學並沒有特別大的區別。

況且 OI 中的伎倆也並不是你說的那麼一無是處。OI 中的伎倆背後有它自己的科學道理。當然這裡我不知道你所說的 「伎倆」 具體指的是哪部分,如果是指一些奇怪的演算法的話你可以參考第一段,如果是指卡常數技巧的話,我想告訴你的是,OI 中的卡常技巧,背後是 CPU,cache,內存,磁碟 IO 相關的知識,以及並行計算的萌芽。而這些都是你所喜愛的專業知識

到了這個份上,OI已經和閱讀理解題無異。

這個我不評價。但這不是 OI 的錯,這顯然不是 OI 的初衷。

我寫爬蟲,寫評測機,寫網站。我寫這些東西的時候,從來沒有自己寫過任何高級的演算法或數據結構。自己寫的總沒有別人寫的跑得快;我可以省下造這部分輪子的時間,用來完善功能或是改善UI,最多偶爾寫個平衡樹或者AC自動機。

這是因為你現在維護的是一個小項目。倘若你的項目達到了一定的規模,那麼你就會遇到性能瓶頸,你將不得不用到各種各樣的高級演算法及數據結構。

大部分大公司是不會照搬開源庫的。其一是因為開源庫往往不能滿足實際業務的需要;其二是開源庫的發展並不是可控的,如果哪一天,你使用的開源庫的作者,把這個庫下架了,或者他停止維護了,那你就懵逼了。小項目可能不用擔心這一問題,但大項目就必須要仔細思考一下這種可能了。因此自己造輪子在很多情況下是必要的。

對於任何東西,我們要知其然,更要知其所以然。如果你僅僅把庫當成一個黑箱來用的話,想必也只能做一點小項目了。

我希望從事嵌入式開發,或者網路安全行業。如果我把用來學OI的時間用來學我的專業知識,我的收穫會遠大於這幾年所學到的。

競賽並不適合所有人。當初既然選擇了競賽就必須要清楚地認識到這一點。並且我認為,你目前所涉及到的 OI 知識並不是很難,而專業知識並沒有你想像的那麼簡單。因此你 OI 搞不好其他的應該也好不到哪去。你在 OI 沒有戰勝別人,你就這麼有把握在其他領域你能比別人強嗎?

退一萬步講,專業知識在大學總是要學到的,而從 OI 中學到的思想,大學是不一定會講的。我認為你提前學習專業知識意義不大。

OI選拔的是智力超群的選手。但是很可惜,社會要的是能完成實際需求的選手。兩個集合不存在包含關係。與其選OI選手,不如一步到位選完成自己需求的選手。

這完全是胡說八道

正常的 OI 選手在經過大學四年的科班訓練之後,都能達到你所說的 「能完成實際需求的選手」 的水平。

從高校招生的角度看,你應該思考一下,為什麼近幾年高校對 OI 選手的自招力度一年比一年大,為什麼高校更願意選擇頂尖的 OI 選手而不是純粹的文化課選手?你如果參加過 THUSC 或者 PKUSC 的話,負責招生宣講的老師會告訴你,OI 選手與文化課選手之間的差距以及高校喜歡招 OI 選手的原因。高校發協議不是白髮的。

從就業的角度看,你可以去統計 ACM/ICPC 選手的就業情況。ICPC 得獎選手和普通計科生的就業情況之間差了 100 個碼農。OI 選手由於其(平均意義上)更高的智商,自然也更能完成實際需求。因此更受企業的歡迎。

希望你能夠客觀地評價 OI,不要一味地責備 OI,將自己的怨氣發泄在 OI 上。
---------------------------------------------------------------------

回到題目本身。

現在企業舉辦的競賽走向 ML 向的一個重要原因是以較低的成本為自己的業務尋找更優的解決方案。這些比賽往往只給第一名/前幾名一定數量的現金獎勵,而剩下的選手只能得到一些微不足道的紀念品。但通過舉辦比賽企業會得到所有選手提供的方案,其中不乏有借鑒意義的解決方案。因此企業用一個相對較低的成本取得了大量解決問題的方案。

相比之下,演算法競賽的收益就沒有這麼直接了。演算法競賽的第一名,甚至前幾名,都不見得就一定會到你的公司去上班。當然部分有實力的大公司(FHC,GCJ 等)仍然熱衷於舉辦傳統演算法競賽。

因此企業退出傳統演算法競賽,有其經濟方面的考量。


小學搞LOGO,初中高中搞OI,那年還是用pascal,現在工作了用機器學習。

其實OI還是挺有用的,搜索、動態規劃等在平時也經常會用到,一些不懂的演算法搜一下也經常已經有人解決了,網路流複雜一些實際或許沒用到,也可能是自己學藝不精,可以用的卻沒有用。整體而言,這些一般屬於discrete optimization/combinatorial optimization的範疇,學起來挺有趣的。

機器學習更多屬於continuous optimization,比如svm是典型,求解用到了很多優化的技巧。現在的深度學習則可以運用大規模計算。

整體而言,傳統的演算法,已經在各行各業已經有了非常廣泛的應用,以至於人們不會強調「這個東西我用了動態規劃來解決」;但人們會喜歡說「這個我們用了最前沿的深度學習模型」,造成一種錯覺,好像傳統的沒用。但實際上很多說自己用了深度學習的人,或許壓根就沒用。

傳統競賽已經有了NOI/NOIP/ACM/IOI,各個公司搞的競賽本來就層次較低,他們想招人直接從這些競賽招人就行了,沒必要自己搞。但其實我覺得他們自己搞數據競賽也未必能取得好的效果,比如大學生金融建模、量化交易大賽都搞了這麼多年了,也沒啥成果,因為每屆大學生本質上都是從零開始,研究成果很難應用。在金融是這樣,我覺得在任何領域也是類似的。很多公司也是獵奇心理,總覺得牆外的花更香,自己員工全職幾年研究不出來,寄希望業餘的學生幾個月能研究出什麼?


  1. 正規/半正規組織舉辦的傳統演算法競賽水平已經非常高了,區分度也不錯,各個層次的人看幾場比賽就能看出來, 再辦也不會更好
  2. 傳統演算法競賽有固有的局限性,題目相對於現實情況必須更理想,滿足很多很強的約束,否則就沒有太多深入分析的空間;數據必須十分乾淨,不需要進行太複雜的處理,否則會擠壓選手思考演算法的時間。
  3. 拋開傳統演算法競賽,仍然有其他考察演算法能力的競賽形式。即使我們不談純機器學習/數據挖掘競賽(我覺得這些其實不算是純演算法競賽,即使是廣義的演算法概念),也有很多選擇,比如:給出一些NP-Hard的問題,讓大家去實踐,看誰能給出更好的解or用更高的效率得到精確解。(當然這樣一來就沒法搞成ACM/ICPC那種刺激的類電子競技的形式)
  4. 即使拋開演算法競賽,也可以通過面試來考察演算法能力,雖然面試不能像競賽一樣一次性的大批量提供出大家都可以參考的結果,但是面試本來就是公司招人的必要環節,而且面試中可以觀察被面試者的思考過程,通過交互獲得更個性化更完整的信息。

沒有回報吧。。還記得當年百度之星被谷歌員工拿了冠軍


百度之星不是純演算法競賽吧……在線賽是演算法,現場賽是逗逼……


以公司為主體舉辦編程競賽太沒有性價比了,不合算,還是充分利用公共編程競賽合算啊。


TCO GCJ FHC每年都辦說明了什麼呢&>&<

當初搞傳統演算法競賽,是為了吸引高手報名,通過比賽選拔/招募人才。

現在時代變了,搞傳統演算法的人趨於飽和,機器學習/數據挖掘人才難覓,企業亦是求賢若渴,當然要改變篩選方法。


事實證明,這類比賽還不如機器學習比賽,可以直接解決公司實際問題


我覺得這個問題下目前一部分思考上有個誤區,,你們不能把機器學習和傳統演算法看成兩個完全沒有聯繫完全獨立的東西啊......

人家企業只是換了種更適應實際工程需求的方法來挖掘人才而已。

講道理你們身邊哪個公司招機器學習崗面試不問純演算法的??

演算法給人帶來的好處是潛移默化的,並不只是讓你學完可以手擼KMP或者手擼線段樹什麼的這種淺層的東西,我不覺得連時間複雜度都不會算的人能寫架構出漂亮的機器學習數據挖掘方面的代碼。


看完了所有回答,說一下自己的看法,不對的地方請多包涵。
首先題主的問題是,為什麼公司退出了舉行演算法競賽,轉而為機器學習數據挖掘類競賽。這裡單單是講了這麼一個現狀,但是我感覺到部分答主把這個問題看成了對演算法的否定。
接下來,演算法真的沒有意義了嗎?作為曾經參與過acm的選手來看,這類比賽是很有意義的。通過這一類的比賽,可以讓大家更深入的理解演算法與數據結構,並在調試中提高debug能力等。某位答主講,參與過acm的人員,帶起來相比之下比較輕鬆。以及,大家一致認同的,在面試時需要對演算法有一定的了解。
那麼,為什麼企業減少了演算法競賽呢?首先依託的是計算機行業的飛速發展,對於性能上沒有太過苛刻的要求。其次,現階段的演算法競賽已經很多,藍橋杯,acm省賽區域賽等等,有對演算法要求的職位可以從這一類里選擇。同時,因為大數據的發展,有了對機器學習這一類需求,於是這一類競賽例如泰迪杯,以及最近的騰訊設計廣告大賽慢慢變多。
最後我個人的總結是,acm類獎項含金量依然很足,但是可能相對比以往少了一點點。數據挖掘機器學習,本身也是由大量充滿智慧的演算法組成。但是數據分析的思維,和演算法分析是兩個概念,兩者都很好,所以沒有必要拿來比,計算機在將來的發展是多元化的,期待百家爭鳴的那個時候。個人意見,歡迎討論。


證明人類的需求已經開始複雜到不能每次都從演算法開始造輪子了。


因為我不會,並且我快畢業找工作了。


因為這件事出發點本來就不對。

OI的方向本來就不是軟體工程,大多數公司並不關心演算法競賽中的那一套東西,也不需要理論方面的內容。當他們在這件事上看不到收益之後,不做這件事了有什麼奇怪的嗎。

反對所有因「演算法競賽中的問題和實際業務需求相差很大」而認為演算法競賽沒有意義的答案。演算法競賽本來就是考察選手的演算法,數學建模能力。如果我做一個演算法題還要去考慮輸入數據的合法性,那已經偏離了演算法競賽的本質了。

反對所有認為演算法競賽是在如何優化演算法速度,認為計算機速度的提升讓演算法優化無必要的答案。這類答案的答主恐怕水平非常有限,破乎現在強答很棒棒哦

希望非ACM/OI相關的人能更加理性,多一些了解之後再來交流這個問題。這個問題下的某些回答真是不忍直視,按照你們的邏輯,數學物理競賽要不要也批判一番啊?

問題就在那兒,我想解決它。你要問有什麼意義,來私聊我告訴你啊

利益相關,在役OIer


但是有更多的公司開始承辦、贊助演算法競賽了啊。
百度之星沒了,是挺可惜的,還沒拿過衣服。
另外,那些機器學習/數據挖掘類的比賽真是毫無意義,就是打著演算法的旗號招搖撞騙的,不是真正意義的演算法競賽。


推薦閱讀:

TAG:演算法 | 數據挖掘 | 編程 | 機器學習 | ACM 競賽 |