OI、ACM選手在學習CS時有哪些優勢?

這類競賽的關注點似乎在於演算法,也就是解題,感覺沒有特別偏計算機組成之類的。但是,很多有競賽基礎的同學在學各種CS的基礎課時都比較得心應手。這是為啥呢?參加競賽鍛煉到了哪些能力,使得學習CS變得順暢許多呢?

我能想到的就是,智商,興趣,毅力,動手能力,高質量地完成競賽題也要知道各種CS知識呀。

歡迎夾帶私貨。


對於我個人來說就是動手能力。

小學一年級開始類似OI的競賽之旅,直到大二每年參加一次。並沒有傾注太多的個人精力(大部分時間玩遊戲了...),所以也沒拿過有份量的名次。在知乎見到太多頂尖的OI和ACM大神,各種競賽頭名或金牌,看了他們的經歷景仰之心油然而生。

但他們的成功我們無法複製,我想更多的人和我差不多,參加競賽也多是打瓶醬油回家。這樣參加競賽的意義就在於養成coding的習慣,積累代碼量。比賽時高深的演算法題看不懂,普通的水題做對了也滿有成就感的。所以我在學操作系統、網路、組成原理等CS基礎課的時候很多東西都要自己寫個簡單原型出來,不求優雅高效,只盼working足矣。這相比於很多隻為考試而學的同學來說就很有優勢。


第一點是智商,或者優雅的說是學習能力。

一個受OI/ACM熏陶多年的人都培養出了「分析問題,解決問題,用最快的方式解決問題」的職業習慣,這種能力在學習任何知識時都是有用的。

第二點是實戰經驗。

長期寫代碼的經歷讓我們在學習到cs知識時能更切身的體會到計算機為什麼要這麼設計。

「原來堆和棧是這樣實現的啊,難怪動態內存還有遞歸都會慢」。

「緩存這個設定好機智,難怪按行訪問矩陣比按列訪問要快」。

「我說怎麼我把代碼弄這麼短反而跑得慢,原來是編譯器看不懂我的代碼所以優化得不好哦」。

普通學生學到計算機組成時多半是「what the fuck,搞這麼複雜有病啊,電腦能用不就好了嗎」

和沒有文化的李雲龍打了那麼多年的仗去軍事課堂輕鬆碾壓科班出身的學生是一個道理。


覺得Debug能力相對其他同學強很多


學習能力比較強,在演算法設計方面會比普通人更敏捷一點,其他的其實沒什麼區別,以後想做程序猿的話仍然是每天堅持多寫一點代碼,工作上寫的代碼,說實話跟ACM完全是不同的,ACM只能算是一個經歷,一個讓你發揮敏捷、演算法、思考的競賽,參加過ACM的同學至少在編程方面不會弱,而且在簡歷上是個加分項


刷槍,加速,快刀,一鍵加彈買雷,自動爆頭,優勢太大了


感覺就是練武內功一樣,內功好了,學其他招式就更能發揮威力。


推薦閱讀:

25歲 零基礎 想入行IT的困惑?
新手怎樣開發一個谷歌瀏覽器的插件?
ide和編輯器有什麼區別?
IT行業到底是怎麼一回事,是否能科普?如果可以如何科普?
中國的程序員是否過多了?

TAG:編程 | 計算機科學 | ACMer | ACM競賽 |