無論你是如何選擇了這門專業,我想告訴你的是這是一個很深的領域,沒有熱愛不如儘早轉行。前端
根據百度百科計算機科學與技術專業(如下簡稱計算機專業)給出的描述,該專業的主幹課程有算法、數據結構、操做系統、編譯原理、計算機組成原理、計算機體系結構、計算機網絡(劃重點,這些都是專業基礎課,其中的任意一門拿出來都夠研究一輩子的,雖然大學的教育基本上都是講解很是基礎的部分,但這不表明它們不重要)java
只要是計算機相關專業的學生就留不開編程,而提到編程就確定會引起一系列的「最好語言」之爭,這裏要強調一下:語言的選擇並不重要,那是否是說我不須要去學習語言就好了呢?這就比如去美國旅遊,你固然能夠去,可是沒有語言你頂可能是去旅遊,哪一個在美國的華裔即使不能講的一口流利的英語,但基本的交流是確定沒問題的。linux
對於語言來講,大學的入門課程基本上都是以C語言爲入門課,固然其餘語言也有,只不過C/C++做爲基礎入門語言更合適。以C語言爲例,不要求你C語言學的多好,但必定要學的紮實,它決定了你之後學習任何一門語言的速度與水平。git
當你掌握了C語言以後,接下來就會接觸到數據結構與算法這種東西,初學者很難分清什麼是數據結構、什麼是算法,甚至認爲這兩個是一種東西。這是一門費時費力的專業課,許多普通大學並非很重視,他們認爲只要教出來的學生可以找到一個好工做就能夠了,的確,對於作一些小的的平臺、系統之類的基礎的數據結構與算法就足夠了,可是工做3-5年後上升會很難,基本都會卡在不熟悉數據結構與算法的瓶頸上。許多大學生都聽過ACM大賽,的確ACM算是計算機領域的頂尖級大賽了,可以在比賽中得獎更是高手中的高手才行。不少人都躍躍欲試,最終不過是鎩羽而歸,這是由於他們根本就並不知道一個ACMer的成長到底有多難。若是要入ACM的坑,必定要莫大的毅力才能夠,中途放棄是不會有任何回報的。欲戴王冠,必承其重。程序員
計算機專業的學生不能不會Linux,無論你的學校開不開這門課程,你都要學,並且要用得和本身的Windows同樣熟才行,不少初學者覺得Linux很難,其實否則,既然是操做系統,Linux開發出來也是給用戶用的,只不過專業人士用的多一點罷了。不少操做都是很是簡單的,並且在學習Linux的過程當中,你會逐漸拓展本身的視野,你會了解到如何掛載鏡像,如何配置虛擬機,如何使用命令行(linux下的命令行能夠在windows的powershell裏使用,很是好用)。並且若是你要學習嵌入式開發,Linux也是必不可缺的要求。github
很快,大家就會接觸到第二門語言,多是C++、JAVA、Python等等,這些語言都有一個共性:面向對象編程。這和C語言的面向過程編程不同,你不會再寫一大堆混亂的函數來實現不一樣的功能,你要開始經過類與對象來作更好玩的事情了。若是你的C語言基礎打得很是好,再學任何一門語言你都會是輕鬆的。惟一困難的就是思想的轉變,面向過程編程思想–>面向對象編程思想。到這個時候你就已經真正進了計算機專業的大門了,雖然這個時候你才大一下學期或者大二上學期。這個時期你必定要多學東西,若是你學了JAVA,我推薦你也去接觸一下C++、Python。剛剛入門的小白鬚要迅速增長知識儲備,越普遍越好,你瞭解的越多,你越能明白你本身之後想要的是什麼。算法
毋庸置疑,數據庫的基本操做都是要會的,不管你之後是作什麼方向的工做,全部的工程都是要有後臺數據庫的。初學者最好使用Mysql+可視化工具Navicat進行學習,固然學校有本身的要求就按學校的來。通常SQL語句的學習都是穿插在理論學習之中的,若是之後你不是專門要作數據庫這方面的工做,只要學會基本的SQL語法就足夠了。sql
計算機專業的學生要學習會使用GitHub,不管是用來保存本身作過的東西,仍是從上面復刻(fork)別的項目都是很是有用的工具。GitHub除了能夠當代碼倉庫,最出色的方面仍是它的版本控制,這對於開發者來講是很是有用的。GitHub的基本操做很是簡單,命令行操做也就幾個經常使用的命令,基本上1-2天都能學會,常用,出現了不懂的地方繼續充電。大學課程裏不會有一門課教授GitHub,這屬於自學的內容。shell
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語言學習視頻