1. 程式人生 > >談一談我對本科計算機專業的認識

談一談我對本科計算機專業的認識

    新的一年開始了,我大學的所有課程也剛剛結束不久,想一寫篇文章談一談我對計算機專業的認識。博主學的專業是“電腦科學與技術”,今年大四,三年半的校園生活使我對計算機專業的認知一次又一次的改變;由於沒有一個好的“引路人”,自己總是摸索著前進,走了不少的彎路。剛上大學的時候對計算機沒有什麼概念,當時除了會打字以外也不會什麼,印象中的計算機專業是程式設計,是寫軟體,或者是做些什麼PS,網頁三劍客,甚至修電腦之類的東西。

    在大一下學期,有了程式設計課,對程式設計有了初步的認識,也改變了原來的想法,把計算機專業認為就是程式設計,也嘗試著做一些入門級“專案;在大二上學期學習了資料結構,當時也不覺得它有什麼用,視乎跟我那些所謂的“專案

沒什麼關係。由於我們學校沒有開設“演算法分析與設計這門課,根本不知道“演算法為何物,直到這學期結束,才認識到程式設計的本質是資料結構+演算法,記得當時花了一上午的時間寫了個不到40行“快速排序”感覺滿滿的收穫,相比而言,那些我做了十天半個月所謂的“專案”顯得那麼的空虛,直到大二結束,我對計算機的認識雖然還只是程式設計,但對程式設計的理解深入了,意識到了資料結構,演算法和架構的重要性。

    大一,大二的時候我一直想計算機考研為什麼是資料結構、組成原理、作業系統、網路四門課,除了資料結構我認識到了它的重要性外,其他的理論課跟以後的“軟體開發”有什麼關係,而且這些理論課無一例外都是高學分課,這個問題一直到大三大量開了專業課我才意識到這些理論課的重要性,這些都是計算機基礎,想成為一個好的科研人員或者高階碼農,這些都是必備的,這些才是“電腦科學”,以前只看到了後面的“技術”兩個字,我覺得“電腦科學與技術”專業中要學的“科學”要佔80%,“技術”佔20%。大三開始隨著讀的書多了,網上的各種大牛見的多了,看的多了,見的也多了,越來越覺得“程式設計”只是計算機的一部分,甚至是“冰山一角”,或者說只是一種實現或驗證“科學”的工具(這裡的科學不僅包括計算機,還有數學,物理,化學,生物等),但是程式設計還是很重要,並且大師級人物都是軟硬通吃的,不僅對軟體理論很熟悉,模電數電,組成原理,微機原理等硬體原理也十分了解,典型的例子就是著有經典的《windows程式設計》的Charles Petzold,很多人不知道他還是另一本神作《編碼的奧祕》的作者。這是我大三上學期對計算機的理解,跟以前的認識還是有不小的轉變。

    剛上大學時就聽說計算機學的好的人,數學也好,但一直不知道它們之間有何種聯絡,而且大二的時候也有老師告訴我“數學不能扔,要經常拿出來做一做”,但是我一直也沒理解,直到大三下學期,隨著讀一些科研領域的初級東西,有了對計算機更深一層次的認知,覺得概率論、線性代數應用是如此之廣,高數更是哪裡都會用到,還有像數論,組合數學,複變函式,隨機過程等等,視乎計算機每一個領域都與數學有著密不可分的關係,印象尤為深刻的是《數學之美》中那用餘弦定理計算文字相似性的一章更是讓我大呼過癮,當然後來才知道那是KNN演算法中一種求距離的方法而已,再看看那些圖靈獎得主和那些真正搞學科研究的人大部分研究的都是數學相關。以前只知道計算機教授是很多數學專業轉過來的,或者像物理這種理科專業教授是數學專業轉過來的,沒想到甚至很多經濟學老師也是從數學系轉過去的(經濟學對數學的要求視乎比計算機更高),才體會到數學是一切科學的基礎。

寫到這裡,我想羅列一下“計算機專業”那些重要的課程,當然這些每個人有每個人的想法,下面只是我的看法,如果學弟學妹看了希望不要誤導你們(針對軟體從業者而言): ★代表學科的重要程度
離散數學:★★★★★
高等數學:★★★★★
組成原理:★★★★★
資料結構:★★★★★
概率論:★★★★
線性代數:★★★★
數值分析:★★★★
編譯原理:★★★★
作業系統:★★★★
資料庫原理:★★★★
英語:★★★★
數字邏輯:★★★
體系結構:★★★
計算機網路:★★★
C語言:★★★

PS:以上是我的學過的課程,還有幾門我們學校沒有開設的課程我也覺得很有必要:

演算法分析與設計:★★★★  數理統計與隨機過程★★★ 組合語言★★★

    所以我覺得計算機專業(打算從事軟體方向)本科階段,學習以上課程足夠了,其他的課都不是很重要對於本科生,本科階段最重要的是打下紮紮實實的基礎。很遺憾,我的彎路走多了,沒有在最恰當的時機學習必要的內容。

    從上大學開始,就經常聽到類似“大學學的工作中都用不到”,“大學讀完感覺沒學到什麼”這樣的話,雖然我是一個尚未工作的本科生,但不可否認的是我所列舉的“重要課程”在工程上大部分都不會直接涉及。短期來看,想得到高薪酬好像還不如學一些像嵌入式,ios,hadoop等來的實惠,因為找工作時候面試官視乎更看重經驗豐富比基礎紮實多一些,但為什麼我們要學這些理論課,記得我的軟體工程老師說過“大學的課程學完不用很快也就忘了,但為什麼還要學,因為大學中,學的是學習的方法”,這句話我覺得還是很有道理的,但我不是完全贊同,我覺得不僅是學習“學習的方法”,內容本身還是很重要的,因為它們都是計算機基礎,在潛移默化的體現在程式,演算法,或者架構中。就在前不久我去某校招的BOSS面試的時候,BOSS跟我從資料庫原理談到離散數學,令我吃驚的是人家位高權重,離開校園那麼久,離散數學的知識掌握的那麼好,很有耐心的給我講了十分鐘離散數學,實在令我自慚形穢。

    當然,不是每個人都能到達一定的職業高度,或者接觸不了很多高階研發,那這些基礎科學就對我們不重要了嗎?我想不是的,因為這些基礎是計算機出身的人的職業文化,或者說是職業素養,就好比大部分中國人都會背“窗前明月光”,但我們生活中幾乎遇不到說“床前明月光”的時候,但我們為什麼還要背?這就是中國人的文化,這就是中國人的“職業素養”。學其所愛,愛學所學,才是積極向上的人生哲學。

    隨著“大資料時代”的到來,我覺得“大基礎”的重要性不但沒有降低,反而更加凸顯出來,計算機的提升空間還是不可想象的大,所以我想理解計算機的本質才能不斷創新,不斷提高,從而應對不可預知未來。

最後祝大家元旦快樂,新的一年裡學習愉快,工作順利,最重要的是健康平安。

==================================================================================================

  作者:nash_  歡迎轉載,與人分享是進步的源泉!

===================================================================================================