不管你是如何選擇了這門專業,我想告訴你的是這是一個很深的領域,沒有熱愛不如盡早轉行,
根據百度百科計算機科學與技術專業(以下簡稱計算機專業)給出的描述,該專業的主干課程有演算法、資料結構、作業系統、編譯原理、計算機組成原理、計算機體系結構、計算機網路(劃重點,這些都是專業基礎課,其中的任意一門拿出來都夠研究一生的,雖然大學的教育基本上都是講解非常基礎的部分,但這不代表它們不重要)
C語言
只要是計算機相關專業的學生就留不開編程,而提到編程就肯定會引發一系列的“最好語言”之爭,這里要強調一下:語言的選擇并不重要,那是不是說我不需要去學習語言就行了呢?這就好比去美國旅游,你當然可以去,但是沒有語言你頂多是去旅游,哪個在美國的華裔即便不能講的一口流利的英語,但基本的交流是肯定沒問題的,
對于語言來說,大學的入門課程基本上都是以C語言為入門課,當然其他語言也有,只不過C/C++作為基礎入門語言更合適,以C語言為例,不要求你C語言學的多好,但一定要學的扎實,它決定了你以后學習任何一門語言的速度與水平,
資料結構與演算法
當你掌握了C語言之后,接下來就會接觸到資料結構與演算法這種東西,初學者很難分清什么是資料結構、什么是演算法,甚至認為這兩個是一種東西,這是一門費時費力的專業課,許多普通大學并不是很重視,他們認為只要教出來的學生能夠找到一個好作業就可以了,的確,對于做一些小的的平臺、系統之類的基礎的資料結構與演算法就足夠了,但是作業3-5年后上升會很難,基本都會卡在不熟悉資料結構與演算法的瓶頸上,許多大學生都聽過ACM大賽,的確ACM算是計算機領域的頂尖級大賽了,能夠在比賽中得獎更是高手中的高手才行,很多人都躍躍欲試,最終不過是鎩羽而歸,這是因為他們根本就并不知道一個ACMer的成長到底有多難,如果要入ACM的坑,一定要莫大的毅力才可以,中途放棄是不會有任何回報的,欲戴王冠,必承其重,
Linux
計算機專業的學生不能不會Linux,不管你的學校開不開這門課程,你都要學,而且要用得和自己的Windows一樣熟才行,很多初學者以為Linux很難,其實不然,既然是作業系統,Linux開發出來也是給用戶用的,只不過專業人士用的多一點罷了,很多操作都是非常簡單的,而且在學習Linux的程序中,你會逐漸拓展自己的視野,你會了解到如何掛載鏡像,如何配置虛擬機,如何使用命令列(linux下的命令列可以在windows的powershell里使用,非常好用),而且如果你要學習嵌入式開發,Linux也是必不可缺的要求,
面向物件語言
很快,你們就會接觸到第二門語言,可能是C++、JAVA、Python等等,這些語言都有一個共性:面向物件編程,這和C語言的面向程序編程不一樣,你不會再寫一大堆混亂的函式來實作不同的功能,你要開始通過類與物件來做更好玩的事情了,如果你的C語言基礎打得非常好,再學任何一門語言你都會是輕松的,唯一困難的就是思想的轉變,面向程序編程思想–>面向物件編程思想,到這個時候你就已經真正進了計算機專業的大門了,雖然這個時候你才大一下學期或者大二上學期,這個時期你一定要多學東西,如果你學了JAVA,我推薦你也去接觸一下C++、Python,剛剛入門的小白需要迅速增加知識儲備,越廣泛越好,你了解的越多,你越能明白你自己以后想要的是什么,
資料庫與SQL
毋庸置疑,資料庫的基本操作都是要會的,無論你以后是做什么方向的作業,所有的工程都是要有后臺資料庫的,初學者最好使用Mysql+可視化工具Navicat進行學習,當然學校有自己的要求就按學校的來,一般SQL陳述句的學習都是穿插在理論學習之中的,如果以后你不是專門要做資料庫這方面的作業,只要學會基本的SQL語法就足夠了,
GitHub
計算機專業的學生要學習會使用GitHub,無論是用來保存自己做過的東西,還是從上面復刻(fork)別的專案都是非常有用的工具,GitHub除了可以當代碼倉庫,最出色的方面還是它的版本控制,這對于開發者來說是非常有用的,GitHub的基本操作非常簡單,命令列操作也就幾個常用的命令,基本上1-2天都能學會,經常使用,出現了不懂的地方繼續充電,大學課程里不會有一門課教授GitHub,這屬于自學的內容,
前端開發
HTML+CSS 近兩年挺火熱的一個方向,產生的原因在于前后端分離的趨勢,前端的定義也不僅僅局限于切圖、美工之類的作業,從基礎的HTML+CSS到各種前端框架都是這個方向的學生要學習的,推薦直接學習HTML5+CSS3,它們是HTML+CSS的新標準,雖然有些瀏覽器(例如ie,前端開發者永遠不可避免的瀏覽器)不兼容新的標準,但是隨著時間的推移,新的標準必然會取代舊的標準,尤其是HTML的canvas標簽要深入的學習,沒有一個網頁出來效果是單純的文字,
Javs 前端三劍客除了HTML+CSS,當然還有Java,初學者迷惑Java與Java的關系,這里告訴你,它們的關系就和雷鋒與雷峰塔,張三與張三豐的關系一樣!!!一點關系沒有,當然Java也有新的標準那就是ECMA6(ES6),Java本身并不是嚴格的面型物件編程的語言,但是新的標準能夠更適應面型物件編程,能夠提高開發者的作業效率,當然也是有部分瀏覽器不能實作完全支持ES6標準,當然學JS的同時要順便把Jquery學了,它們大多數是相通的,
前端框架學前端要比學后端更要掌握時代的趨勢,不斷學習新的事物,才能立足于前端,永遠不要認為前端簡單而學前端,任何一個深入學習過前端的人都會告訴你,前端的水比后端深多了,前端三大主流框架Vue、AngularJS、React,不推薦全都學習,每個公司都有自己的標準,能夠有針對性的學習也是很好的,
你以為這就完了?不不不,這才是開始,
1. 對于一個工程性的大專案,混亂的外部js檔案會把工程搞得一團糟,這里就繼續學習Webpack打包工具了,不過去年一個新的工具專案parcle在github上獲得了不少的star,簡單方便,大有超越Webpack的趨勢,
2. 現在市面上的ES6標準還是用的不如ES5,那如果出現了沖突怎么辦呢?這時候你就要學習Babel了,這個東西能夠幫助你做好兩個標準的兼容問題,
3. Java還沒學好的同學,Type現在又火爆起來了,還不趕快加入學習!!!
4. 認為前端只能作頁面?NodeJs已經開始做后端的事情了!!!
前端水很深,不是簡單幾段文字能夠描述清楚的,如果真心想學前端,不然認真的如把上面的內容百度一翻,雖然僅僅是了解,但是你已經做到先人一步了,
后端開發
后端開發有很多種形式,Java、Python、Go、PHP都能做,
Java全家桶 這里以Java為例,畢竟現在大學教育都主要以Java為主要課程,授課流程基本都是從Java SE 到Java Web,再到Java EE、Java ME,小白估計又懵了,這里說的Java SE就是我們平時說的Java,它的英文是Standard Edition,這也是后面所有java技術的基礎,同樣,如果你要做Java后臺開發,Java SE的基礎一定要打牢,而Java Web是Web后端的基礎,Java Web工程師現在也是就業的熱門崗位,是后端開發的重要內容,Jsp+Servlet+Javabean是Java Web的基本組成,這也是MVC的一種基本框架,它能幫助你做出一個簡單的系統專案,但是不得不說的是,沒有HTML+CSS的前端技術,做出來的東西是在是太丑了,致力于做Web后端的同學,前端的知識也要有所了解才行,而Java EE,它的英文是Enterprise Edition,它是面向企業級開發的一個語言平臺,熟練掌握Java EE的各種特性是后端程式員的必修課,Java ME,英文名稱Micro Edition,它是一種面向嵌入式的語言平臺,學校開設課程的不多,除非是要專門學習嵌入式,不然不需要過深的研究,
作業系統與計算機網路 這兩個課程是計算機專業的基礎課程,java開發的一個主要特點就是多執行緒,而對于作業系統的整體認知都要來源于這門課程,你需要知道什么是并發運行,IO設備到底是如何管理的,計算機到底是如何運行的,Java的工程大多規模較大,需要應對高并發的一些情況,一個后端開發者應熟練的使用stream APi控制物件集合,掌握RxJava這種具有函式編程風格的庫或者框架,在Java網路編程領域,哈諾德 (Elliotte Rusty Harold) 的那本《Java網路編程》是非常經典的書籍,非常有必要去踏實的學習這一部分的內容,網路開發的經典框架是Netty,它是一種異步的、事件驅動的網路應用框架,能夠快速開發高性能的網路服務器和客戶端,JVM的底層機制在很多情況下都有非常重要的作用,這時候你一定會接觸到Vert.x,這里不需要過深的研究,只要掌握其核心組件就可以了,
后端框架 后端框架的基礎就是MVC,也就是之前說的Java Web的三大組成,但是企業中通常會用更方便的SSH(Spring + strtus2 + Hibernate)或者SSM(Spring + SpringMVC + MyBatis),沒有好壞之分,不同的公司也會用不同的標準,Java框架的發展雖然趕不上前端的速度,但也是不斷變化的,自然是要不斷學習,
你以為這就完了?不不不,這才是開始,
1. Java雖然不擅長做桌面應用,這方面還是C++、JS更強大一點,但是你應該懂一些Swing、ATW的技術,甚至是更加深入的學習Java Fx技術,
2. 所有的工程都是由資料庫的,JDBC都不懂怎么做開發?后端程式員不能局限于Mysql,還于精通Oracle的相關技術才行,最好再去了解一下Redis,
3. 組件式開發能夠加快開發,Maven技術能夠快速搭建工程框架,開發者應該熟練運用這種技術,
4. 不懂服務器的后端不是好運維,后端開發者不能局限于Java的Tomcat,像Apache、Nginx這樣的服務器軟體都應該有所了解,
Android與IOS開發
手機已經改變了人類的生活,各種各樣的App層出不窮,而手機系統中80%以上都是Android系統,不到的手機系統是20%IOS,還有幾乎可以忽略不計的其他系統,所以Android開發已經是現在App開發的主力軍了,而Android開發一直以來都是基于Java語言的,直到這兩年突然出來的黑馬Kotlin,所有學習過Java的人都會了解過Kotlin,他們會驚嘆Kotlin的友好,但是不得不說的是,Java還是現在的主流,Kotlin用在開發中還是有許多不穩定的情況,新技術的推廣估計還要再等幾年,要去熟悉Android的SDK,熟悉JNI機制,要不不斷用各種專案練手,GitHub上很多不錯的專案都可以fork下來自己學習,
IOS開發雖然受眾不多,但也是需要App的啊,現在的IOS開發基本上也有兩種語言,Objective-C和Swift,其中OC的使用還是多一點,學習IOS開發一定要緊跟IOS系統的發展,去年9月份蘋果公司推出了IOS的第11個版本,不要從很老的版本開始學,
游戲開發
很多學生喜歡打游戲,對于計算機專業的學生,想做游戲的也不少,許多學生想學但是不知道該怎么學,但實際上,國內大學幾乎沒有開設游戲相關專業的,在這個領域最頂尖的大學是美國南加州大學(USC),
C++與C# 在圖形影像處理這方面,這兩中語言是非常優秀的,千萬不要以為Java能做任何事情,在游戲領域真正的老大是這兩門語言,游戲開發自然離不開游戲引擎,大的游戲公司一般都有自主研發的游戲引擎,而市面上的主流引擎以Unreal(使用C++語言)和Unity 3D(使用C#語言)為主,而Unity 3D有免費的個人版本,更適合學習與小團隊開發,所以市場份額更高,之前Unity還支持JS和Boo,不過已經取消了對Boo語言的支持,JS也大有被取消的趨勢,端游這方面,沒有基礎的同學可以從C++入門,之后學習C#,并嘗試使用Unity引擎開發小的Demo,
計算機圖形學與Shader 如果說語言是外功,那么演算法就是內功,而圖形學就是游戲開發領域的必修內功,各種圖形演算法可能比資料結構與演算法中的內容還要復雜,對數理知識的要求更高,很多開發者不屑于演算法學習,認為我只要做出好看的作品就可以了,但實際上不是這樣的,計算機這個領域就是這樣,只要你想深入學習一些東西,演算法永遠是不可避免的,有的大學生做了兩、三個Demo就去應聘,能夠頭頭是道的講出來自己是如何用引擎做出來的,但是一問到底層機制卻說不出來,這就是內功修煉匱乏的原因,而且越是作業的時間長表現的越清晰,這部分你應該熟練的掌握DirectX與OpenGL兩個圖形介面庫,深入理解圖形處理的機制,在圖形學領域的另一個難點就是Shader著色器,這個東西決定了你做出來的作品是基于外表的好看還是基于內在的好看,前者只要有絢麗的貼圖、紋樣就能做出來,但是后者確實要深入理解游戲引擎渲染機制,掌握掌握紋理映射、光柵處理、GPU機制的綜合體現,這里推薦siki老師的教程,在游戲教學方面的視頻都是非常好的資源,不要以為這就完了,還有GLSL和HLSL等著你去學,shader真的不是看幾個視頻就能學好的東西,
手游開發 手機App中必不可少的一類軟體就是手機游戲軟體,手游開發注定是要走向輝煌的,Unity當然可以做手游,王者榮耀就是用Unity制作的,畢竟王者榮耀同時在線人數能夠達到500W,用一般的引擎會非常的吃力,不過對于學習來說我們就不用考慮那么多了,像老牌手游引擎cocos2d-x支持C++、Lua、JS三種語言的編程,是國內第一游戲引擎,全球第二游戲引擎(僅次于Unity),除此之外還有Egert、Layabox在國內也是非常受歡迎的引擎,這些引擎大多都支持的一門語言就是JS(包括Type),
數字媒體
Adobe全家桶 如果想要致力于學習這方面的內容,Adobe系統的Ps(影像處理)、AI(矢量圖制作)、Au(音頻處理)、Pr(視頻處理)、Ae(視頻特效處理)都是要會操作的,不需要精通,畢竟不是做專業的美工師,像這些軟體不需要去購買高昂的視頻去學習,許多網上課程已經足夠學會基本操作類,如果想進階最好是購買一本專業書籍來幫助提升,
FFmpeg 這個軟體更偏向與計算機專業,其中的操作不如Adobe的簡單,但是對計算機專業的學生還是很友好的,它是通過命令列來操作的,包含libavcodec(一個用于多個專案中的音視頻解碼器庫)和libavformat(一個音視頻格式轉換庫),
3dmax與maya 3D影像建模領域的兩大巨頭,這就偏向于美工的技術了,需要一定的美術功底,這兩個軟體的基本功能都沒有什么差別,
虛擬現實 3D立體技術包括3D建模與3D顯示,虛擬現實就是基于3D顯示的一種技術,這個領域最基本的語言是C++,與C#,基本都是通過游戲引擎渲染出來的,
人工智能
人工智能不同于傳統的前后端開發,它對線性代數、高等代數的要求很高,許多計算都是通過矩陣來做的,許多小白會對人工智能(AI)、機器學習(DL)、深度學習(DL)感到迷惑,這里總結一下,機器學習的目標是實作人工智能,而深度學習是機器學習的一種方法,除此之外還有決策樹學習、貝葉斯學習等方法,
Python 現在最火熱的一門語言,在人工智能領域尤為吃香,Python語法簡單,各類第三方庫能夠在許多不同的領域發揮作用,以至于已經有部分的高校開始嘗試用Python作為計算機專業的入門語言來講授,即使是在Web開發方面,Python Web也毫不遜色,不過還是讓Python在屬于它的領域大放光彩吧,
CNN(Convolutional Neural Network) 翻譯過來就是卷積神經網路,它是一種新型的人工神經網路結結構,利用這種技術在影像和語音識別方面能夠得到更優的預測結果,這種技術通常用在深度學習中,Tensorflow它是機器學習領域的一個開源軟體庫,它能夠支持Python、C++、Java、Go等多種語言,我們在用Python做機器學習的時候大多會用到TensorFlow庫和numpy庫,想學習人工智能的同學一定要掌握好TensorFlow,TensorFlow是最流行的,但不一定是最好的,它也有自己的一些缺點,所以不要以為機器學習只能使用TensorFlow,
OpenCV(Open Source Computer Vision Library) 人工智能自然會涉及影像處理,計算機視覺以及模式識別,而這個視覺庫,如果想學習像人臉識別,動作識別等領域的知識,這個庫是一定要學好的,這個庫主要介面是C++語言,在圖形影像處理這部分C++是占有統治地位的語言,當然也有支持Python的介面,
大資料開發
Scala 現在的大資料人才大多還是以Java語言為主,之所以寫Scala是因為在后端開發部分寫了Java的相關內容,這里想討論點別的,這門語言因為有Spark的存在,被使用的概率多了不少,它是一門非常適合函式式編程的語言,而且這種語言兼容Java,能夠運行在JVM上,也可以呼叫Java的類別庫,是大資料方向的學生不可不學的一門語言,
Hadoop Hadoop是Apache公司下的一個大資料通用處理平臺,它是大資料方向的必修課,學習Hadoop不僅僅是學會搭建集群,還要掌握使用Hive(Hadoop架構之上的資料倉庫)對資料進行精煉、查詢、分析,通過HDFS(Hadoop分布式檔案系統)來處理大規模的資料集等等,
MongoDB 大資料方向的學生不能局限于結構化的資料庫,像MongoDB這樣的非結構化資料庫才是將來作業使用的主流資料庫,
網路安全
密碼學 解密與加密永遠是網路安全的重要組成部分,密碼學一定要系統的學習,因為網路安全的整個學習程序都要圍繞密碼學展開,很多學校沒有專業的密碼學課程,或者根本不知道什么是密碼學,這就需要多買幾本經典的密碼學書籍來看看了,而且要多花精力來學習才行,
黑客攻防 網路安全方向的學生一定要以一個黑客的標準來要求自己,這里的黑客是指白帽黑客(不明白的可以參考百度百科黑客),這里就需要深入的學習Unix/Linux的底層機制了,市面上大多數的服務器都是以Unix/Linux為作業系統的,很少是Windows,要深入了解計算機網路模型的安全機制,理解防火墻的作業原理,對于Web安全、漏洞分析、0Day攻擊、IDS(入侵檢測系統)、網路滲透都要有較深的理解、
逆向工程 分為不同的平臺,諸如Windows、Android、IOS等等,逆向工程要深入了解計算機組成原理,熟練掌味訓編語言,能夠用C/C++進行基本的編程,逆向工程有許多分析工具可以用,例如IDA Pro、WinDbg等等,這些除錯工具能夠大大提高逆向分析的效率,要熟練掌握,
計算機領域現在已經滲透到各行各業,各種計算機相關的崗位層出不窮,上面僅僅羅列了一些博主熟悉的方向,當然熱門的方向還有物聯網、嵌入式等等,由于博主的知識儲備非常有限,對這些領域了解的不多,所以就不班門弄斧了,文章涉及多個領域的專業內容,大可挑選自己感興趣的部分進行閱讀,很多名詞可能讀者不甚了解,推薦看完文章進行百度或者谷歌,當然,文章僅供參考,每個人的學習路線還是要有自己決定的,
謹以此文獻給仍然迷失在大學生活中的計算機專業學子!!!
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習交流圈子,QQ群【757874045點擊進入】微信公眾號:C語言編程學習基地
分享(原始碼、專案實戰視頻、專案筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
C語言編程學習軟體

C語言學習視頻

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/487.html
標籤:其他
