你大学遗憾过吗
hello, 大家周末好,之前在知乎上看到在大學中一個比較典型選擇問題:
計算機學生在大學四年應是以數據結構和算法為重還是技術為重?
如題,如果更偏向數據結構和算法學的技術少是不是找工作就稍微困難或不是;如果以技術為重會不會只知道怎么用,而內部的一些算法和數據結構都不清楚無法提升自己能力呢?
先說一下我自己大學經歷吧,這樣回答問題可能?更有說服力。
(PS:答案在最后!)
目錄:
以為是王者
墮落的起點
燃燒的夢想
刻苦訓練
比賽失利
依然堅持
最后的挽歌
正文(回答問題)
最后
以為是王者
大一主要是上課,當時信息沒有現在發達,技術資料主要是從圖書館獲取,沒有公眾號,不知道前輩指導,也不知道技術博客這些東西,基本上悶頭學習(還有釋放天性玩游戲),大一不小心借來一本計算機組成原理的書,看得是非常津津有味(但當時很多還是沒有完全明白),甚至在其他課上都在看,有一次被導員發現了,還在班級上夸了我,說我大一就在看大三的課程(計算機組成原理應該是計科大三的課程),頓時班級其他同學都認為我是大神,我自己心里明白得很,就是一個菜鳥,當時還沒有內卷這個詞,不然肯定被大家鄙視。
在大學之前我從來沒有學過編程,選擇計科完成是因為我高中特別喜歡玩游戲,尤其競技類游戲,比如CS,紅色警戒,帝國時代等(這些經典競技游戲,可能現在的大學生都不知道了),因為高中的時候,經常去網吧玩游戲,這也是我比較遺憾的地方,浪費大量學習時間,雖然最后考上211大學,但并不是我目標的大學,高中還是要好好學習,遠離游戲。
墮落的起點
轉眼大一過去了,期末考試下來,成績讓人有些失望,除了專業課看起來還可以,其他科目分并不高,大一基本上是在玩和學習中度過,沒有找到奮斗的目標,但對編程卻感興趣起來,C語言課程作業,很快完成,而且還可以指導別人。
轉折點在大二,班里有人暑假沒有回家去參加了ACM培訓,我當時還不知道ACM是什么,導員也沒有給大家普及,我暑假也沒有回家,是和校友(高中同學,數學系)在宿舍玩帝國時代和學習,我把電腦搬到他們宿舍,吃住一起,確實是一段比較歡樂的時光,奠定我們牢固友誼(將來10多年日子,我們依然混在一起),日子過得有些禿廢。
但恰恰在那次暑假中,讓我知道了ACM是啥,暑假不光是玩游戲,偶爾還學習編程(個人愛好),在搜索一個編程問題文章的時候,我看到了一篇關于ACM選手文章,講他們學校(杭電)如何組隊參加比賽,如何逆風翻盤,干翻名校獲獎等,我上網搜索了關于ACM的一切,當時周圍的人都不知道,得知ACM是計算機大學生最高級別競賽,當時燃起了我的斗志,我對一切競技比賽,都有強烈好勝心。
燃燒的夢想
由于太喜歡ACM這種比賽了,我的本能,讓我選擇了搞算法比賽,所以我放棄好好學習,獲取獎學金路線,也放棄了學習技術的路線,其實當時還不知道技術路線,視野限制了我,我不知道大學學習的東西,未來會怎么用,我也沒有去認真想過,只知道曾經有個夢想是成為比爾蓋茨,在當時大部分人都是懵逼的,我記得只有少部分用linux系統的同學,他們對技術了解多一點,或許Linux系統不會把人變傻,需要不斷去學習。
從此之后,我開始進入算法比賽的圈子,知道很多圈子里面的東西,比如NOIP比賽,IOI比賽,ACM比賽,了解各種算法比賽或算題平臺:POJ,ZOJ,USACO,UVA,URAL,Topcoder,Codeforces等。
這里簡單普及一下區別:
NOIP比賽,是高中生比賽,為什么我一個大學生要去關注高中生比賽呢,因為很多大神都是從高中比賽里面過來的,比如樓教主;
IOI比賽,是國際信息學奧林匹克競賽(高中),可以保送清華和北大的比賽,里面很多大神,單在算法領域超過80%的大學生,他們在國家隊訓練的論文,質量非常高,我基本全部都下載打印出來學習,這個就是起步的差距,視野是多么的重要。
POJ(北大),ZOJ(浙大) 老牌國內刷題網站,水題太多;
USACO 是美國中學生刷題網站,USACO的traing(天梯)不知道造福多少的oier們。高質量的天梯題,友好的做題流程(給予錯誤點的正確答案和標準輸入)。
UVA,URAL國外刷題網站,題目質量高,偏難。
Topcoder和Codeforces?的社區比較活躍,優秀的比賽平臺,主要是題目質量比較高,做的人人也比較多,可以查看別人代碼和數據。
我之前還在朋友圈感嘆過,陳丹琦IOI金牌選手,而這些厲害的人現在依然很厲害, 大多數后面都轉向人工智能,但在當時這個其實并不火,誰也不知道。
刻苦訓練
由于我是大二暑假才進入ACM圈子,其實對于我這種大學才開始編程的人來說,起步確實有點晚了,我指定很多計劃,也買了一些算法書, 劉汝佳的黑書《算法藝術與信息學競賽》, 這本書起點有點高,需要有點內功的人才能完全領會里面的精華,計算機的課程基本上我都是自學,比如數據結構和算法,而且教材是去圖書館借的,算法導論,嚴蔚敏的《數據結構》,然后開始拼命刷題,看別人的解題報告,看論文。
比如DD大牛的:背包九講
侯啟明:《信息論在信息學競賽中的簡單應用》
方奇:《染色法和構造法在棋盤上的應用》
樓天城:《匹配算法在搜索問題中的巧用》
周源:《淺談數形結合思想在信息學競賽中的應用》
朱澤園:《多串匹配算法及其啟示》
余遠銘:《最短路算法及其應用》
俞華程《矩陣乘法在信息學中的應用》
陳丹琦《基于連通性狀態壓縮的動態規劃問題》
毛子青:《動態規劃算法的優化技巧》
方奇:《動態規劃》
...
當時最難的理解,就是動態規劃,其他比較難的都是數學相關的(一般是數論或者是組合數學),這個花了我很多時間,和大多數人一樣,在這個圈子里面,起步晚的人都得刻苦訓練,很多人都封閉式訓練,陪伴他們都是無數個黑夜,泡面和外賣,而我并沒有加入校隊,也沒有進行封閉式訓練,都是全屏個人熱愛,私底下訓練,當時還很菜。
比賽失利
大三有幸報名學校的ACM培訓班,一種相見恨晚感覺,如果大一的時候,導員能夠提早告訴我們,或許人生可能就不一樣,當時確實有點埋怨輔導員,因為之前去參加培訓的有些人根本就對ACM不感冒,我一定要珍惜這次機會,?培訓課里面會有校隊高手來指導我們,差距還是有一點,他們有些人已經參加過比賽,也刷大量的題,我依然是菜鳥一個,培訓結束后沒有比賽,也沒有選拔,有些人就進了校隊了,我認識一個校隊朋友,由于住得很近,每天都和他討論算法,他經常帶著我進校隊訓練室,讓我終于看見那些真正打比賽人平時是怎么訓練的,大部分時間,大家都在刷題,交流其實并不多。
我并不是校隊的人,但我卻天天和他們混在一起,反正隊長也不介意,跟著他們一起刷題,但大家都很忙,基本上不會回答你的問題,我都是自己琢磨,看網上題解,如果沒有人指導,這個其實會走很多彎路,進步會很慢,所以打ACM之前,一定要請教一些前輩。
證明自己的機會來了,ACM亞洲預選賽就我們學校舉行,校內選拔賽那天,我還在床上睡覺,突然班上一個同學叫我一起參加比賽,一起組隊,我即興奮又緊張,第一次參加正式的比賽,比較激動,比賽過程很緊張,組隊其他兩個同學都是班上學習特別優秀的同學,但貌似我們大家都沒有太多比賽經驗(刷題不夠多),只做對了2道題,最后的結果是選拔失敗,無緣預選賽,非常失落,因為這一等就是一年,明年我就大四了,我還有機會嗎?
這讓我想起了,2009年,我另一個偶像,伍聲2009休學一年帶領LGD戰隊,一舉奪得了中國的第一個DOTA世界冠軍,dota在大學時代,也是我又恨又愛的游戲,恨是這個游戲占據我大量的時間(周圍同學都在玩),愛是這個游戲教會我很多團隊做事情的經驗,知道一個優秀團隊需要分工明確,各展所長,我喜歡競技的比賽,dota也不例外,但我并沒有想去打職業想法,當時真的想休學一年搞算法比賽,因為算法比賽才是我的最愛。
依然堅持
雖然第一次比賽失利,但我還是堅持訓練,還在不停學習,刷題,看解題報告,論文等,心里一直不甘心,POJ上面有一些專題訓練,我也會刷一下,比如樓教主的男人八題:
時至今日也沒能成為一個真“男人”,后面也參加百度之星比賽,網易的有道難題比賽,topcoder比賽,codeforce比賽,知道了很多大佬,了解很大佬傳奇故事,這些曾經鼓勵一代代OIer/ACMer前進的傳奇故事, 比如ACRush(婁天成),WJMZBMR(陳立杰),tourist(Korotkevich), Petr(Mitrechev)...
當時topcoder平臺排名:
最后的挽歌
由于大四要出去實習,要搞畢業設計,要準備找工作,所以刷題減少了,但有空仍然會刷一下,top coder上的比賽,仍然會參加,只不過當初ACM賽場的夢想可能實現不了,當時算著,如果讀研究生,貌似還可以參加,還可以搏一搏,但現實總是殘酷的,家里需要我出去掙錢,最終還是沒有去讀研。
雖然沒有能在大學里面實現自己的愿望,但編程能力和解決問題的能力還是被訓練得挺強的,其實在學校時候,我還參加過學校舉辦了星火杯軟件比賽,拿軟件組的第一名(作品是類似qq聊天軟件,支持語音,群聊等),用的是MFC框架,是當時C++ window桌面比較流行框架,不過現在技術早已更新換代。
在班里是比較出名的,但ACM比賽至今是我的一個遺憾,我曾工作后一直沒有放棄過,有時間就會參加比賽,訓練自己。比如在華為時候,內部算法平臺,我也經常去刷題,在騰訊的時候,只要有比賽,都會報名參加:
后面讀到過很多退役帖子,很多人最終都認清現實,不得不放棄夢想,也讀過樓教主回憶錄,由于各種機緣巧合,連樓教主這種ACM頂級大牛都沒有拿到過世界冠軍。
人生總會有遺憾,最重要是我們曾經奮不顧身去努力過,即使沒有達到自己的期望,將來也會成為美好的回憶。
差不多我的大學四年,就是在比賽,游戲,編程中度過。
正文(回答標題的問題)
作為過來人,工作多年,在華為-->外企-->騰訊等多家公司工作過,了解各種類型公司校招,社招面試,跳槽,晉級路線,知道什么東西在工作中非常有用,什么東西可以暫時應付,后面再補也行。
優先看一下大廠的校招要求:
上面明確標明必須具備的技能(CS核心知識點):
計算機基礎(CPU,緩存,內存,磁盤),計網(網絡協議),操作系統(進程,線程,多線程,并行,鎖, 調度),編程語言(C/C++,go,python), 網絡編程(socket,epoll),算法與數據結構,設計模式,數據庫(mysql,事務,CRUD,分布式一致性,分庫分表,負載均衡),安全(鑒權,加密等);
這些基本上都是程序員的基本功,數據結構和算法也是其中之一,如果你不是走特長生路線(類似高中參加競賽保送清華北大那種):
什么叫特長生:ACM/OJ比賽獲獎,或重要開源貢獻,或對某一項技術研究很深(比如OS,編譯器,編程語言,分布式架構等);
ACM/OJ算法比賽獲獎確實可以優先獲取進大廠機會(有優勢),基本上是以數據結構和算法為重,如果再加上學校buff,進大廠還是挺穩的。
但是大多數人,可能都不是走特長生路線,都是普通人,普通人只能走正常校招路線,需要按上面要求來,那么你就需要把計算機基礎掌握好, 數據結構和算法也是需要學習的,只是沒有比賽那么要求高,就是把基本數據結構和算法掌握就行:
詳細參考:深入理解數據結構和算法
其他計算機基礎(CPU,緩存,內存,磁盤),計網(網絡協議),操作系統(進程,線程,多線程,并行,鎖, 調度),編程語言(C/C++,go,Java,python), 網絡編程(socket,epoll),設計模式,數據庫(mysql,事務,CRUD,分布式一致性,分庫分表,負載均衡),安全(鑒權,加密等);
TCP/IP協議精華指南
一句話,如果你決心打算法比賽,就以算法和數據結構為重,多做題,多寫代碼,這樣你的解決問題能力會提升很多,編碼能力要比其他同學成長要快, 但算法比賽要想獲獎也是有一定難度的,是孤投一擲,有一定風險存在,高風險高回報,人生處處是選擇啊,這個看自己的選擇了,如果喜歡比賽(有人喜歡這種智力比賽)就試一下,反正最后編碼能力提高,找工作也不會太差,一般都是從大一,大二開始,如果已經是大三,則不建議了,這個刷題也是需要很多時間的,算法比賽中需要掌握很多知識點:
但工作中至少一半是用不上的。就看你選擇了。
我大學也有一部分人選擇搞算法比賽,但只是少數人獲獎,然后高薪進大廠;
有一部分人老老實實學習基本課程,高分保研,好學校的研究生進大公司更容易;
有一部分人喜歡技術,崇尚技術可以改變世界,深挖技術路線,參考各種技術論壇,搞Linux,開源項目,最后堅持下來的,都是高薪進了大廠;
有一部分就比較普通,是面向工作學習,八股文搞起來,把計算機基礎打牢,每一樣都還好,不是特別突出,也有部分進了大廠。
其他。。。沒有選擇
最后
其實看得這里,你心中答案應該明朗了,條條大路通羅馬,只要堅持一條路走到黑,都可以找到好的工作,就看你個人選擇,記住,最好早點明確自己的路線,這樣才能夠有充足的時間去迎接挑戰。
- END -
看完一鍵三連在看,轉發,點贊
是對文章最大的贊賞,極客重生感謝你
推薦閱讀
高考結束了
如何成為技術大神
深入理解數據結構和算法
如何成為一名大廠的優秀員工?
總結
- 上一篇: 深入浅出 Linux 惊群:现象、原因和
- 下一篇: TCP的FIN_WAIT1状态理解|深入