從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

寫這篇文章之前,我推薦下自己創的一個交流裙,每天群內直播分享課!我是一名從事了5年C++開發的全棧工程師,目前在做線上教育講師,年初整理了一份最適合2018年學習的C++乾貨,有想要學習C++的同學,關注小編頭條號,私信【學習】即可免費領取本文一整套系統的C++學習教程!

從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

答案一:

C++缺點之一,是相對許多語言複雜,而且難學難精。許多人說學習C語言只需一本K&R《C程序設計語言》即可,但C++書籍卻是多不勝數。我是從C進入C++,皆是靠閱讀自學。在此分享一點學習心得。個人認為,學習C++可分為4個層次:

第一層次,C++基礎:挑選一本入門書籍,如《C++ Primer》、《C++大學教程》、或Stroustrup撰寫的經典《C++程序設計語言》或他一年半前的新作《C++程序設計原理與實踐》,而一般C++課程也止於此,另外《C++ 標準程序庫》及《The C++ Standard Library Extensions》可供參考;

第二層次,正確高效地使用C++:此層次開始必須自修,閱讀過《(More)Effective C++》、《(More)Exceptional C++》、《Effective STL》及《C++編程規範》等,才適宜踏入專業C++開發之路;

第三層次,深入瞭解C++:關於全局問題可讀《深入探索C++對象模型》、《Imperfect C++》、《C++沉思錄》、《STL源碼剖析》,要挑戰智商,可看關於模版及模版元編程的書籍如《C++ Templates》、《C++設計新思維》、《C++模版元編程》;

第四層次,研究C++:閱讀《C++語言的設計和演化》、《編程的本質》(含STL設計背後的數學根基)、C++標準文件《ISO/IEC 14882:2003》、C++標準委員會的提案書和報告書、關於C++的學術文獻。

從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

由於我主要是應用C++,大約只停留於第二、三個層次。然而,C++只是軟件開發的一環而已,單憑語言並不能應付業務和工程上的問題。建議讀者不要強求幾年內“徹底學會C++的知識”,到達第二層左右便從工作實戰中汲取經驗,有興趣才慢慢繼續學習更高層次的知識。雖然學習C++有難度,但也是相當有趣且有滿足感的。

如果題主認為的「精通」是指上述所指的第二層次,那麼我估計一年全職時間也未足夠「精通」。首先,閱讀這些書籍本身

也需要不少時間,而且對於一般人來說(指除了一些學習記憶能力超強的人),很可能需要閱讀幾遍才能記住一些細節。另外,閱讀後必須要練習。除了入門的習題

外,還需要做一些工程向的項目,才能瞭解各種語法、編程範式的使用方法及時機,理想地建議參與一些開源項目。然而,學習是需要不斷思考並把結果沉澱,方法

包括與朋友討論、寫博客、寫知乎答案等,這些都需要時間。

如引文末段所指出,我建議不要把「精通C++」作為一個一年目標,應該要把學習語言作為一個持續的過程,同時要把語言運用在具體的應用場合中。

---------------------------------------------------

從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

再討論C++與遊戲開發。

看到有不少答案討論到有關C++是否遊戲開發者所必須的技術。我認為,這並不是完全必須的,但許多遊戲開發項目需要到C++。以下列舉一些過往曾流行的遊戲平臺/類型:

PC單機遊戲(Windows)

PC網絡遊戲(Windows、Linux)

移動平臺遊戲(J2ME、Symbian、Palm……)

家用遊戲機遊戲(PS1/2/3/4、XBox、Wii……)

掌上游戲機遊戲(GB、GBA、NDS、PSP……)

網頁遊戲(HTML、Flash)

智能移動設備遊戲(iOS、Android)

我們會發現,除了J2ME和網頁遊戲外,大多數的平臺都支持(或只支持)原生編程。而原生編程最常用的就是C/C++和彙編。這種現象並不難解譯,再次引用拙文:

應否選擇C++

哪些程序適宜使用C++?

C++並非萬能丹,我按經驗舉出一些C++的適用時機。

C++適合構造程序中需求較穩定的部分,需求變化較大的部分可使用腳本語言;

程序須儘量發揮硬件的最高性能,且性能瓶頸在於CPU和內存;

程序須頻繁地與操作系統或硬件溝通;

程序必須使用C++框架/庫,如大部分遊戲引擎(如Unreal/Source)及中間件(如Havok/FMOD),雖然有些C++庫提供其他語言的綁定,但通常原生的API性能最好、最新;

項目中某個目標平臺只提供C++編譯器的支持。

按應用領域來說,C++適用於開發服務器軟件、桌面應用、遊戲、實時系統、高性能計算、嵌入式系統等。

很大程度上,遊戲──或說遊戲引擎,都是C++非常適合的應用時機。

一些人認為,遊戲開發者使用現成的引擎,就不需要使用C++了。過往,業界有一個普遍常識,就是用C++開發遊戲

引擎,而遊戲引擎提供腳本引擎供編寫遊戲邏輯代碼。但這個觀點被Unreal Engine

4的決策改變,UE4放棄了維護多年且被大量使用的UnrealScript腳本語言,而改用原生C++作為遊戲邏輯編程的語言。此決策背後有多個原因,

但這裡只想舉出這例子展示C++在遊戲開發中的用途及潮流,具體原因分析就不詳細展開了。

除了自行研發遊戲引擎需要使用C++,我們可以看到,大部分遊戲引擎都提供了其C++原代碼(Unity算是例外),這讓我們可以

方便調試遊戲

深度剖析、優化遊戲的性能

為引擎擴展新功能

修改現有引擎以適應項目所需

在專業的遊戲開發中,這些都是很常見的工作任務。所以,即使並非自研引擎,並使用腳本語言開發遊戲邏輯,也有很多機會需要使用C++。

最後,「還需學習什麼」是一個很難簡單回答的問題,因為遊戲開發涉及的知識面很廣。建議可參考本人譯作。

從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

答案二:

這是在把一個能成為業界top 1%的頂級遊戲開發技術大師的黑馬,往能傻乎乎地受你們壓榨的IT民工的火坑裡推,你造嗎?

這讓我想起了喬幫主關於“賣糖水”的那句經典話語,而我們的版本是:

你是願意就這樣學點皮毛混口飯吃隨波逐流,還是成為真正的遊戲開發業界頂尖技術大牛,推動業界的發展,去改變世界?

關於上面這句話的兩個抉擇,我們來做個選擇題。

A.如果你是想從事遊戲行業當個二流的民工打打雜一輩子就這樣過去,請去看@kubisoft兄有些對現實妥協之前排名第一的答案。(不帶人身攻擊的,只是對事不對人而已呢) 這種太依賴IDE和遊戲引擎所謂速成方式,到最後只能是二流的民工,打雜的,混飯吃的。知道其然,不知道其所以然。遇到真正的專業性問題就卡殼了,比如如何優化渲染質量之類的問題。或者開發的項目就是那種2D的小兒科,或者山寨跟風趕進度趕上市的快餐遊戲,而不是畫質精美,設計精良,堪稱經典,為國產遊戲長臉,推動全球遊戲業界發展的革命性大作。

B.如果你是志向高遠,想製作出改變世界的革命性遊戲,或者推動遊戲產業的發展,成為遊戲開發業界top 1%的技術領軍人物。請熟練C++,請修煉好內功。王選易兄 徐奕成兄的答案是極好的。且正如萌萌的V大 vczh所言,就算你的志向是開發crysis這樣的遊戲,其實也只需要用到C++的一小部分就夠了。C++各種範式是發明來解決所有問題的,遊戲只是其中的冰山一角,你沒必要精通,沒必要學會C++的所有部分。我們這裡所說的,是瞭解原理,學C++只是其中的一小部分,與其說去不斷的學C++的更多高級特性,更好的學習方向是熟練利用C++配合DirectX或者OpenGL來製作Windows小遊戲,對數據結構設計模式有一定的認識,且能夠準確針對問題選擇你的數據結構,研習計算機圖形學blablabla的。

從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

(PS:不要輕易用“精通C++“這個狂妄的詞眼,後文有一些關於這個梗的解釋)

正如我之前在自己博客裡面所轉載的文章《編程巨星的唯一秘訣》中說的:

“對所做的事情的理解越深,你就會做的越好。”

既然題主都提到要走熟練C++,以後開發遊戲這最正統的技術道路了,他內心渴望的應該是志向高遠,做個強者,而不是去當IT民工打雜做技術含量不高的事情。

即我是不能同意更多 Aaron Luo兄的觀點。

”題主還是學生,別用壓榨it民工的想法來教導!題主可以從cocos2dx和unity3d開始學遊戲開發,但

是,如果想一直做編程,請別忘了必須同時修煉c++,

因為它可以給你認識到真正的編程,讓你懂得更多計算機編程思想,以後就算不寫c++也可以迅速瞭解別的語言,別的工具的~而不會變成僅僅依靠IDE工具,

隨便抄抄別人代碼,完成山寨程序的It民工。“

也不能同意更多 徐奕成 Floristt兄的觀點。

從事遊戲開發,一年內能精通 C++ 嘛?還需要學習什麼?

資料獲取方式,關注小編,私信【學習】手機用戶可以直接私信,電腦端尚未開放此功能,還需下載app,然後私信回覆:學習 我已經設置了自動回覆,具體後續會自動回覆各位。


分享到:


相關文章: