ACM 競賽高手比其他程序員水平高很多嗎?

感謝各位的回答,我適當的總結一下回答。
1. 你們認可ACM是一種很直接的評價程序員水平的體系
2. ACM競賽會帶來很多機遇(深造or工作),同時又是一個不小的挑戰
3. 為競賽而競賽的事情不可取

歡迎繼續回答、評論或者補充。(請勿修改問題)


例外肯定有不少,但統計意義上來講我覺得是的。不過我覺得很多人把因果搞反了,不是因為他去參加了ACM才比普通程序員水平高,而是正因為比普通程序員高,才成了ACM高手。

(以下是知乎上流行的故事體……

在我開始參加ACM的那個年代,事情是很單純的。你想想,一個踏入大學校門一年半載的本科生,新鮮勁已經過去,上課時老師在上面念PPT我們在下面睡覺,只要考前劃重點通宵看幾天能給過的大家就是一致好評,所謂學生社團不過是跑腿打雜還時不時傳出黑幕,沒有女朋友也沒有找到女朋友的任何可能,dota打完幾把、AV擼完一管之後,心頭只剩無盡的空虛。

作為一個有一點點上進有一點點自負的好同學,這些(潛在的)牛人一腔熱血能夠揮撒的地方實在是非常有限的,ACM就是不多的選擇之一,而且因為它客觀,容易量化,對於追求理性的人來說格外有吸引力。至於所謂的面試題、保研加分什麼什麼的,我們當初決定參加ACM的時候可從沒聽說過,只是後來很幸運地發現,ACM恰好有一些好的副作用。如果沒有ACM,牛人也會找到另外的有趣的東西來消耗過剩腦細胞的。所以,在我看來,等價的問題有很多:

編譯器高手比其他程序員水平高很多嗎?——是的
資料庫、分散式系統高手比其他程序員水平高很多嗎?——是的
操作系統高手比其他程序員水平高很多嗎?——是的
機器學習高手比其他程序員水平高很多嗎?——是的

所有喜歡思考、熱愛編程而不是只把它作為混口飯的工具的人,最終都比其他程序員水平高很多嗎?——是的


玩ACM的目標並不是為了找一份好工作,如果是為了能找份工作請研究各種工程。
玩ACM純屬是覺得好玩,玩得開心,並不帶有太多的功利性質。雖然無可否認acmer在面試一些演算法方面的問題上有著天然的優勢,但是一般公司面試的演算法問題難度比國賽的題目難度都要低。大多數都是一些很基礎的問題,考察的是candidate的把握細節的能力,這些能力對於acmer面試時都很有優勢(切題踩坑中trick多,自然會多考慮邊界、特殊情況的問題)。
很多公司喜歡招一些比較優秀的acmer,雖然他們暫時工程能力上比較弱,但這些優秀的acmer一般都很聰明,能把acm里的東西巧妙地轉化現實工程繁雜的問題,至於一些api的使用,只需要給他們一點時間就能熟練使用了,成長速率也會更高。


大多數ACM競賽高手在進入公司以後,是要比大多數同專業普通學生出身的工程師水平高一些的。
我認為對程序語言本身的理解,對常用演算法的熟悉和清晰的邏輯思維能力是他們比大多數同工齡工程師水平高的原因。


學生時代比99%的同學都強,剩下1%的是因為各種原因具備相對較強的工程能力的同學。

參加工作以後,由於ACM隊員出路都不錯,只要願意給公司打工,基本都能進一線大廠或明星小團隊,工程能力也會相對於其他同學更強一些。

所以,大概率上,ACM隊員會比大多數CS同學強。

但是ACM有一部分唯演算法論唯競賽論的人,不僅見識短淺而且令人討厭,極不可取。


稍不太同意 @何亮的觀點,原因並不主要在於ACMer比普通程序員水平高而參加ACM,因果關係反了,而是因為參加了ACM,經過ACM長期的演算法與思維訓練,才比普通程序員水平高。大部分普通程序員經過長期的演算法訓練,依然可以達到很高的水平。


培訓我們ACM的老師, 是數學系的. 多花點時間在數學上比在ACM上值得.


至少不會出現

for(...) {
//...
if(a != 3 || a != 5) continue;
//...
}

或是

int a, b, c;
//...
a = (b == c ? b : c);

或是

string s;
for (int i = 0; i &< 10000; i++) s += i.ToString();

這種應該拖出去斬了的問題

============================================

吐槽下知乎的選語言的這個問題,你丫就不能固定到頂欄?!滾輪一滾就沒了,簡直ri天


贊同何亮的回答。至於因果關係,我想更加詳細地解釋一下 。直觀上看,厲害的ACMer確實是因為通過了大量的ACM訓練才變得水平如此之高。但本質上,還是因為他們有這種熱情,他們切題如同上癮一般。我見過的ACM高手無一例外都非常痴迷編程,寫代碼對於他們來說和玩遊戲沒什麼區別。很少見過對編程沒什麼興趣,僅僅是憑藉自控力或者功利心的驅動而成為ACM高手的人。我甚至敢大膽地說,如果一個人參加ACM的目的主要是保研、出國或者去大公司工作,他幾乎沒可能到達金牌水平,更不可能到達世界級水平。
聽過一段話:「經驗是廉價的。只要有時間,你就能有經驗。技術本領難求,但事實上只要你努力就能得到——很多人都能做到。但是態度就不一樣了。你要麼有,要麼沒有。我們要找的是對編程有熱情的人,他們離不開編程。」
如果現在有一個剛上大學的計算機系學生,天資平常,他在編程以及演算法上面的基礎為零,但是他對這些有著無比的熱情和痴迷,他能夠像沉迷網遊一樣沉迷ACM,沉迷編程,那他必定會成為ACM高手,必定會成為編程大牛。


有人練了無敵內功,有人練了獨孤九劍。反正都要比什麼都沒練過的強一大截。

區別在於內功深厚的總有天會得了劍譜,練熟了劍法的人若沒有吸星大法難免會有內力不濟的時候。

你很難說競賽有什麼用處,即便是谷歌的面試題對競賽來說也是水的不能再水。起碼可以肯定的是,以這個人的智商和基本儲備,他大有可為。


作為某弱校的大二菜鳥,在刷完一道水題之後跑到知乎放鬆一下。。
作為一名在校生 打鐵選手只是想冒昧說一下自己的看法,求輕拍。
首先不可否認在外人眼裡ACM相對於大學這個花花世界簡直就是枯燥到爆。那麼那些義無反顧的將自己最寶貴的幾年花費在這上面的ACMer最起碼有著對編程的狂熱,對夢想的堅持不懈。而且在中國這個競爭如此激烈的大環境下,有太多太多選手註定會因為一些原因得不到對等的回報,比如教練(我們學校直接沒有教練。。全靠學長帶),隊內氛圍等等。可是我們仍然奮力前行著,在不清楚結果的前提下。綜上種種,註定了一個堅持到最後的ACMer有著比大部分同專業相比更加堅韌的性格和強大的心理素質,即使他沒有拿到像樣的獎項。我感覺這些素質要遠遠重於所謂的技術。這更像一筆不可多得的人生財富。


競賽在國內都變味了,太功利走不遠的。大學就那麼點時間,那麼多東西要學,為了比賽化太多時間去搞題海,得不償失。當然,比浪費時間看電影玩遊戲的還是強得多


恩,搞過ACM的,一般來說至少會寫程序,寫的速度還可以,也很少犯一些傻逼的演算法錯誤……
沒搞過的,你不知道他到底能不能寫程序,寫得快不快,是不是會用一個N方的演算法去做一個原本就得用線性演算法搞定的事情。
除此之外,應該差不多。


我有個同事大學時獲得過ACM全國金牌還是冠軍什麼的,但由於是做應用開發,所以……只能說他學的東西在工作中用到的比例相當少,而這個東西花了兩三年時間去弄,就目前來說,投入和產出不成正比。
當然如果他轉行去做演算法類工作,搞過這個就比較有優勢了。


推薦閱讀:

寫代碼的人沒有賣房子的人掙的錢多,大家怎麼看待這個事情。是不是就認為賣房子的人比寫代碼的人有出息?
求推薦護眼檯燈?
如何成為一名優秀的演算法工程師?
在當下廣泛流行的IT產品中,哪些有非常坑爹的設計?
外界對程序員都有什麼樣的刻板印象?

TAG:程序員 | ACM競賽 |