計算機游戲編程看什么書,大學學計算機類哪個專業好點?
你好,非常榮幸為您解答!
我個人的一些經歷和這個問題比較相關, 打算詳細寫一寫, 希望能幫助到題主和其他有類似迷惑的朋友。
先講故事:2008年我進入大學計算機系就讀本科。 剛來就震驚了,因為我和信息學奧賽圈內出名的cqf是同班同學。 cqf嘛, 現在的后輩們估計不認識, 但是在我們那個時候前三屆后三屆搞信息學奧賽或者關注一點點信息學奧賽的人都認識他。此兄初中的時候參加高中的國家信息學奧賽就拿到了清華的保送名額,, 但是他沒去, 此后連年拿保送資格自然如探囊取物不在話下, 后來也順理成章拿到國際奧賽金牌。 他算法水平極強, 16歲的時候就發明了一種很復雜的高效數據結構, 被后來的信息學奧賽選手廣為使用, 該數據結構和相關算法至今我都沒看懂。在同齡的我對電腦的認識還停留在“開開機就能玩WOW和WAR3了喲”的時候,他已經寫過不少信息學奧賽的教材了。
總之我想說,剛進大學的時候,我和cqf完全不在同一起跑線上。我只是那種"關注一點點信息學奧賽的人", 我全然不知道作為程序員要學什么、懂什么知識,也沒寫過一行C++代碼。而當時cqf和一些同樣有信息學奧賽基礎的同學早就有成千上萬行代碼的積累了。大學第一年我還沒想明白自己該干什么,而在此期間cqf把一半的專業必修課都上完了(這些課我直到大三才上完)。大學第一年結束的時候,我想哎喲我這樣不行,得仔細想想自己該干啥。
在大二這一年我慢慢想清楚了自己的強項在哪里,然后轉系去了電子工程,后來學的不錯。如今我在大疆創新做程序員,寫無人飛行器的程序,參與一些很酷的產品的研發,也有自己的團隊做項目。自己覺得自己發展還不錯。深深覺得自己當年做的選擇還算正確,對于“程序員怎么學數學”也有了一些自己的認識。
故事先講到這里。順便說,后來cqf本科畢業的時候被一堆美國大學哄搶,最后去了斯坦福讀博士。
現在隨著計算機水平的進步,各行業的自動化都在蓬勃進展,計算機和代碼廣泛深入到了很多領域。現在誰罵“程序員是屌絲”,其實已經是開了一個很大的地圖炮了,因為各行各業現在都有程序員。除了BAT(騰訊阿里百度)這類傳統互聯網公司之外,銀行、實業公司、研究機構、政府機關等等組織和公司,都有做網站\分析數據\寫自動化輔助工具程序\寫組織管理程序等等多種需求。 那么種種程序員的工作,有多少工作需要數學呢?需要怎么樣的數學呢?
首先毫無疑問地,程序員,就是所有“對著電腦,用手敲下特定編程語言構成的代碼的人”的總稱。我們要分析程序員的工作,也就是寫代碼。我個人把寫代碼的工作分為五類,不一定正確和全面啊,就是個概念性的分類:
1. 第一類是結構性的工作。這類工作把特定的代碼、代碼段(函數)、代碼庫構成具有特定功能的程序,這些程序可以接受特定的數據、輸出特定的數據。例子如網站的界面、 軟件的界面、 軟件的一些可視化功能,再復雜一些有網站前端如何與后端通信、如何分配用戶請求給后端,如何處理兩個并行的程序、通信過程、計算機系統等等。結構性工作需要的是經驗以及對已有數據結構的了解,并不需要特別高的數學水平。我說的經驗指的是對于一個特定的想要實現的功能,如何選擇程序邏輯和數據結構去實現,這種選擇的過程需要程序員有大量讀寫代碼的基礎,能夠把要實現的功能和自己以前實現過的或者看到過的功能聯系起來,設計出解決方案并實現。舉個例子,比如說網頁設計,通過HTML的元素構建頁面,通過javascript給頁面元素以動態,這個過程基本是“所見即所得的過程。
目前大部分的互聯網公司以及銀行系統需求的主要都是這類工作。為了實現特定功能,程序有非常復雜的結構,必須要很多人一同參與編寫和測試,因此才有了軟件工程這門學科的誕生。
結構性工作的巔峰產物是計算機操作系統。計算機操作系統雖然復雜,但是其中涉及到的數學并不多,最復雜的數學就是如何處理多個任務的調度以及進行內存分配管理,都可以抽象成簡單的離散數學和排列組合問題。不過,1萬行的操作系統和100萬行的操作系統的數學理論復雜度是差不多的,他們主要的區別是結構性的,而非數學上的。比如支持更多種CPU、硬件外設、網絡協議等等。
2. 第二類是效率性的工作。這類工作把特定的工程問題抽象成數學問題,然后發明新的數據結構或者操作邏輯去優化解決問題的效率。
最簡單的例子是排序,用冒泡排序或者快速排序給大批量數據做整理有顯著的時間差別,這個大家都知道的……計算機科學家們主要從事的就是這類工作,需要極高的組合數學和圖論等知識。早期的效率性問題通常依靠較為復雜的離散數學,而近年來大部分問題都是應用圖論來解決。
解決這類問題需要程序員對大部分的數據結構都有深刻的理解,并且能夠進行嚴格的理論分析,能夠清楚地指出某種數據結構或操作邏輯的時間效率和內存效率。上面談到的cqf 16歲發明的數據結構,就屬于這類工作……反正我對這類工作毫無天賦,繼離散數學敗了以后,后來的高級算法課成績也很差。
效率性工作的巔峰產物是一套書叫做《The Art of Computer Programming》,作者是斯坦福大學的教授Donald.E.Knuth。這部神書包含了人類已知的大部分計算機算法的理論分析和最優形式, 50年來被公認為算法領域的圣經。吃透這套書,就可以拿到世界上最好的程序員的工作了(比爾蓋茨說如果誰看懂了這套書,就請把簡歷發給他……),當然這很不容易。我至今只認真看了第一本的前言
兼有前兩類工作的巔峰產物是淘寶網,尤其是雙十一前后的淘寶網。不解釋太多Google這兩年在這方面做的不如淘寶,因為中國人實在太多了……
3. 第三類是邏輯性的工作。指的是用計算機模擬人類的認知邏輯,這類工作包括語音識別、文字理解、信息檢索、數據分析等等。這類工作最早屬于高大上的人工智能、自然語言處理研究,后來隨著互聯網的興起開始逐步進入大眾視野。這類工作的主要基礎是概率統計、機器學習和數據挖掘的模型,包含的數學知識主要有概率、線性代數和圖論。由于互聯網公司和金融公司對于機器學習的需求,相關的基礎知識已經發展得非常成熟,如何學習這類知識也已經有很規范的教程。如今在硅谷,程序員不懂點機器學習,都不好意思出門和人打招呼。
這類工作的應用大約是這樣的:通過分析用戶在淘寶上買東西的數據,推測他還會買啥;通過分析股市的變化以及一些市場信息,推測股市下一步漲還是跌。還有就是分析搜索關鍵詞給出搜索結果,分析語音信號轉化成文字等等。這些不同的應用都是為了分析數據,都有類似的處理模型和數學方法。 近年來在機器學習的基礎上人們發明了深度學習。這個我不是很懂,不好加以評論。但是我知道這類工作的主要目的是模仿人類的認知能力。特別地,機器學習領域最基礎最出名的模型“神經網絡”,已經被生物學家證明是比較好的對于人類大腦邏輯的模擬。
這類工作說簡單也簡單,說難也可以很難。你只需要學過大學一年級的線性代數,就可以理解神經網絡、支持向量機等機器學習的模型,然后自己訓練模型去分析數據了——這也是大部分硅谷公司的需求。百度新任首席科學家Andrew Ng在Coursera上有個機器學習的公開課,講完神經網絡之后他就說:“Good,你現在已經比大部分硅谷工程師更加了解機器學習了。”(真的不是黑么)然而機器學習的模型背后的數學非常深奧,比如說神經網絡可以等效成一些復雜的高維拓撲結構,網絡的訓練實際上是這些拓撲結構做拓撲變換的過程。比如如果待訓練的數據維數非常高,要選擇合適的函數降維。為了理解這些東西,需要深入學習線性代數、拓撲學、數學分析等數學知識。其實我說的我也不是很懂,我沒系統學過拓撲。
兼有前三類工作的巔峰產物是IBM的計算機waston。2011年Waston在美國的智力問答比賽“Jeopardy!” 中擊敗了兩位經驗老道的人類選手。這件事之所以令人震驚,是因為Jeopardy中主持人提出的問題大部分無法直接理解,而是隱藏在英語俚語和雙關語當中的巧妙語言。Waston在人工智能史上的地位遠遠超過當年擊敗國際象棋大師的Deep Blue。
4. 第四類是仿真性的工作。這類工作主要集中在游戲和動畫領域,其他邊緣一點但是更加高要求的有飛行器設計、氣象、天文等。仿真意味著在電腦的環境中虛擬出現實世界,這就需要程序員理解力學和光學等物理學理論。比如最簡單的,任何3D游戲引擎開發的第一步都是學習剛體變換等力學知識,用來把模擬出來的小人或者飛船等物體進行移動。剛體變換有很多種表示方法(茴香豆的茴字有四種寫法……),背后有不少數學理論。此外為了仿真毛發、浪花、濺起的塵土等等這類細小的物體,也有自己相關的物理和數學知識。
不同的行業對于仿真的需求不一樣,因此要求的專業知識也不同。游戲和動畫的需求是盡可能地真實表現場景,而飛行器設計上用的仿真更強調空氣動力學和結構力學,因為要用仿真分析飛行器飛行時的受力情況。天文、氣象和其他需求仿真的行業又有各自的側重點和知識領域,各個行業應該也都有自己暫時解決不了的問題。這些具體的知識區別我也不是很清楚,按照我對某些行業的理解,可能無非就是牛頓力學、動力學、微積分、微分方程和線性代數,因為都是在經典力學范疇內的物理,就那么點東西,從本科畢業開始算,把數學認真學個三年左右之后就能進入某個行業了。
這類工作的巔峰產物隱藏在大眾視線之外。比方說美軍號稱在海灣戰爭開始之前,就已經通過仿真軟件把戰斗推演過好多次了,最后真打起來的時候“就像打電腦游戲一樣”(語出《失控》)。再比如說,現在很多超級計算機都被用在氣象預測上。2008年北京奧運會前夕,北京氣象局就購買了一臺計算能力排全球前十的計算機,用來在奧運會期間提供氣象預測。當然,這些巔峰產物依然有很大的局限性。美國人預測不出他們會陷入伊拉克和阿富汗的戰爭泥潭,北京氣象局預測不出幾年后北京常常會有霧霾。當然我們也不能太強求,畢竟這種工作有點奪取上帝視角的傾向。這都說明了在仿真計算領域,人類還有很長的路要走。
5. 第五類是物理性的工作。“物理”指的是這類工作中產生的代碼要直接與物理世界發生接觸,比如從傳感器獲取世界的信息,控制執行器進行特定的運動等等。這類工作主要集中在航空航天工業以及機器人產業當中,是我現在主要從事的工作。 這類工作主要分為兩部分,一部分是觀測(如何通過傳感器數據了解自身和世界的狀態),另一部分是控制(如何根據自身和世界的狀態規劃自身的下一步運動),兩者都需求很多物理學和數學的知識,控制需要剛體力學和運動學、系統理論、控制論等,觀測需要信號處理、系統建模、機器視覺、概率統計、優化等等。
物理性工作的一個主要特點是,代碼與硬件以及機械緊密耦合,測試很困難(想想該怎么給一顆導彈debug……),所以通常這類工作要和仿真類工作同步展開,先在仿真平臺上做測試,然后再移植到真的機械上面去。而且程序員要深刻理解運行自己代碼的平臺的硬件和機械的性能和極限,一行錯誤的代碼很有可能會導致嚴重的事故(一個小數點點錯導致火箭發射失敗這種故事我們小時候應該都聽說過)。
這類工作近年來也開始進入普通行業,比如任何安卓手機現在都內置慣性導航元件,上面說的“觀測”中的算法就可以寫在手機里,用來獲取手機相對于世界的位置。 這類工作的巔峰產物是Boston Dynamics公司制造的大狗機器人和Petman機器人,可以自行百度了解一下。
好,接著說故事。
后來我自己想明白的問題是。大學的計算機科學系主要教育人學習如何從事第二類工作,但是世界上還有其他幾類程序員的工作是大學不教授的,而我的天賦和興趣主要在第三類和第五類工作上。其中物理性的工作所需要的知識,主要是電子工程、物理和機械系才能學到。所以我后來轉去了電子系,學得還不錯。而且通過對控制論和機器人學的學習,我對數學也有了全新的認識。
(下面是很個人的觀點,不一定正確啊,請輕拍)
我們高中學的數學,以及大學一年級學的微積分,其實都不是數學的本質,而是數學工具。數學的本質是建立一套嚴密的體系來描述世界,揭示世界本身的嚴格表示形式。當我在學習了機器人運動學之后,再回頭去看代數與幾何,就明白了人們為什么要建立種種復雜的代數結構并且去分析他們的性質。在學習了概率機器人理論以后,再回頭去看概率和統計,就明白了期望和方差這些不知道是確定還是不確定的玩意到底有什么用。我感覺其實學習大部分的數學知識都不存在有沒有天賦這樣一個說法,目前好的數學教材非常多,而且都把知識解釋得非常清楚,這本書看不懂了完全可以換一本再看。任何智力正常的人,在系統的訓練和合理的時間投入之后,都可以學會數學系本科涵蓋的一切數學知識。學習數學的關鍵在于有沒有興趣去欣賞它抽象的美,以及是不是愿意投入時間。 一開始我是不太會欣賞數學的,我高中數學很差,高考數學只有100多幾分。大學一開始學微積分也學得很差。但是我在大二大三期間寫機器人程序的時候發現了代數的重要性,學會了欣賞數學,于是就能學好數學了。大四的時候到美國交換,在一個還算不錯的大學的數學系上了兩門數學課,都比許多數學專業的同學學得好。研究生的時候項目比較多,不太專心上課,成績都一般,但是我能感覺出自己數學水平的進步。我沒有再回頭去學離散數學和算法,所以不知道現在自己在這方面進步如何,不過反正我不再搞相關的工作了,也沒時間去探究。借用一個名言,我覺得,以大部分程序員所需的數學的難易程度,根本沒到拼天賦的時候。
總而言之,我想說,題主還年輕,你既不太了解數學是什么,也不太了解程序員是什么。這個時候也不用擔心太多,安心把功課學好,多了解了解技術新聞,有時間的話嘗試一些編程的訓練,比如去coursera上找公開課聽一聽。除了學寫C/C++,Java這類程序之外,也可以嘗試學習HTML和網頁編程,兩者的思路不太相同。你對數學和編程的認識會不斷改變,在幾年之后才完全定形的。有什么好玩的平板游戲推薦?
推薦兩款解密燒腦和恐怖的平板游戲。
《死亡空間》
《死亡空間》的故事發生在一艘的大型太空飛船上,飛船內的通道與空間相對狹小,房間與過道充滿陰冷詭異的氣氛,伴隨而來的是隱藏在黑暗中的恐怖異形。主角艾薩克·克拉克(Isaac Clarke)將時刻面臨死亡威脅,主角需要盡一切力量挑戰無盡的死亡空間,并逃出生天。由于游戲的主要場景發生在狹小的飛船內部,其中一些區域還遭到了破壞出現了真空、失重或毒氣等特殊環境,玩家需要通過使用增壓服和磁力靴進行調整。在此類環境中,氧氣量會極速下降,所以玩家必須迅速通過這些區域補充氧氣,否則將窒息而亡。本作一反傳統射擊游戲的菜單信息界面設定,改用獨特的3D全息影像的表現方式。利用這種3D全息影像,玩家可隨時就地整理槍械、彈藥、物品,以及查看地圖。由于游戲是即時進行,因此玩家在做上述動作時較容易受到攻擊。
《死亡空間》的戰斗引入了一種叫做“策略性肢解”的設定,玩家可以通過切斷變異死體的四肢、觸手等位置給予敵人毀滅性打擊。
由于艾薩克只是一名工程師而非士兵,因此游戲中的主要武器都是采礦工具改裝而成。所有武器均兩種攻擊模式,像等離子切割槍就可通過旋轉攻擊方向來改變子彈發射軌跡,從而適應環境與敵人的變化,發揮武器的最大效能。游戲中還有自動化商店,玩家可在此進行買賣、存儲物品,或升級太空服。此外還可通過工作臺對武器進行升級和改造。除槍械武器外,玩家在游戲中還能自由使用停滯(Stasis)與應激(Kinesis)兩種特殊技能,前者能讓目標對象暫時放緩運動速度,后者可實現隔空取物或拋物攻擊。槍械與技能的自由組合能讓玩家現實豐富多彩的攻擊手法。
此外,游戲中還有一些迷你游戲(mini game),游戲疲勞時玩家可用來放松一下心情。
《機械迷城》
《機械迷城》在PC平臺上登陸,09年獲得獨立游戲節最佳視覺藝術獎。這款游戲是以獨特的水墨風格展現給玩家是一款冒險解謎游戲。游戲全過程僅用鼠標點擊,游戲主角的形象是一個機器人。即便你沒玩過這一款游戲,那么類似以機器人為主角的游戲可以在《超級食肉男孩》PC版本里找到。 捷克獨立開發小組Amanita Design 的創始人Jakub Dvorský在接受采訪時表示: 《機械迷城》這款游戲在iPad平臺上的制作已經基本完成,但是我們仍需修復一系列的小Bugs并且進行適當的測試,最快將于下個月(2011年8月)登陸iPad平臺,我們看好這款游戲在iPad平臺上取得成功。
與90年代大多數冒險解謎類游戲不同的是,《機械迷城》游戲中為了那些卡在某個難題的玩家們給了一系列提示信息。這對于那些追求在iPad平臺上休閑游戲的玩家們來說是個很好的消息,但是對于專業級玩家來說,仍然可以不用通過提示進行游戲。
以上就是個人感覺比較好玩的平板游戲,可以試試。
你最認可的幾款游戲是哪幾款?
這幾款是目前最好玩、人最多的網絡游戲!
手游網絡游戲:《王者榮耀》這是一款5v5moba競技手游。玩家眾多,同樣小學生也有很多。慎入,不是別的,怕你上癮不能自拔,影響身體健康哦!
《英魂之刃》這也是一款moba類手游,很特別的一款手游。如果說王者榮耀是手游版英雄聯盟。那么英魂之刃口袋版就是dota版手游。感興趣的可以去體驗一番。
騰訊的《刺激戰場》、《全軍出擊》和網易的《荒野行動》、《終結者2審判日》這四款游戲都是目前非常火爆流行玩家眾多的射擊類吃雞手游。喜歡這個類型的玩家一定會上癮喲。我身邊有幾個妹子每天沒日沒夜的玩哦。也是現在的撩妹神器。那些個單身漢子要抓住機會,不能錯過哦。
《第五人格》這款非對稱競技手游剛上線一周,最近火的一塌糊涂。喜歡恐怖類型的玩家可以去體驗下,說不定會喜歡上這款恐怖逃生類手游的。
pc端網絡游戲:《英雄聯盟》這是一款老游戲,雖然現在熱度有所下降,但依舊玩家眾多。如果你沒有玩過這款游戲,那你去玩一玩。小編就怕到時候害了你啊,因為這款游戲真的是太好玩了,容易上癮!
《絕地求生大逃殺》這款steam上的吃雞游戲,目前玩的人數非常多。網吧有一多半玩家都在玩這款游戲。有一種取代lol的錯覺喲。(小編覺的lol依舊寶刀未老)不過要98塊錢購買才可以玩,絕對值這個價。聽說國服要上線,具體時間待定。同類型的游戲還有PC端的荒野行動、終結者2審判日。都各有特色,要根據玩家的喜愛自己去選擇哦~
CS:GO這款純硬核射擊游戲之前steam上需要掏錢購買。現在被國內完美代理,成為了免費游戲。這是款真正意義上的公平競爭射擊網游,沒有收費加成道具,官方靠開箱子買槍械皮膚盈利。并且國內納入了身份認證和芝麻信用體系,從而打擊作弊玩家。這款游戲基本都是老玩家,而且一個比一個技術高,對新手玩家不太友好,貿然進入游戲你會被射成篩子,打成麻瓜。
以上就是關于計算機游戲編程看什么書和大學學計算機類哪個專業好點的相關問題解答,希望對你有所幫助。