怎樣學好C++ ----高手的話


用一年時間如何能掌握 C++ ?修改

有一定 C 語言基礎,日后想從事游戲開發等工作,給自己一年時間,能在此期間精通 C++ 嗎?

 

Milo Yip游戲程序員、《游戲引擎架構》譯者

本人大約從20多年前開始學習及使用C++,但仍未達到我認為「精通」的階段,甚至對於C++11的各種新特性也未掌握。然而因為我是在讀書時自學C++的,也是游戲程序員(原問題中提到題主想從事游戲開發),覺得也許能提供一點意見供網友參考。

首先引一下2010年8月號《程序員》刊登的拙文《 C++強大背后》最后一段:
C++學習建議

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

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


如果題主認為的「精通」是指上述所指的第二層次,那么我估計一年全職時間也未足夠「精通」。首先,閱讀這些書籍本身也需要不少時間,而且對於一般人來說(指除了一些學習記憶能力超強的人),很可能需要閱讀幾遍才能記住一些細節。另外,閱讀后必須要練習。除了入門的習題外,還需要做一些工程向的項目,才能了解各種語法、編程范式的使用方法及時機,理想地建議參與一些開源項目。然而,學習是需要不斷思考並把結果沉淀,方法包括與朋友討論、寫博客、寫知乎答案等,這些都需要時間。

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

---------------------------------------------------
再討論C++與游戲開發。

看到有不少答案討論到有關C++是否游戲開發者所必須的技術。我認為,這並不是完全必須的,但許多游戲開發項目需要到C++。以下列舉一些過往曾流行的游戲平台/類型:
  1. PC單機游戲(Windows)
  2. PC網絡游戲(Windows、Linux)
  3. 移動平台游戲(J2ME、Symbian、Palm……)
  4. 家用游戲機游戲(PS1/2/3/4、XBox、Wii……)
  5. 掌上游戲機游戲(GB、GBA、NDS、PSP……)
  6. 網頁游戲(HTML、Flash)
  7. 智能移動設備游戲(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算是例外),這讓我們可以
  1. 方便調試游戲
  2. 深度剖析、優化游戲的性能
  3. 為引擎擴展新功能
  4. 修改現有引擎以適應項目所需
在專業的游戲開發中,這些都是很常見的工作任務。所以,即使並非自研引擎,並使用腳本語言開發游戲邏輯,也有很多機會需要使用C++。

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM