圖形技術和游戲編程哪個好,考研是考計算機方向好?
專業對于某個人來講沒有好壞之分,只有適不適合!
可以說,考研無論是計算機方向,還是集成電路方向前景都不錯!目前,這兩個專業的高端人才市場缺口都很大。計算機方向的高端人才始終就業都比較好;而集成電路的高端人才隨著電子產業的高速發展,人才缺口越來越大。
不過,考研選擇計算機方向,還是選擇集成電路方向是有條件的。
下面先來看看學習這兩個專業都需要那些基礎知識:
計算機科學與技術專業
主干課程
公共課程:數學(高等數學、線性代數、概率論與數理統計、離散數學、數值分析)。
專業基礎課程:電路原理、模擬電子技術、數字邏輯、微機原理、匯編語言、操作系統原理、編譯原理、算法與數據結構、面向對象方法、C語言/c++語言等。
專業方向課程:計算機數據庫原理、Java語言、圖形學、人工智能、多媒體技術、網絡安全、人機交互、無線互聯網技術、軟件開發方法、高性能技術、系統仿真和虛擬現實等。
集成電路設計與集成系統專業
主要課程
通信原理、計算機應用技術、模擬電路、數字電路、電路分析基礎、信號與系統、集成電路應用實驗、現代工程設計制圖、微機原理與應用、軟件技術基礎、量子力學與統計物理、固體物理學、半導體物理、微機原理、電磁場與電磁波、現代電子技術綜合實驗等
核心課程 固體物理學、電路優化設計、數字通訊、系統通信網絡理論基礎、數字集成電路設計、模擬集成電路設計、集成電路CAD、微處理器結構及設計、系統芯片(SoC)、電子設計自動化與嵌入式系統設計、射頻集成電路、大規模集成電路測試方法學、微電子封裝技術、微機電系統(MEMS)、VLSI數字信號處理、集成電路制造工藝及設備。
從上面我們了解到,學習計算機專業,需要較好的數學基礎;學習集成電路專業,需要較好的物理基礎,特別是電學知識。
所以,個人建議:如果數學知識較好的話,選擇計算機方向;如果電學知識較好的話,選擇集成電路方向。
計算機類的學哪個技術比較好呢?
關于計算機的學習,首先希望你能夠先打好基礎,先學好基層編程語言。
不管你是如何選擇了這門專業,我想告訴你的是這是一個很深的領域,沒有熱愛不如盡早轉行。(以下介紹計算機學習路線及思路)
C語言
編程語言是編程的工具,計算機相關專業的學生必須具備足夠的編程能力。當然,關于“最好語言”的爭論從來沒有休止過,這里要強調一下:語言的選擇真的沒那么重要,你現在學了Java,很有可能將來需要做python的工作,學習語言的過程最重要是語言的機制。要記住,在入門階段不應過多的去考慮哪種語言更有前景。
對于初學者來說,以C語言入門自然是不錯的,大多數大學也樂此不疲,當然其中不乏直接上手C++、Python的學校。對于C語言來說,不要求你學的多好,但一定要學的扎實,它決定了你以后學習任何一門語言的速度。
數據結構與算法
掌握了C語言之后,接下來就會接觸到數據結構與算法,實際上初學者很難分清什么是數據結構、什么是算法。這是一門頗有難度又饒有趣味的專業課,對于注重就業的高校來說,這部分的知識并沒有足夠強大的師資力量去支撐,這也導致了老師講的不夠透徹,學生也不愿意花精力去學習。從就業角度來說,對于開發中小型的系統,基礎的數據結構與算法是足夠用的,但這并不適合大型項目的開發。不熟悉這一塊內容的學生,基本在工作3-5年后都會遇到瓶頸。而像BAT這類的互聯網大廠招聘應屆生時是非常重視數據結構與算法的,因為他們需要懂得這些知識的人才去做大項目的一顆顆螺絲釘,而非全能的瑞士軍刀。計算機專業的學生都會知道ACM,這是計算機領域的頂級程序設計競賽,能夠在比賽中得獎更是難上加難。一個優秀的ACMer需要付出常人2-3倍的努力才能有所成就,如果要入ACM的坑,一定要莫大的毅力才可以,中途放棄是不會有任何回報的。對于本科生來說,即使不以ACM為目標,這部分的內容,仍然是攻堅克難,需要反復琢磨的基礎知識。
Linux
計算機專業的學生不能不會Linux,不管你的學校開不開這門課程,你都要學,而且要用得和Windows一樣熟才行。很多初學者以為Linux很難,其實非也,既然是操作系統,Linux開發出來也是給用戶用的,只不過專業人士用的多一點罷了。很多操作都是非常簡單的,而且在學習Linux的過程中,你會逐漸拓展自己的視野,你會了解到如何掛載鏡像,如何配置虛擬機,如何使用命令行(linux下的命令行可以在windows的powershell里使用,非常好用)。而且如果你要學習嵌入式開發,Linux更是必不可缺的要求。
面向對象語言
你的第二門語言可能是C++、JAVA、C#等等,這些語言都有一個共性:OOP(面向對象編程)。這和C語言的面向過程編程不一樣,你不會再寫一大堆混亂的函數來實現不同的功能,你要開始通過類與對象來做更好玩的事情。如果你的C語言基礎打得非常好,再學任何一門語言你都會是輕松的。唯一困難的就是思想的轉變,面向過程編程思想–>面向對象編程思想。到這個時候你就已經真正進了計算機專業的大門了,雖然這個時候你才大一下學期或者大二上學期。這個時期你一定要多學東西,當然第二門語言并不意味他將成為你的全部,我也推薦你去接觸一下C++、Python。剛剛入門的小白需要迅速增加知識儲備,越廣泛越好,你了解的越多,你越能明白你自己以后想要的是什么。
數據庫與SQL
毋庸置疑,數據庫的基本操作都是要會的,無論你以后是做什么方向的工作,所有的工程都是要有后臺數據庫的。初學者最好使用Mysql + 可視化工具Navicat進行學習,當然學校有自己的要求就按學校的來。一般SQL的學習都是穿插在理論學習之中的,即使以后你不是專門要做數據庫這方面的工作,SQL的大多數操作都是必須會的知識。
GitHub
大學課程里不會有一門課教授GitHub,這屬于自學的內容。Github對于程序員的開發是非常有用的。GitHub除了可以當代碼倉庫,最出色的方面還是它的版本控制和協同開發,這對于開發者來說是非常有用的。GitHub的基本操作非常簡單,命令行操作也就幾個常用的命令,基本上1-2天都能學會,出現了不懂的地方繼續充電。
web前端開發
HTML+CSS 近兩年挺火熱的一個方向,產生的原因在于前后端分離的趨勢,前端的定義也不僅僅局限于切圖、美工之類的工作,從基礎的HTML+CSS到各種前端框架都是這個方向的學生要學習的。推薦直接學習HTML5+CSS3,它們是HTML+CSS的新標準,雖然有些瀏覽器(例如ie,前端開發者永遠不可避免的瀏覽器)不兼容新的標準,但是隨著時間的推移,新的標準必然會取代舊的標準,尤其是HTML的canvas標簽要深入的學習,沒有一個網頁出來效果是單純的文字。
JavsScript
前端三劍客除了HTML+CSS,當然還有JavaScript,初學者迷惑JavaScript與Java的關系,這里告訴你,它們的關系就和雷鋒與雷峰塔,張三與張三豐的關系一樣!!!一點關系沒有。當然JavaScript也有新的標準那就是ECMAScript6(ES6),JavaScript本身并不是嚴格的面型對象編程的語言,但是新的標準能夠更適應面型對象編程,能夠提高開發者的工作效率,當然也是有部分瀏覽器不能實現完全支持ES6標準。當然學JS的同時要順便把Jquery學了,它們大多數是相通的。
前端框架
學前端要比學后端更要掌握時代的趨勢,不斷學習新的事物,才能立足于前端。永遠不要認為前端簡單而學前端,任何一個深入學習過前端的人都會告訴你,前端的水比后端深多了。前端三大主流框架Vue、AngularJS、React,不推薦全都學習,每個公司都有自己的標準,能夠有針對性的學習也是很好的。
web后端開發
后端開發有很多種形式,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框架的發展雖然趕不上前端的速度,但也是不斷變化的,自然是要不斷學習。
Android與IOS開發
安卓原生開發
手機已經改變了人類的生活,各種各樣的App層出不窮,而手機系統中80%以上都是Android系統,不到的手機系統是20%IOS,還有幾乎可以忽略不計的其他系統。所以Android開發已經是現在App開發的主力軍了,而Android開發一直以來都是基于Java語言的,直到這兩年突然出來的黑馬Kotlin。所有學習過Java的人都會了解過Kotlin,他們會驚嘆Kotlin的友好,但是不得不說的是,Java還是現在的主流,Kotlin用在開發中還是有許多不穩定的情況,新技術的推廣估計還要再等幾年。要去熟悉Android的SDK,熟悉JNI機制,要不不斷用各種項目練手,GitHub上很多不錯的項目都可以fork下來自己學習。
IOS原生開發
國內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的支持,即Unity目前只支持C#語言。端游這方面,沒有基礎的同學可以從C++入門,之后學習C#,并嘗試使用Unity引擎開發小的Demo。而手機App中必不可少的一類軟件就是手機游戲軟件,手游開發注定是要走向輝煌的。Unity當然可以做手游,王者榮耀就是用Unity制作的。
計算機圖形學與Shader
如果說語言是外功,那么算法就是內功,而圖形學就是游戲開發領域的必修內功。各種圖形算法可能比數據結構與算法中的內容還要復雜,對數理知識的要求更高。很多開發者不屑于算法學習,認為我只要做出好看的作品就可以了,但實際上不是這樣的,計算機這個領域就是這樣,只要你想深入學習一些東西,算法永遠是不可避免的。有的大學生做了兩、三個Demo就去應聘,能夠頭頭是道的講出來自己是如何用引擎做出來的,但是一問到底層機制卻說不出來,這就是內功修煉匱乏的原因,而且工作的時間越長表現的越清晰。這部分你應該熟練的掌握DirectX或OpenGL至少一種圖形接口庫,深入理解圖形處理的機制。在圖形學領域的另一個難點就是Shader著色器,這個東西決定了你做出來的作品是基于外表的好看還是基于內在的好看,前者只要有絢麗的貼圖、紋樣就能做出來,但是后者確實要深入理解游戲引擎渲染機制,掌握掌握紋理映射、光柵處理、GPU機制的綜合體現。這里推薦siki老師的教程,在游戲教學方面的視頻都是非常好的資源。不要以為這就完了,還有GLSL和HLSL等著你去學,shader真的不是看幾個視頻就能學好的東西。
頁游、手游開發
不過對于學習來說我們就不用考慮那么多了,像cocos2d-x引擎支持C++、Lua、JS三種語言的編程,是國內第一游戲引擎,全球第二游戲引擎(僅次于Unity),除此之外還有Egert、Layabox在國內公司的招聘中也經常出現。這些引擎大多都支持的一門語言就是JS(包括TypeScript)。
數字媒體
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語言的超集合,涵蓋C語言的用法,并且在其基礎上進行了擴充。但是,其基礎是C語言。
可以參考語言的使用歡迎度,C語言從沒有跌出前五。同時代的其他語言已經消失在歷史的長河,而C語言的存在年齡就能說明它的價值。下面給出這個建議的原因:
1、C語言可以很好的操縱底層硬件學習語言終會有個目的,是實現一個特定的功能,還是一系列特定的功能。如果從初學者的角度來看,我覺得這個需要實現的功能越簡單越好,同時還要保證能夠得到一定的成就感。因為成就感是支持繼續學習的一個原動力。
如果你在擁有一定的底層硬件知識基礎上學習編程,那么C語言就是最好的語言。它的本身是一門高級語言,但是又兼顧了匯編語言的硬件操作性質。即便只掌握C語言,找工作由企業要,上論壇有問題討論,當講師也有課上,一點問題沒有。
圖片來源于網絡,如有侵權請聯系刪除。基于windows操作系統的計算機底層代碼不開源,沒法定論。但是Linux系統的計算機底層代碼中的u-boot就是使用C語言寫成 。簡單的來說,C語言可以操作硬件,而且能力很強;C語言一樣可以有操作系統,應用一樣很廣泛。
2、C語言是基于過程控制自然語言很多看,就以最近幾年安卓手機的興起和人工智能應用帶來的JAVA、python來說,他們都是基于對象的。同樣,C++也是基于對象。這里有個問題,大家可以思考一下,基于對象的語言種類為什么比基于過程的多得多。
最終,對于程序來講,要解決一個問題是需要將現實中的對象變為程序中的對象。但是對于初學者而言,原始思維方式還是以過程為主的思維方式。先學習C語言,然后再過度可能更加平緩一些,不會輕易放棄學習。
圖片來源于網絡,如有侵權請聯系刪除。
其實不僅僅是C++,很多語言的基礎也是C語言。就比如,JAVA就是在C語言的底層框架上運行了一個虛擬機,以犧牲時間來保證它的兼容性。
3、C語言更接近實現原理因為C語言的誕生比C++早一些,說是早一些,實際上C語言已經用了很久,發現有了一定的不足才催生出C++。比如使用C++編寫一個圖形界面幾句代碼調用一個對象就行,但是C語言可能還要涉及底層的顯示原理。一時半會可能連原理都不清楚。
但是當有了答案再去思考原理這個事情就不僅僅是令人難受了,而是不可忍受,所以很多程序員不愿意使用算法畫一個簡單的圓。我以前的一個安卓的同事就是這樣,一個折線圖不愿意從原理上去實現,而是在會上討論的時候說是移植的時候SDK是那樣規定的。
對于編程,我并不喜歡總是去重復造輪子,但是輪子一定要造一次。
圖片來源于網絡,如有侵權請聯系刪除。以上就是這個問題的回答,歡迎留言、評論、轉發。以上就是關于圖形技術和游戲編程哪個好和考研是考計算機方向好的相關問題解答,希望對你有所幫助。