普通碼農應當如何做以盡量縮小與ACM/IOI大牛的差距?
在此聲明,雖然是一個ACM/OI成績很差的競賽生,但我對ACM/OI也有很深的感情。畢竟,它讓我尋找到了我喜歡的興趣,讓我的工作、學習和娛樂可以結合的很緊密。
但是,不得不承認,再好的遊戲,也終歸是遊戲而已。如果你參加過ACM/OI,你就會知道,ACM/OI針對的是極其特殊的場景下的編碼、演算法和數據結構設計。編碼時間和執行時空的限制,使得一些特定的演算法與數據結構永遠無用武之地。比如說紅黑樹/B樹,作為系統中最常見的高級數據結構,由於實現的複雜程度,在ACM/OI競賽中很少出現。幾乎所有基於磁碟的索引演算法在競賽中都不考察,而這些是操作系統和資料庫設計得基礎。再比如說近似演算法和隨機演算法,由於競賽命題的限制,也很少出現。例子不限於此,而這些演算法和數據結構,都在理論研究和現實世界裡,有著極其重要和深遠的應用。
更進一步說,計算機科學與工程的範圍,遠遠不止ACM/OI所能涵蓋的範圍。單拿演算法與數據結構來說,對複雜度的定量分析,對演算法正確性的證明,在ACM/OI中往往只是『感覺一下』而已的事情。超越演算法和數據結構範疇之後,計算機的體系結構是怎樣的,操作系統、編譯器和資料庫是如何實現的,網路環境下的計算和並行化的計算又有何特點,這些都遠非刷題所能解決。
更進一步說,ACM訓練你去獵殺小動物,可真實的工程更像是荒島求生。在編碼過程中,如何有效管理內存,避免內存泄露;如何處理錯誤情況;如何充分利用語言特性,寫出優雅的代碼(USACO還在用g++3.2/POJ在用4.5);如何有效利用庫和管理項目,平衡性能與coding時間;如何處理大程序的結構;如何避免緩存miss,如何除bug——這些都不是ACM會教給你的。
而這些——遠不止數據結構和演算法,才是計算機科學與工程專業存在的意義。想要真正成為一個大牛,需要做的遠不止刷題;需要的是恆心與毅力;在這條路上,ACM會給你帶來一些領先——但這些領先更多是心理上的:你會多一些對代碼的熟悉,少一些恐懼,熟悉一些演算法;但這些遠遠不夠。
在那片荒島上,學過ACM/OI的人或許對獵殺小動物更加熟悉,但是面對現實的猛虎,這種熟悉並不一定多麼有力。很多Bell Labs的人都是數學系出身,這並沒有影響他們做出影響世界的貢獻。
而如果堅持把ACM經歷看的高不可攀,離那個高度只會越來越遠。
神都是被造出來的在同學影響下,瘋狂玩酷跑,最終也沒超過那幾個騷逼。今天突然發現20多w的成績在女神那裡排名第一,心中默默給基友點贊,因為看他們玩學到好多需要時間才能總結得技巧。
在渣科影響下,瘋狂練籃球,最終也沒機會見面一對一鬥牛贏兩分。前兩天突然發現自己也能帶倆學弟輪波連贏單幹合作樣樣不差,心中默默給老大點贊,因為看他視頻學習學到了很多需要比賽和苦練才能熟練得幌人假動作。
在室友影響下,瘋狂擼前端,現在也沒超過這傢伙得工資。最近突然發現獨立帶小團隊搞前後端寫代碼各種舒心,心中默默給基友點贊,因為看他學得和與他交流學到好多需要經歷和思考才能得到得經驗。
其實nb不nb是相對的,不是給別人說的,重要的是不斷在前進,不斷在思考,學習認為值得學習得,取精去珀,這過程中自己也會nb的。
你懷著這樣的心態可能永遠都無法縮小與大牛的差距。真正的大牛不是說他們的天賦或者自制力特彆強,是因為他們真的喜歡自己做的事,整天想著這件事,利用一切時間去做這些事。就像那些沉迷於網路遊戲的人一樣,熬夜打遊戲不累嗎,在網吧吃個泡麵也得打不苦嗎,可是那是他們的熱愛啊。只不過那些大牛把這種熱愛放到了編程上而已。而如果想著縮小與別人差距去努力,必然很痛苦,也堅持不長久。謝邀。作為一個普通的(前)OIer 和 ACMer,見過許多牛人,我寫點感受。
這樣的大牛真不在少數。在全國範圍看,有高三、大一拿谷歌 Offer 的,有高中畢業(也有初中畢業)直接去世界 CS 頂尖學校留學的。在我身邊也有不少。高一我才剛剛學會寫代碼,彼時同省參加競賽的一位同學,初二,在火車上用 C# 獨立編寫帶 AI 的遊戲(VFK……- -||)。
不是有句話,「比你聰明很多倍的人還比你努力很多倍」。這不是訓誡我們去努力的,只是教人認識差距而已。作為普通碼農,憑努力可以提升自己,但永遠別「刻意期求」憑努力總可以趕上、甚至逆襲。
我想,要做的大概是,在提升的速度上不要落後於人。不要害怕陡峭的學習曲線和反覆的折騰。做不到精通那麼多,也要有涉獵他們所熟悉的方方面面。找到自己適合做的一個點,打好基礎,專攻於此,在這一處超過他們,是一定可以做到的。
最後,據我觀察,牛人在學習技術、溝通交流種種方面都有自己獨到的方法。他們都樂於助人,常常和他們交流,才可以發現他們比自己多出了哪些重要的東西。
普通碼農和ACM/IOI大牛差的不僅僅是刷題量,更是智商。作為一名曾經的OIer和ACMer,你刷了幾百道題只能保證你在省賽遇到水題時可以和大牛們拼一拼手速,但最後登頂獎牌絕不是僅僅是靠刷題和手速能換來的。語言、API/Library/Framework、理論、演算法,這是一個優秀的程序員都應該熟練掌握的東西。當然作為一個人,很難把每一樣都做的一樣優秀,但是你只要至少把三種做優秀了,那人家會不會演算法又對你有什麼明顯優勢?
人家刷ol ac了上千題,blog心得幾十頁的時候你在刷知乎,真的沒辦法
你形容的那種在總人口中數量很少吧…逆襲這種事不要想太多,會降低幸福感…我覺得好好搬磚,先在城市裡過上有尊嚴的生活…然後讓你的後代可以有你描述的那種機會比較科學.
我覺得現在還是好好鍛煉身體吧,每天堅持跑步健身什麼的,大神一般都很拼的,高強度工作會導致健康問題,只要你比他們活的久你就贏了。
搞學術和搞工程不一樣,學術大牛就是寫幾百行代碼然後做成庫,工程大牛就是把幾百個庫正確地結合在一起,碼農是工程大牛的跟班,將來可能會成為工程大牛,學術大牛不需要跟班看樓主最後一段,便知道樓主沒有搞IOI 和 ACM。其實沒有你想的這麼可怕,IOIer和ACMer 中出類拔萃的大神在哪裡都是大神,每個時代都有這麼一群人存在,如果你的目標的他們而你自己不是大神的話,建議還是秉著一顆膜拜的心去崇拜就行了,逆襲什麼的就想太多了。本人從高中開始搞OI,雖僥倖有所成就升學無憂,但是那段經歷里我很容易就理解了叔本華的一句話:「大自然在人與人之間的道德和智力方面定下了巨大差別,但社會對這些差別視而不見,對每個人都一視同仁」 (選自 關於獨處)的前半句。
其實,搞IOI和ACM中的絕大部分人其實並不是大神級別的,和其他很多比較優秀的人(相信我,他們智商肯定不低,只是沒有高得離譜罷了)是一個層級的,如果你個人也比較優秀的話,自然也可以進入同一個平台形成良性的競爭關係。君不見,非OI出身的IT精英一大片。
最後,看起來似乎學得早等於學得好,但是稍微一聯想自己周圍的以及自己自身的種種事例變知道這個命題未必成立,所以,再接再厲,祝一切順利
答案難倒不是『活得比他們長』嗎?
不要為自己不努力找借口
我其實覺得差距也沒有那麼大------------------------------如果真的說有差距要追的話,那解決辦法就是求甚解吧日常工作中用到的深入學習一下,用不到的東西大神們會不也是用不到么其實我也曾經想過這個問題……後來我就想開了……
搞ACM/OI的大致分為兩種,普通ACMer,和生而就是大神的人。跟前者縮短差距的方法有很多,多讀書,多思考,多coding,總有一天你會發現,你們技術上的差距會越來越小。
至於後者,你越努力,會發現跟他們的差距越大。其實,這差距永遠無法縮小。
說句不愛聽的,有些東西是智商決定的。。。
ACM很累的,絕對的折壽。。。其實,ACM狗很多成績很渣,因為逃了這種那種課去寫題...最後比賽成績也很渣......GPA也沒有......
啊啊啊我發現我說錯了,題主說的是大牛......大牛的話算了吧,有種東西叫做智商碾壓....我非常理解這種感覺...
但是,並非沒有轉機了,搞競賽的人有種能力差,叫做工程能力(基本都是零項目),這點很致命:代碼各種難讀,變數隨意命名,該面向對象的東西面向過程寫...
我會說我看隊友的代碼都要掀桌嗎?我會說隊友也從來不看我代碼嗎?作為程序員,演算法能力只是一方面,題主不必太害怕,比較競賽中大部分演算法其實都不是常用的,而且,誰天天用黑框框的軟體啊,再而且,現在的開發都是團隊,不是一個人,誰願意看你這麼晦澀的代碼啊!
不同人有不同長處,如果題主非要比演算法和自學能力,乖乖刷oj,tc,cf吧~
推薦閱讀:
※零基礎轉行到IT,怎麼選擇適合的職業?
※對於"雪人計劃"你怎麼看?
※有哪些目的是好的,卻被惡意濫用的技術和設計?
※如何評價英特爾新 VR 設備 Project Alloy?
※為什麼知乎上受邀回答問題的人回答之前都要先說【謝邀】?