大學本科電腦專業應該學點什嗎?

來源:互聯網
上載者:User

標籤:

答應給一位剛上大一的小盆宇指點一下,所以我這裡簡單的說點吧。有磚家看了覺得可笑的話,請勿發表高見。謝謝。

首先還是要推薦Sir前輩的《胡侃》(點擊可傳送),將近20年過去了依然是經典。然後,我對各種課程的理解是這樣的:

首先簡單說下英語吧。大學是沒有人“教”你英語的,英語課很扯淡,英語全靠自學。好在講文法的地方高中都講完了,大學基本就是詞彙量,實際應用等等。英語的重要性在於:四六級、 考研、還有原版專業書。其中原版專業書是最重要的。你將來要接觸的電腦的資料,英文的比中文的要管用的多。

然後是數學,數學的重要性不亞於電腦的專業課,在某種意義上說,要比某些專業課更重要。大學電腦專業的數學課大概有這麼幾門:高等數學,線性代數,機率與統計,離散數學,數值分析。

高等數學:大學數學的基礎,從學分也能看得出來它的重要性。絕大多數學校工科學生都學高數,而理科(尤其數學專業)學的是數學分析。二者內容差不多,都是極限微積分之類的東西, 但是高數的重點在於求出式子的解,而數分的重點在於證明公式。換句話說,高數偏應用,數分偏理論。不好說哪個更重要,二者的思維方式是不同的,我覺得這個東西的重要性就在於對自己邏輯思維的鍛煉,從這點上來說,二者是同樣重要的。因此,有空都看看無妨。推薦高等教育出版社的《高等數學》(一般學校的高數教材),北大出版社張築生的《數學分析新講》,sir前輩推薦了南京大學出版社的《數學分析教程》,還有餘力的話,可以做一下吉米多維奇的《數學分析習題集》(簡直恐怖!)和李永樂那本厚厚的考研數學手冊(叫什麼我忘了)。

線性代數:另一門數學基礎,跟高中以前的數學長得都不一樣,上來就是一個大方塊行列式。但是學著學著你會發現,其實就是外觀上不一樣,做起來還是套定理套公式。這就無聊了。想不無聊的話,可以看看高等代數。按sir前輩的說法,高代就是線性代數加上一點多項式理論,不過他推薦的書倒是比較厲害的(從吉米多維奇開始那兩個自然段,我就不摘抄了)。

機率與統計:還是套公式,而且比起高數和線代來說套的更機械,更容易一些,只要能分辨出來這是xx分布就可以了。不過呢,希望學過之後能記住這些分布,因為將來如果深入學習電腦的話,這是一個坎。比如以貝葉斯同志命名那些演算法,像什麼貝葉斯網路,貝葉斯分類器……將來接觸到資料採礦、模式識別、人工智慧領域的時候,機率與統計會或多或少的發揮一些作用。

離散數學:這才是正統的電腦數學。所謂“離散”的意思就是“不連續”,因為電腦中的數都是不連續表示的,所以離散數學中的演算法更像是針對電腦發明的(當然這句是胡扯,只是二者有些相似,很多電腦的演算法還是出自離散的,資料結構中的樹和圖幾乎照扒圖論)。離散數學是個合集,包含了集合論,圖論,代數學,組合數學,數論,謂詞邏輯這些,其實每一門數學都可以研究得很深。對離散數學整體推薦北大出版的《離散數學教程》,還有機械工業出版社翻譯的《離散數學及其應用》和《具體數學》(這本只有英文的)。下面分別就每一門課程簡單的討論一下:
集合論:相對簡單一些(除了古典集合論以外),我是簡單過了一遍沒有深究;
圖論:圖論是很難的,按sir前輩的說法,“全國真正懂圖論的人不到30個”,可能最近20年多了一些,但是應該也不到100個吧(口胡。圖論難在沒有固定思路,似乎每個題目都有獨特的證明方法,還有一些根本就還沒有證明出來,比如旅行商問題。推薦王樹禾的《圖論及其演算法》。
代數學:群環模域的性質,是很好玩的,有些時候很抽象,變幻莫測,但是仔細研究會覺得這個東西令人著迷。前面學過的高等代數,只是代數學中的一小部分。有些代數不建議過早接觸,像什麼李代數、交換代數之類的,容易入魔。
組合數學:就是排列組合那堆東西,但是要深好多。本科離散很少有講到的。有餘力看一看。推薦清華盧開澄盧華明寫的《組合數學》,還有機械工業出版社翻譯的《組合數學》(這本建議讀英文原版,應該已經到第5或第6版了,中文翻譯還是第3版)。
數論:這個最初接觸的時候是更久以前了,應該是在小學,學習整除還有質數、最大公約數這些東西。這在數論中叫做初等數論。此外還有代數數論、超越數論什麼的,也是不建議過早接觸。推薦陳景潤的《初等數論》(薄薄的一本幾天就看完,小學生也能看),還有北大潘承洞潘成彪的《初等數論》。
謂詞邏輯:也算相對簡單一些的吧,初中學過的。推薦科學出版社的《面向電腦科學的數理邏輯》。

數值分析:其實我也不知道怎麼介紹,當初沒好好學,到現在也沒怎麼用得著。sir前輩那邊寫的是“計算方法”,介紹的也比較簡單,可能電腦用到的比較少吧。

研究生階段還有兩門數學課:隨機過程和泛函分析。都是比較恐怖的課程。聽說哈工大電腦研究生掛率第一的是隨機過程,第二是泛函,中科院計算所掛科第一的是泛函,第二是隨機。早有人說“隨機過程隨機過,泛函分析心犯寒”……

除了上面推薦的書,還要嚴重推薦一套美國研究生的教材GTM,一系列有200多本,涵蓋各門數學。像《線性代數》《線性代數與抽象代數》《代數學》《圖論》《機率論》等等,都很不錯。
然而……需要硬著頭皮啃英文。

接下來說說電腦吧(終於到正題了)。

外面瘋傳的“xxx是世界上最好的語言”根本不用聽,用心學好幾門最基礎的語言:c,java,c++。個人覺得,就語言的難度來講,c和java加起來都比c++要簡單的多。c是偏底層的語言,面向過程,著重於精細控制記憶體,學的時候應該讓自己“站在記憶體的角度”考慮問題;java是標準的物件導向語言,能教你用對象的角度去看待問題。c自頂向下編程,java自底向上。都學完了能理解很多電腦的“禪意”。c++包羅永珍,既可以寫成c的面向過程,又可以寫成java的物件導向,各種靈活,然而,這種“包含一切能力”的想法毀了這門語言,它太複雜了,幾乎不可控制。說“毀”有點誇張了,但是它的複雜程度確實是c和java無法相比的。推薦《c primer plus》《how to c program》《java核心編程》《瘋狂java講義》《c++ primer plus》《c++ primer》,effective系列,《c陷阱與缺陷》……嚴重不推薦譚浩強的書,容易誤入歧途。

順帶推薦下編譯器吧,c/c++推薦visual studio,如果嫌太大可以用MinGW,DevC++,codeblocks,拒絕TC2/3以及VC6;java推薦Intellij Idea,Eclipse,Netbeans,不建議MyEclipse。

如果有人推薦其他語言的話,他們說的對,但是,不用聽。比如,C#擁有宇宙最強編譯器visual studio的支援,文法跟java類似但寫起來就是舒服,開發圖形介面so easy;js是動態語言,不講類型,而且適應各種平台;php輕鬆寫網站,想要什麼功能只要去網上查查函數就好;go輕鬆寫大規模並發,拋棄了java裡面那堆冗餘的東西;我是寫python的,萬能型語言,開發效率極高,什麼庫都有……no,打好基礎才是最重要的。很多學python踩坑無數一臉懵逼的人到最後還是老老實實的去看裡面的記憶體配置原理,要是早會了c這些都是小兒科。

語言是入門,在入門過後,進來之後,別急,還有一道門,首先會遇到的是資料結構和演算法。資料結構就是資料在記憶體中的表達方式,演算法是資料在cpu中的處理方式,二者是相輔相成的。所以就有了那句著名的式子:程式=資料結構+演算法。我個人覺得資料結構和演算法應該是電腦專業本科最重要的課。希望在學習的時候,不是想當然的在紙上寫一堆虛擬碼,那樣基本上是白寫。要把講過的資料結構和演算法用語言實現出來,這樣才算掌握。推薦清華出版社嚴蔚敏的《資料結構(C語言描述)》《演算法導論》《演算法》,如果都看完了,可以試著看一下那套令人聞風喪膽《電腦程式設計藝術》。

資料結構和演算法過後,就是電腦的專業課了,大概有這麼一些:編譯原理、作業系統、資料庫、資訊理論與編碼理論、電腦網路、電腦群組成原理、電腦體繫結構、嵌入式、電腦圖形學、軟體工程、電腦安全學。本科大概就這些了,如果還有其他課,基本都是講座性質的,都是研究生階段主要的研究方向了。

編譯原理:有一門課叫形式語言與自動機,大概可以算這門課的先行課程,跟數學裡的計算方法也有些關係。講的主要是一些文法,怎麼把我們的自然語言一步步的變成電腦能聽懂的邏輯和過程。很慚愧的說,這課我是沒聽懂。不過,學完之後,編譯原理的前面一半都很輕鬆了。推薦蔣宗禮先生的《形式語言與自動機》以及機械工業出版社翻譯的《編譯原理》(龍書)。

作業系統:可不是簡單的講講linux和windows了事的。作業系統四大塊:進程、記憶體、IO、檔案,這才是要學的。當然,學的時候推薦裝個linux系統,你會發現越用越爽,從開發角度來說,比windows舒服的多。現在比較流行的是centos和ubuntu,估計兩年後有變化的可能性不大。推薦書機械工業出版社《現代作業系統》,高等教育出版社《作業系統概念》,還有個兩大厚本的《Linux核心原始碼情景分析》。讀linux類作業系統源碼,對作業系統的熟悉有很大協助。

資料庫:會講ER圖,關係,範式等等內容,當然也會講SQL。僅僅只是SQL的話,那不叫資料庫。但是講SQL的時候,最好裝個資料庫練練手。推薦使用mysql或postgresql,當然要是統一使用別的資料庫那就跟大家一起吧。我當年使用的是sql server。所以我對這個資料庫印象一直不好(明顯的個人偏見)。推薦機械工業出版社的《作業系統概念》。

資訊理論與編碼理論:這門課應該屬於演算法課向某一方面的延伸,同時又屬於電腦網路、密碼學的前提。

電腦群組成原理:現在學校基本上不會單獨講彙編了,都是放在電腦群組成原理裡面講。這兩個東西真的是讓人噁心到吐血,你中有我我中有你,剪不斷理還亂,藕斷絲連骨肉相連。大概就是這麼個情況。電腦體繫結構可以算是它的後續課程,在講記憶體配置的時候,還能跟作業系統有點關係。推薦《電腦系統結構:量化研究方法》《深入理解電腦系統》。

軟體工程:大學裡基本屬於故事課,沒有代碼,沒有考驗智商的東西。不過,對於以後整個項目的理解還是很有協助的。從需求、設計、到開發、測試、再到上線、營運,你會對項目流程有個完整清晰的認識。從此以後,軟體不再是你寫的那三兩行滿是bug的小玩具,而是許多人團隊配合的作品了。

其他幾門課,嵌入式、圖形學、安全學,我也不是很懂,就不介紹了。都是傾向於某些方面的。高端的課程我不想介紹了,一是本科學不到,二是我也沒多少瞭解。在研究生課程中,有幾個非常熱門的領域:人工智慧,資料採礦,機器學習,模式識別,雲端運算,物聯網,自然語言處理,搜尋,等等等等。需要把本科那些數學和電腦知識都掌握得很紮實才行。

有幾門課程我一直是覺得莫名其妙的,大學物理,類比電路,數字邏輯(數字電路)。沒感覺學完之後用到了。還有什麼電腦導論,編程基礎之類的課,應該不是給電腦專業的人開的,隨意聽聽就好。還有不得不學的政治曆史類課程,呃。。。我能不能說我馬哲還挺厲害的。。。嘛,扯遠了。

這篇文章大概也就寫成這樣吧。等我再想起來什麼,可能隨時補充點。

大學本科電腦專業應該學點什嗎?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.