如何成長為一個優秀的C++程序員?

目前,國電南瑞外包工作,職位資料庫運維。白天經常沒事做,晚上加班累如狗,想重新學習去做開發工作。


C++ specification 有近1400頁,是很多其他程序語言的兩倍多。要想全面掌握只有靠時間和毅力。

C++也是一個高速發展的語言,從最初的直接兼容C + class,到Generic,到Functional,再到將來的Concepts和Range, C++的「標準」範式和工具體系一直在變化,但它的核心思想一直是對硬體的有效控制(Direct mapping to hardware),和最大程度的零代價抽象(Zero overhead abstraction)。理解這點就不難理解很多特性,例如Undefined behavior,指針,不提供原生垃圾回收,不提供反射(只有最原始的類型信息)等。

C++鼓勵開發者開發自己的語言(DSL)。實際上,C++只提供了一套將文字映射到硬體的規則和世界觀,從語言本身到產品中間還隔著一層抽象,就是讓開發者自己做出適合開發產品的庫和工具。試圖直接用C++寫產品代碼,體驗會極其糟糕;但C++本來就不是這麼用的,它是用來開發你用來寫產品代碼的庫和工具的。為什麼要隔一層,為什麼不直接用其他標準庫極大豐富的語言?這當然看你用來做什麼,如果你像我一樣做遊戲的話,答案就是……其他語言都太慢了。

C++是一個複雜的語言,不是一個簡單的語言。但它理想狀況下又是一個容易的語言,不是一個困難的語言。注意這裡複雜/簡單與困難/容易的區別。彙編語言很簡單,沒有結構,沒有類型,一切都是數據和指令。但同時彙編也極其困難,因為簡單意味著抽象不足,也就導致表達同樣信息過長,也就導致程序員無法在有限的記憶力和注意力中放下所需的一段代碼。理解複雜/簡單與困難/容易的對比,有助於從本質上把握最適合需要的抽象方向。畢竟C++語言只是一組規則;開發者提供的內容才是程序。

如果我理解不錯的話,C++發展的方向是更多的值語義(Value semantics),定義域管理資源(RAII),更豐富和安全的類型(Type rich)和更多的靜態多態和編譯時計算。總體來說C++的目標就是成為更好的C,看起來像C一樣簡單,用起來比C容易。當其他(插入任意oop語言)嘲笑C++複雜的時候,C++何嘗不在嘲笑它們的OO是低劣的抽象方式和噪音。

回歸正題,千萬別被C++表面的複雜嚇到,根本不需要也不應該追求把C++過去的規範全學會。相反,可以在業餘項目中從現代C++ (Modern C++)開始,逐步積攢經驗理解過去的老代碼。


為什麼要成為優秀的C++程序員?應該在實際項目中鍛煉。如果項目用不上,就先放一放


程序員是一種職業,遵循著職業的普遍規律,如熟能生巧,如頭懸樑,錐刺股等等。但每一個人都想使用最小的精力完成最大的成功。成為一名優秀的C++程序員這個問題首先是兩個方面。第一、成為c++程序員,其二是優秀的程序員。程序員有很多類型。JAVA、PHP、C#、PYTHON,Ruby,GO等等。這些語言都是在C++之後出現,採用了C++的長處,摒棄了短處,不斷的演化而來。大大提高了程序員的效率,降低了程序員入門的門檻。據說,在印度高中生都可以很輕鬆的搞軟體開發。因此C/C++除了在嵌入式(因為內存極少,必須考慮內存)系統和系統(操作系統、資料庫)底層外,在EPR和管理方面基本上已經被拋棄了。所以還是先考慮一下是否要成為一個C++程序員再說吧!

如果想成為一個優秀的c++程序員,我沒有什麼可以說的。nginx,redis,mysql, linux,apache,mongodb,nagios,sqlite.這些都是一個優秀的產品。你想達到這樣的水平嗎?那就打開代碼看一看!從中選擇一個開源代碼,自己認真看一看,牛人是如何牛的!


以前剛開始學習程序語言設計的時候,對C語言一無所知。感覺很難,非常難。

現在,呵呵。。。

其實,只要你多練,代碼反覆敲,不懂什麼意思沒關係,等你代碼敲熟練了,

再深究函數、類、方法等等的用法和概念。你慢慢開始發現,你會變成打字機


自學 java, C#, Js, PHP都成,反正我是沒自學好C++


穿上女裝就行啦,easy


先成長為一個優秀的程序員


首先找一本C++教材,從頭到尾學一遍,將書中所有的例子手敲進去,調通。

然後可以自己設計一些小問題,運用書中的技術點(不要大)。

實現了一些功能以後,再回頭看書,這時除了C++語法意外,可以加進一些面向對象,UML方面的內容。

總之就是,學習,練習,學習,練習。。。


Q:怎樣成為一個優秀的C++編程者?

A:不用C++


推薦閱讀:

有哪些和編程有關的經典語句?
Visual Studio 有什麼奇技淫巧?
函數式編程有什麼弊端?
如何看待QQ6.5更新以後MSE報毒?

TAG:程序員 | 編程 | C | CC |