普通本科生應該堅持ACM嗎?

非211一本學校,軟體工程專業。學校搞ACM的水平不高,最好的大概就是區域賽銅牌水平。

大一開始接觸ACM,暑假開始學演算法,但條件有限,基本靠百度自學,覺得很吃力。

但是覺得搞ACM很有價值,能學到所謂的「核心價值」的東西。

還是很想學下去,在這裡能得到的知識有限,想多一些途徑去學習。

另一方面,據了解,在以後工作中,商業程序代碼很少涉及到高效演算法。

按照現在這樣下去,能不能出成績很難說。

也不知道堅持下去有沒有意義。

恩,本人現在大一,下學期大二,以後打算考研。


雖然我從心裡喜歡這個比賽,但我並不鼓勵每個人參加。並不是每個人在每個時期都適合參加這個比賽,且適合的人選也並不代表一定能取得好成績——比賽場上是 沒有「一定」的,任何一個選手都必須有勇氣承擔風險,就像所有其他有潛在回報的事一樣。另一方面,對於所有下定決心參加比賽的選手,我鼓勵他堅持到底,因 為只有這樣才會受到真正的磨練。

在「參加」與「不參加」的岔路口上,大多數選手被兩個問題所困繞。第一個是「我能獲獎么?獎會給我帶來什麼好處?」,第二 個是「拋開榮譽,從比賽中學到的東西值得我花費這麼多時間嗎?」。第一個問題我無能為力,也不願意回答,因為這取決於很多複雜的因素。而這些因素,更多的 要靠自己把握。而對於第二個問題,我可以毫不猶豫的說:答案是肯定的,但前提是要視野開闊,不要把自己局限在一個狹小的空間之內。

大家都知道, ACM/ICPC競賽要求選手在理論上具有一定的知識和能力、編程上要求速度和正確性,但我認為更重要的一點是:ACM/ICPC培養選手實踐能力和洞察力。這兩點相對於理論和技術本身而言更難培養,也是高素質人才更需要的。這裡的實踐能力因追求生產效率和創造性而顯著區別於依葫蘆畫瓢型的體力式的「技術 能力」,而洞察力讓有心的選手往各方面發展,讓自己的才能展現到計算機科學、自然科學乃至藝術、人文方面的各個角落。

一位MIT教授曾在課上對學生說:從 某種意義下,計算機科學不是關於計算機的,它也不是一門科學。對於這樣一個開放型事物,如果能夠用洞察力尋找方向,用效率和創造性開闢道路,發展空間將是 巨大的。

今天中午,我的ACM老師這樣說。

--------------------------------------更新於2015年2月26日------------------------------------------

距離這個問題的提出已經過去了大約一年半的時間,這個問題也火了起來,我既是這個問題的提出者,現在大概也有資格寫下我自己的答案。

現在知乎上的少了,無意中看到適牛 @適渣 (你肯定不知道我,我也只是你的小粉絲一枚(?ˉ?ˉ?))贊同了我在這個問題下的答案,於是就想更新一下我的現在。

總之,我還是堅持下去了。學校的水平仍在發展進步,現在大概是銀牌水平了。

經歷了兩年集訓,奮鬥,組隊,各種邀請賽,大三上參加區域賽以銅牌第三名遺憾收尾。

回到應不應該這個問題,我想答案毫無疑問是應該。我愈發覺得,正因為我們只是普通本科生,才應該找到一個正確的渠道去努力到能夠接近其他好學校的學生,而ACM正是一個這樣公平的平台,只要付出努力,學校、出身都不是問題,前有kuangbin巨巨給我們豎起好的榜樣,隨著ACM-ICPC的不斷發展,我相信更多的人會從中受益。其次,我再次感受到,有些東西是可以通過努力來彌補的,你會為未來迷茫,卻不知道該做些什麼,這個時候你最應該做的就是堅持你的選擇,沒有人會因為用盡全力而後悔, 只有人因為彷徨猶豫而錯過。

我的大學快要結束了,現在的我成績拔尖,學生生涯一路順風順水,從提問時的年輕和稍有勢利,到現在我已經在我的位置上成為一名佼佼者,至少已經收穫了我想要的。除了上面這些,我想最珍貴的是ACM給了我最好的隊友和一輩子的好夥伴,最無私的老師和最快樂的旅途。這麼長的時間和那麼多親歷的感動會告訴自己這是一場多麼棒的旅程。

當然,我也感謝我自己,沒有聽信別人隨口的諷刺:與其猶豫還不如不做。我依然追隨我的內心,做了最正確的選擇。


個人認為,搞ACM為我帶來的是:

1: 編寫短代碼的能力,水平巔峰時期,敲幾十幾百行代碼,不改就能過是很正常的。的確ACM不能提供你開發設計維護工程級別代碼的能力,但是工程級代碼也是由短函數一點一點寫出來的。搞ACM對工程上的代碼能力有一定的幫助,當然也有一定的局限性。

2: 演算法能力以及思維能力

演算法和數據結構就不用說了。不要說演算法沒用,往往真到了用的需要時候,不懂演算法的人根本就不知道這裡可以改改演算法以獲得優化。另外,演算法和一些科班的知識聯繫很大,這就好像一個樹的結構,演算法知識有助於你記憶和迅速理解其他的應知應會的知識。

我在一個階段之前,只會套模版。能力遇到了一個瓶頸。最近我才慢慢發現了問題,問題就是在思維邏輯上。實際上許多題目不會並不是因為沒有相關知識,而是思考方式不對。在這個層面上,ACM就好像當年的數學競賽,可以說比較 tricky,也可以說是訓練思維,這就見仁見智了……

3: 自學能力不解釋……

其他好處不一一列舉,譬如可以解出各種面試題,到處比賽順路旅遊,結識同道道友(甚至找到了妹子)等等……

總而言之,我建議樓主搞,但要科學的搞。成績之類的往往是水到渠成的,也往往是強求不得的。但話雖如此,花費在上面的時間和努力不會白費,你的收穫會對得起你的付出。


必須堅持。

因為只有堅持了,你才會發現,

智商上的差距是無法逾越的。


不一定要堅持acm,但一定要堅持一樣東西。哪怕堅持追一個妹子也行。


其實我覺得大學生搞acm是個浪費時間的事情。但如果搞得好,面試的時候太佔便宜了。到時候你可能輕鬆拿offer,連研都不用考。

UPDATE一下吧。

之所以說acm浪費時間,是因為如果你想通過acm競賽訓練的過程來獲得一些能力的話,完全可以更有針對性的去做,而不是做題。當然,在「讓自己更牛逼」這個目標面前,玩遊戲看動漫也算「浪費時間」,但做愛做的事情可以讓自己心情更好,更快樂,這比什麼都重要,勞逸結合也可以讓自己在做「正事」的時候效率更高一些。所以覺得搞ACM很快樂就去做吧,何況對於CS學生來說還是挺有收穫的(只是同樣時間獲得的收穫不如其他更好的途徑),不愛了就算了。

至於「其他途徑」,我覺得可以拿美國的高校教育和美國的ACM水平舉例。美國人搞ACM競賽的很少,但不能否認美國的CS教育最牛逼。學生有各種方式提高自己,其效率都超過ACM競賽(如有人說的學編譯原理),日後當碼農、搞科研也更有用。甚至只要好好學各個課程寫作業刷GPA都能比較好的提高自己的能力,而國內絕大多數高校刷gpa和提高能力是兩個幾乎獨立的事情。因此,國內的CS大學生,尤其是弱校的CS大學生,稍微有點上進心但不知道自己該學啥的,很多都去搞ACM了。於是在很多弱校,ACMer的圈子幾乎等於牛人的圈子。

至於功利的角度,「面試的時候太佔便宜了」最近幾年越來越要成為真理,只有面試過的人才能深刻理解。如我之前在下面的回復(好像還被人轉淫淫上了。。):「學演算法,會做演算法題是旱澇保收的。目前的情況看,工程能力別太差,演算法越牛逼offer越好。這不科學,但現實。」不過我也不覺得企業這樣做有啥錯,他們無非是想用更小的成本來招到概率上講牛逼的可能性最高的人而已。

還有啊,別把「搞ACM」跟「學演算法」劃等號。之所以搞ACM才能學到演算法是因為大多數學校的演算法課數據結構課太水了。何況不少搞ACM的也無非就是會用演算法會套模板,很多深層次的東西也不那麼了解(包括我)。何況的何況ACM用到的演算法大都也只是「演算法」的基礎。


之前的回答說了不少,都是討論興趣和ACM/ICPC的好處的,基本上回答都挺有道理的,在此就不再反覆贅述。不過其中有回答說「搞ACM/ICPC能不能不要太功利」,我覺得比較遺憾的是這點倒未必總是正確的。對於樓主的提問,我覺得從功利的角度來討論這個問題其實更符合問題本身的核心——後面我還將詳細講述。

首先先說結論:在功利的條件下,弱校ACM/ICPC幾乎是沒有出路的

我個人對弱校的定義是:1、區域賽中不能穩定組出銀牌及以上實力的隊伍。2、近三年區域賽沒有兩隻完全不同的隊伍取得過銀牌及以上的成績。這純粹是我個人的一點看法,很不嚴謹,就不要吐槽了。其實最為公正對所謂「弱校」的定義應該在圈子裡的人自己心裡都有一把秤,實際上你的學校(不是你個人或你的隊伍)能被記住,應該就不弱了;反之,也許你們學校曾經有隊伍拿到過金牌、參加過 Finals,甚至在 Finals 獲得過獎牌,只要是一支隊伍,那是說明不了什麼問題的——那是那個隊伍本身的實力,而並非是你們學校的實力。一般來說,一個學校要真正雄起,需要學校不斷的支持和一個能堅持的教練,而不是靠一個人或一支隊伍。當然,還需要時間。

在這種大前提下,要在弱校搞ACM/ICPC的人,不是有毅力的人,就是單純的人,這兩種人應該都不功利(或者說不會考慮樓主考慮的問題);而能問出樓主這種問題的人,基本上應該最後都放棄了,原因在於,弱校沒有完善的訓練機制,你很難提高實力;沒有完善的傳承和積累,比賽經驗、模板之類的東西,你很難擁有;甚至連關係你都沒有(要名額?區域賽的一些安排?),在目前國內的環境下,困難實在太多。如果你不是一開始就抱著一往直前的必死決心的話,是很難解決這些困難的;即使你解決這些困難,另外兩個隊友也能承受這樣的壓力嗎?要知道,許多弱校都並非是名牌學校,搞了半天 ACM 可能只有一個銅牌,甚至連牌也沒有,這樣對工作的幫助是很小很小的(一個賽區有那麼多隊獲獎,你可以想想有多少人簡歷能夠比你好),再考慮到許多學校沒有這方面的保研政策,很可能最後你就要面對兩頭空的情況,在這種壓力下,你還能好好訓練、好好比賽嗎?恐怕即使到了賽場,一次簡單的卡題就會讓整個隊伍崩潰。所以說,弱校出好成績是神跡不是沒有理由的:拿大神們出來當例子,是因為他們是真神,是真的衝到了最後,但你有考慮過沒衝到最後的人嗎?

為什麼ACM/ICPC中的強校許多是名牌大學?也許你會說是生源,或者是師資力量,又或者是競賽經驗,但以我的觀點來看,這就是一個家底殷實不殷實的問題,人家輕身上陣(這條路不行我帶著學校的牌子還能混個不錯的職位),你卻背著80公斤的大石頭(這條路不行就麻煩大了),這能比得過嗎?所以說只看興趣不是沒有問題,關鍵是連基本生存都保證不了空談興趣,那就是誤人子弟。

所以我的建議是,除非你確定自己興趣很濃,並且心理素質過硬,並且對任何結果都有心理準備的情況下,不妨來搞搞,否則還是好好做點項目,讓簡歷變得好看點比較好。

記住:ACM/ICPC與其說是一個競賽,更不如說是一個賭博。賭博必定有贏家,有輸家。在開始賭博前,請認真掂量自己的賭本是不是足夠,自己能不能承受賭博的結果,不要等傾家蕩產後才開始後悔。

以上僅代表個人觀點,跟任何組織/個人都沒有關係。


如果你對是否堅持ACM抱有疑問,那麼相信我,果斷放棄ACM吧。就我個人觀察而言,在ACM上面略有成就的人是不會有這種猶豫的。你現在的意志搖擺不定,說明你本身並不適合ACM這條路。

這個世界很大,遠比我們看到的,想到的要多。多接觸一下其他領域未嘗不可。正如你所說的,一般的商業項目並不涉及太多的演算法知識,良好的思維習慣,清晰的業務邏輯,整潔的代碼規範,融洽的團隊協作,夯實的編碼基礎,基本的工程意識就足夠你在各大公司混的飛起。越往上走,技術之外的東西顯得越為重要。

我倒是認為,企業所看中的並不是你的ACM成績,而是你在大學期間是否有所為。大學四年,說長也長,說短也短。稍不留神就被各種瑣事所荒廢。ACMer所留念的,並不是他們所取得的成就,而是他們曾經一起A題的青蔥歲月。當你並不知道你該幹什麼的時候,ACM絕對是很懶很直接的好選擇。否則單從學習演算法的角度,任何一種其他方式都比ACM要來的有效率。

對大部分小夥伴來說,ACM是一條路,是崎嶇但又枯燥的一條路。除此以外,紮實的專業基礎和縝密的思維邏輯,最好多點經歷,多點思考,多點積澱,其競爭力同樣超過周圍小夥伴們幾個台階。時刻記住你想做什麼,你的大學生涯才會有方向。

最後提醒題主的是,不管你選擇什麽,大學畢業後都會後悔的。珍惜時光吧少年。


國外公司(典型如Google, Facebook等)面試重演算法和基本功, 參加過ACM/ICPC對虐面試題有幫助. 國內有些公司也開始向這方面靠攏了. 當然不打算從事此類工作的話當我沒說...


我覺得玩ACM-ICPC還是不能太功利,雖然好勝心可以讓人更專註,更有衝勁,更有韌性。但我覺得準備競賽的過程主要還是學習演算法和數據結構吧,演算法和數據結構是很重要。但這是往淺了說,學習到一種演算法設計和解決問題的思維,對於你今後的學習和工作都是大有裨益的。

要不要繼續下去,主要還是看自己有沒興趣的吧。說實話如果單純為了比賽取得好成績,的確需要花很多時間,而且會讓你感覺和其他「正事」有衝突。如果你自己花時間去學習演算法,去閱讀代碼,認真寫代碼,一樣會有很多很多收穫的。而且計算機的知識很多很多,如果你相對演算法,對其他方面更感興趣(編譯原理、網路、安全、圖形學、數據挖掘等等),還是推薦你多花時間在自己感興趣的方向吧,因為你很難做到面面俱到(基本不可能有人能做到),而且不同方向學習的方式也不一樣。


做人能不能不要這麼功利呢?能不能把搞ACM當成是一種興趣呢?

如果你真的有興趣,那麼你也不會要不要堅持的問題了。

搞ACM對於計算機專業的來說就相當於內功一樣。堅持ACM只是為了在本科期間不要停止coding的訓練。而且訓練ACM真的對工程應用上來說基本是沒什麼幫助的。

所以當你沒有什麼更有興趣的事情做得話,那麼就堅持ACM吧。但是不要抱著這麼功利的思想。


ACM在本科初期是一個非常不錯的快速學習的方式,你可以在很短的時間內迅速對一些基礎演算法有充分的理解和使用,同時也鍛煉了自己的思維。

千萬不要高估自己的能力,你現在這個時候很可能對你接下來要做的事情根本沒有一個明確的認識,看起來也不會有一個好的圈子給你指引方向。如果你們學校ACM氛圍還可以的話(先不提水平),那麼我覺得加入進去是不會錯的。

除非,你已經認識到ACM所涉及的領域和你的理想不一致。或者ACM能夠帶給你的提升已經不能滿足你了,你想學更多的東西。


深夜被室友夢中浪叫吵醒,補一發自己的故事:

剛進學校的時候想加點社團什麼的.起初看上了精弘網路(一個校內論壇),但是因為社團招新前看到了精弘自己拍攝組員自己唱的一個MV,唱得實在太難聽,就打消了加入的年頭(原諒這種奇怪的理由吧…).另外想加某社,遇到了一點囧狀.由於鄙人的高中除了準備高考沒有別的事情可以做,每天的生活就是天不亮起床進教室自習,在老師們的全程監視下到晚上十點然後回家洗洗睡.從鄉下到城裡讀書後發現跟素質教育下開出的花朵們根本沒法玩,很多人有豐富的課外活動經驗,還有人中學裡就學過編程,突然感覺報紙上說的高分低能難道就是指我.我拿著除了姓名性別就沒有別的信息的簡歷去應徵,然後就被問簡歷寫成這樣是想顯得自己很拽還是真的沒東西寫,我答曰真的沒東西寫.很遺憾,由於面試人員是個正常人所以我沒有得到進入該社的機會.

幸運的是ACM經歷成了我簡歷上的第一條內容,想加入ACM隊很簡單,九月份開始上C++課,12月有場校賽,上課內容是什麼校賽內容就是什麼.成績足夠好就能進ACM隊.我還記得當初發郵件給教練內容是比賽有道題目大一隻有我做出了,希望能進入ACM隊.然後就當了個快樂的刷題狗,然後就拿點小獎有了簡歷上的第二條第三條.不會被問拿出這樣的簡歷是想顯得自己很拽嗎了.

可能我生性不是特別拚命的人,在沒啥基礎的情況下拿不了特別叼的獎,更多的是耍個小聰明當個小逗逼啥的.但是我很感謝ACM成為我大學生涯的一個入口,也算是職業生涯入口吧,讓我有了某種歸屬感,感覺自己能做一些事情,知道怎麼起步,怎麼堅持,這也算工作中用得上的東西吧.

------

我覺得搞ACM還是值得的.因為這至少是個正規的比賽吧…正規了,屌絲才有玩頭,尤其是學校差的話雖然出去基本被虐,但是在校內你有機會當個領軍人物.之前最高是銅,你拿個銀老師們就會連續很多年在後生面前念叨你了.

鄙校也是非211一本,感覺玩得最好的人都沒有什麼顯赫的家世,從大一到大四,都是在大家眾目睽睽之下慢慢從菜鳥變大牛的.相比之下,家裡條件好的都去玩攝影,賓士這種我們玩不起的東西了.

我舉個例子和高教社杯全國大學生數學建模競賽(以下簡稱數模)比較一下好了.

過程透明性:

ACM:省賽機器判題,亞洲賽裁判就坐在你百步之內的地方,誰什麼時候多出了一道題大家都看得到.

數模:比賽結束了寄一箱paper出去,過兩個月主辦方寄幾張獎狀回來.裁判過程是怎麼樣的?有裁判?需要裁判?裁判是什麼?

比賽結果的信服力:

ACM:雖然不同的賽區會出現某站被虐某站表現得好的情況,但是幾場比賽下來不同隊伍成績好壞基本和學校內部的隊伍排名吻合.

數模:每年都會出現"他們怎麼也能獲獎","他們居然不能獲獎"的嘆息,還被老師詮釋為這項比賽的魅力.

比賽的嚴肅性:

ACM:比賽會檢查學生身份,教練之間互相都認識可以起到很好的督促作用,杜絕舞弊發生.

數模:比賽前還和我們說會有委員會派下的督察經常巡視,結果比賽的時候影都沒見著.賽隊之間串個門套個信息什麼的很輕鬆.教練還會半途很興奮地闖進房間聲稱自己已經看穿題目了照著他做肯定沒問題.沒有任何身份驗證機制,百度貼吧比賽前幾天滿屏當槍手一萬塊一等後付款的帖子.

主辦方比賽成本:

ACM:報名費1000RMB,主辦方需要承擔場地和機器的租用,委託命題或自主命題,組織住宿,頒獎時的文藝活動,為優秀選手發獎金等.

數模:同樣報名費1000RMB,主辦方需要承擔獎狀列印和郵寄成本,以及建立一個數學模型目標是怎樣發獎能讓各個學校持續地願意組織學生參加這項賽事.


別堅持了。說句不好聽的,我沒聽說誰因為很努力就在ACM收割一大片的。

那是高智商孩子們精力無處安放的遊戲,打怪升級,刷題碾壓,四處遊走,互助互黑。最後紛紛拿了MTV的offer,歡樂的告訴你ACM盛產百萬年薪喲~~

其實你作為沒什麼天賦的小朋友,要把自己有限的努力放到更有用一點的東西上。


學編譯原理吧,比ACM不僅知識豐富得多,而且你還有機會寫複雜的程序,鍛煉很多編程的技巧。ACM光刷題的話只能學到一些特別單調的東西,而且幾乎沒辦法用在工作上,只能當娛樂了。如果不知道編譯原理可以幹嘛的話,可以看www.cppblog.com/vczh


先學入門到能把握情況了,判斷下自己喜不喜歡


我高中做過OI,雖然可能比較功利,但其實還是蠻有意思的,很有收穫。到大學感覺花上兩三年去拿一塊金牌不划算(final 就別想了吧,智商估計不夠),就沒有繼續做了,如果只是想要培養自己的核心價值的話,自己在一邊看看《演算法導論》等等一些書吧,沒事也可以做做cf,其實你的眼界還可以放得更寬一些,做一些可能你更喜歡的事情。學計算機的核心價值我覺得是建立在兩個東西上的:數學和英語。(數學是計算機科學的基礎),然後多寫點toy,快樂就好


我是通過ACM

熟悉了STL

嗯,我是C++程序員


我是非211二本學校。學校搞ACM的水平不高。

我上一屆拿了銀牌、下一屆也拿了銅牌,就我這一屆沒拿…… 而我還是我們這一屆最厲害的,直研之後還帶大一的新隊員……

我覺得搞ACM還是挺好的,參加這個回答:

計算機專業的學生除了ACM這條路還有什麼好路子可選擇?

P.S. 就我工作之後的這些年來看,學好英語比什麼都重要。


希望我的回答對你有影響。曾經我和你一樣,在考慮這個問題,當然我們學校是211的,每年都會在全球總決賽拿個前十左右,大學之前沒學過編程,大一接觸acm,我相信只要喜歡計算機都會對acm感興趣,都會覺得有價值,但是,**智商的差距是不可改變的**,我搞了一段時間之後就放棄了,現在依然過得很好,雖然在面試筆試上吃虧,但你總會遇上伯樂的。後來發現,搞acm成功的都有不平凡的經歷,其中大部分是保送生,剩下的不是初中高中接觸過信息競賽就是小學接觸過。我有個搞acm的同學大一就在看人工智慧了,我當時都不知道那是什麼鳥東西。相信我,智商的差距是不能改變的!


我們老闆給offer之前說你競賽不錯還拿過獎,給offer之後就變臉了說實際上ACM學到的東西在工作上的作用是不大的


推薦閱讀:

如何評價機械師筆記本電腦?
無計算機背景本科想申美國人機交互的研究生,有沒有推薦的學校?
在nus(新加坡國立)讀計算機博士是一種怎樣的體驗?出路怎麼樣?
為什麼華中科技大學計算機專業的就業會那麼好?
CS PhD面試(機器學習方向)通常會問哪些問題?

TAG:編程 | 計算機 | 人生規劃 | ACM競賽 |