演算法資料結構 | ACM 的正確入門方式(適合剛剛學完C的小白)
前言
- 很多學校都把C作為第一門教學語言, 往往一學就是大半年, 導致很多同學要麼跟著老師的進度得過且過浪費時間, 要麼進度飛快學完之後不知所措, 下面我將結合我個人自己的經歷, 以及摸著石頭過河的路徑, 給大家說說在這一時間段應該做點什麼取補上自己心靈的空虛~
個人相關: 雙非一本大二渣渣ACMer, 略懂資料結構演算法, 簡單開發過幾個小專案
面向讀者: 剛剛學完某一門語言/覺得學校進度太慢無聊的大一新生, 還不清楚自己未來的方向, 只是聽說過一些名詞.
方向
首先和大家介紹一下國內計算機專業(包括軟體工程等)的大學發展方向, 我個人總結的
工程開發方向
-
工程開發方向就說大學的大部分時間都獻給了做專案, 一般本科生的話都是Web開發, 小程式, 小遊戲之類的… 一般各個學校都會有自己的創業中心, 實驗室, 老師也都會有自己的專案要找學生做, 有的學校還有校企合作, 所以只有足夠優秀, 專案是不難找到的.
這個方向的話也自然是需要投入大量的時間, 據我所知, 我身邊的一些同學常年在老師實驗室裡做專案, 寒暑假都很少回家.- 優點: 雖然大部分只是免費給老師打工, 但能夠實實在在的提升專案經驗都是真實的. 畢業之後也不乏有著憑藉自己的專案經驗進入大廠的, 但大部分比較困難, 因為大廠考驗的不只是專案經驗
- 缺點: 主要就是因為大多數時間獻給了專案, 導致一些基礎理論課程的匱乏, 比如演算法和資料結構, 作業系統, 組成原理這些. 雖然各種框架語言IDE玩的很6, 但是學生期間往往做出的專案並算不上多麼優秀. 可能工作幾年後回頭看看連個Demo都算不上, 大家合理取捨
演算法競賽方向
- 演算法競賽主要值得就是ACM了, 這項被譽為全球最頂尖的智力奧林匹克大賽, 混合了程式語言+資料結構演算法+高階資料結構+數論+組合數學+概率論等等, 完全值得一位優秀的學生花上兩年三年的時間去投入到這個競賽中. 一般每個學校都會有自己的集訓隊, 傳說北大清華還有ACM班, 更有甚者休學一年只為打ACM
因為比賽的極高難度, 所以獎牌的質量不必多說, 可以說只要能夠拿到區域賽以上的牌子, 進入BAT TMD這樣的大廠沒有問題. 而如果能拿到final或者區域賽的金牌, 進入FLAG往往也是問題不大的.- 優點: 對於普通本科生, 尤其是弱校本科生的同學來說, 參加ACM競賽拿牌子可以說是進入大廠的最保險, 價效比最高的路徑了. 而競賽學習中學到的演算法知識雖然在今後工作中沒有實際的用途, 但用大學四年時間把自己的內功練好, 今後再去學十八般武藝可以說是信手捏來. 而且對新的技術, 比如AI, 大資料感興趣的同學也可以藉此機會紮好基本功. 比賽獎牌對於考研也同樣有著極大含金量.
- 缺點就是略有風險, 有可能拿不到獎牌, 需要投入的時間一點不比做專案少, 而且需要一定智力
考研出國方向
- 這個方向我不多說, 百度有成堆的教程, 刷好GPA, 按時學習完成任務就好. 但我個人建議先試試前兩個方向, 說不定複試的適合通過率更高, 畢竟碩士導師也都不喜歡只會刷題的書呆子
其實各個方向直接並不衝突, 如果才華足夠的話完全可以兼顧著走一圈, 但由於三四年時間實在太短, 精力有限, 我建議能在一個方向上做到優秀, 然後也經歷過另一個方向, 你就是一位非常優秀的計算機專業學生了. (因為大部分同學走了第四個方向 - 混吃等死方向)
總結
- 總而言之, 我個人建議大家無論是否走競賽這條路, 都要趁著大學, 尤其是大一的空擋把自己的內功打好, 也就是演算法和資料結構. 無論你是做專案, 考研還是競賽, 這個時候學好演算法資料結構都是一個非常正確的選擇.
因為程式開發需要內功, 企業面試會有演算法題. 考研60%的專業課就考資料結構, 於情於理, 你沒有理由不學, 不學好資料結構和演算法
但是我建議學演算法和資料結構不要一味死盯著書本學, 要學會合理利用OJ(線上評測系統)帶來的反饋感和視訊課
推薦路徑
-
這是我個人推薦的幾本書
https://blog.csdn.net/a1097304791/article/details/82974238 -
視訊課的話我推薦中國大學MOOC上郭煒老師的視訊, 有即時的習題和作業, 按時完成
https://www.icourse163.org/learn/PKU-1001894005?tid=1003186011#/learn/announce
還有浙江大學的這個資料結構的視訊
https://www.icourse163.org/learn/ZJU-93001?tid=1003013004#/learn/announce -
同時推薦幾個比較合適的OJ, 選一個比較舒服的刷著來就行了, 都有詳細的分類和難度梯度, 不會的知識模組要先學後做題
https://leetcode.com/
https://vjudge.net/
https://www.jisuanke.com/
https://www.51nod.com/
http://nyoj.top/problemset -
比賽和考試, 有了學習, 自然要去考試拿些證書去給自己日後的簡歷加法呀
ACM - ICPC
ACM - CCPC
藍橋杯 (平民難度, 證書可拿offer/保研)
PAT (平民難度, 考到一定分數可以直接免初試)
天梯賽