搞ACM,以後能幹什麼



搞ACM,以後能幹什麼

分類: 學習指導 877人閱讀 評論(5) 收藏 舉報

【學生來信】

       老師好,我對於大學階段搞acm以後能做什麼有些疑問。現在周圍的同學有的在做android,有的在做網頁,有的在專心學photoshop,flash,有的在研究數據庫,好像他們都對以後的工作有了明確的方向,而對我來說,現在主要搞的還是ACM,平常的時候會把大部分時間花在上面,而沒有非常明確的工作方向,雖然經常聽人說,大學裏搞ACM以後出來的很有優勢找到一個好工作,ACM搞得好的話去谷歌,微軟,百度等大公司不成問題,但是真的不清楚現在研究的這些題目,算法在以後的工作中能夠用在哪裏,針對這個問題我也在網上搜索過了,說是搞ACM可以提升自己的編碼素養,問題分析解決能力,以後從事的是技術底層的工作,而不是表面上的。有的還說,以後的工作也許和ACM那些問題一點關係都沒有,只要在大學階段通過ACM有了良好的編碼素養,到公司裏也可以從事其他方面的工作,哪怕是從0開始學起。對這些話,我還是不很理解,真的是那樣嗎?我還需不需要像身邊的同學那樣,除了ACM還要專門地精通的去學習一門技術。還是隻專注於ACM,以後找工作什麼的都先不要想,順其自然呢?

【迂者回復】

  你的學習路線,正是我心目中最理想的路線。通過兩年甚至更多時間的潛水,你將獲得別人不多有的擴張力。建議你在保證各門功課的基礎上,將絕大多數的課餘時間用於ACM,而對於其他人熱衷的學習內容,有時間就玩點入門級的小玩意,或者常到CSDN網站上,將業內的信息瀏覽着一些足矣。到大三後,選好了方向,你的前進步伐會很快。學些應用層面的技術有意義,但以算法爲核心的學習更是着眼於長遠,你到達的,是不一樣的層次。 
  搞ACM,貌似與以後要幹什麼不相干,然而,不管以後幹什麼,都是一筆寶貴的財富。憑藉從中煉就的專業核心素養,有能力在相關方向取得大的進步。
  我以前解答過的一封信《一名大二學生的學習狀況和未來計劃》供你參考。
  附上我的《逆襲大學》初稿中關於大學學習路線的一段文字,供你參考。祝安心下來,取得更大的進步。 
 

基礎和實踐並重的學習的兩種路線

  在CSDN對我的專訪中,我比較全面地闡述了我帶領學生開展的以實踐爲主線的編程學習過程。有人發表了評論:“大學重點學的應該是基礎,不是你那些所謂的爲了完成工作而學的項目經驗。什麼是基礎?重點是數學、英語、接下來是計算機組成和操作系統。這個老師太重點強調企業需要的東西,而不是作爲一個大學生本質應該學習的東西”

  另一段話是跟貼:“我完全贊同你的觀點,我之前是一名計算機專業的專科生,大家都知道專科生與本科生的差距就在於基礎知識(數學,英語)與計算機理論知識(操作系統原理,編譯原理,計算機網絡等)。大學期間做過不少項目,當時自認爲不會比本科生差,但隨着學習的深入,越來越發現到基礎的重要性。有時候看一些別人寫的源碼,發現如果我自己寫的是多麼繁瑣,而人家用到了數學的知識,一個繁瑣的算法原來可以這麼簡潔優雅。有時候一個問題硬是不懂,去網上問別人原來涉及到一些內存管理和操作系統的知識。記得又一次聽一個大公司項目架構師的演講說道:‘寫代碼,做項目你們與一個高中生甚至一個初中生沒什麼區別,區別是你們大學學得知識以及鍛鍊的邏輯思維和自學能力’。如果你只想當一名coder,基礎知識你甚至可以不學。如果你想當一名軟件系統的設計師和架構者,數學,和計算機基礎你必須要會。”

  評論中還有一些難聽的話我沒有摘出來,但是,說實話,我也贊成他們的觀點。在IT界能夠高薪,能夠不懼技術進步和發展,能夠站在重要位置上的人,就是基礎紮實的人。在基礎中吸取了抽象之精華的人,心中有放之四海皆可用的知識和思維,這比任何的具體技術、技能更重要。

  然而,在我的課程當中,我還是帶領我的學生熱情地投入了實踐,在我的諮詢當中,也不遺餘力地推動大學生將以實踐爲主線的自學進行下去。我期望用這種手段,讓學生們能夠快樂地進入到這個圈子,快速地瞭解行業中的話題,瞭解專業和方法,最重要的是,要知道編程背後還需要什麼。我推動實踐,但不輕視理論,大學生有了充分的實踐,才能夠注意到基礎知識和思維訓練的重要意義,纔可以將理論視爲非常鮮活的知識。如果沒有深入實踐的過程,對大多數人而言,學習理論將是個枯燥困難的事情,沒有經過親自體會獲得的感性認識,理論學習的效果也不能得到保證。必須找到一種途徑,讓每一位學生都能自發地認識到基礎的重要性,找到理論學習的入口。這條途徑就是實踐。

  至此,應該理清的思路就是:大學生應該要打好基礎,但學習目標還是實踐能力;爲了保證基礎學習的效果,需要用實踐打開通道。將基礎和實踐兩方面都做好,做到“兩手都要抓,兩手都要硬”,這是一個現實的選擇。然而在有限的時間內,這兩方面需要投入大量時間和熱情的學習應該如何安排,是個大問題。如果前述學習的方式、學習內容只是在戰術層面的問題的話,基礎和實踐的學習節奏的合理安排,可以是一個戰略層面的問題。課內的學習是由培養方案規定好的,這樣一種戰略的設計焦點就設在課外的自主性學習上面。

  大學生從中學走進大學,由完全由別人管着學,要過渡到完全能由自己安排學習。在大學低年級,學習的主要內容是專業基礎課程,可以由別人管得多一些,而高年級重在於應用能力的學習,需要更個性的成分多一些。根據這樣的特點,我給出第一條自主性學習的路線:先重基礎,再重應用,如圖5.3所示。由於我們是希望獲得“雙豐收”的,所以用兩個重,也暗指要兼顧。重基礎的階段,並不完全棄實踐,而重應用的學習中,基礎同時也在融合,基礎好的優勢會體現出來。我提議入學時專業學習興趣本身就很濃,以及起步學習順利的學生走這一條路子。由於先期並不多投入相對更爲“熱鬧”的應用,這樣做的同學要更耐得住寂寞,知道這樣做的價值。由於基礎紮實,一旦開始在後期重實踐的歷程,馬上能表現出更快的學習速度以及質量更高的應用成果。從時間角度,我建議大一大二重基礎,標誌是參加過一次ACM競賽,不管是學校組織的選撥賽,還是有機會代表學校對外參賽。有些同學選擇在高年級參賽以求獲得好成績,但可以在低年級時打足基礎。到了大三,轉入重應用開發的階段,由於眼界相對開闊,入手點可以與感興趣的專業方向結合,甚至與未來求職中有意願的崗位結合起來了。

 

5.3 先重基礎,再重應用的自主性學習路線

 

  第二條路線,先重應用,再重基礎。這不是說課內學習的基礎可以先不必重視,我們此處所說的是課外的自主性學習安排,是建立在認真完成課內學習要求的基礎上的。在現實中,有些同學在對專業瞭解不深的情況下,一定想迫切知道計算機這玩意到底能做些什麼,有一大批所謂迷茫的同學就在這條檻上徘徊,那就在先重應用的課外學習中獲得體驗好了。應用的內容可以始於做一個個人主頁、班級主頁之類的,可以藉助一些外部的目標,如參加學院組織的網頁設計大賽之類的初級的競賽,以及像在山東省很熱的“齊魯軟件設計大賽”之類的門檻不算高的競賽,逐漸可以考慮參加像微軟、阿里巴巴等企業組織的應用大賽。走這一條路線的同學,不要忘記,適當的時候可以往基礎理論的提高的路子上走一走,方式可以是將瘋狂做應用期間有些應付了的專業基礎課複習一遍,或者也去做做ACM題目,做一做一些大企業,如微軟、谷歌的面試題等。一段時間的“淡定”,將換來豐厚的回報。我的學生中,有不少的優秀學生就是在這樣做的。在大一剛剛學習程序設計後不久,覺得編程語言很能幹,試圖做一個能用的程序出來,發現不少功能的實現需要API的支持,開發出的應用激發了學習的興趣,也找到了信心,眼界大開之後,意識了算法的重要意義,轉而沉下心來,自主學習開始在專業基礎方面發力。基礎重要之類的話老師經常講起,但我的學生說“只有自己親自體會到了,纔有如此的激情投入”。

 

5.4 先重基礎,再重應用的自主性學習路線

 

  在我的觀察中,有些學生的自學路線以學期或更短的週期,根據實際情況在基礎和應用之間交叉安排;有些學生,喜歡開發應用程序,他們的自學中,不斷嘗試不同的技術,在不同的領域中開展體驗,畢業求職時選擇面很寬,在工作中也是個多面手;有個學生一直喜歡計算機科學,他的自主學習的主要內容就是專業基礎理論,並且將觸角伸到了本科生常不關注的複雜性理論層面,他也寫了不少代碼,但以操作系統層面的代碼爲主。大學中需要有自主性學習,這些都是不錯的安排。在大學,把握住了課堂,課外又能有效安排好,這樣學出來的,都是人才。

  在課外的自主性學習,最忌諱的就是,常想學,但總不起步,或者在走出第一步時就顧慮重重,讓自己總是停留在是否要走出第一步的階段。只要起步了,視野拓寬,就會不斷有新的想法產生,能觸摸到適合你的“下一步”學習的內容,從而能夠一直走下去。

  還有一些同學,在迷茫與放縱中停留過久了,以至於到了高年級,在別人基礎紮實開始明明白白地在自己喜歡的領域中左右逢源之時,他纔開始起步。面臨着即將到來的就業壓力,開始感覺到了恐慌。這時,重應用的自學路線成了唯一的選擇。時間已經等不及補上足夠的專業基礎,再去學習應用的節奏了。由於基礎差,實踐不能夠太深入,入職時選擇崗位的自由度會減小,這就是代價所在。至於專業基礎方面的缺陷,只能寄望於工作以後的自主學習了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章