04.23 Java程序員如何高效而優雅地入門Cpp

Java程序員如何高效而優雅地入門Cpp,由於工作需要,需要用C++寫一些模塊。關於C++ 的知識結構,雖說我有過快速學習很多新語言的經驗,但對於C++ 我也算是老手,但也還需要心生敬畏,本文會從一個Java程序員的角度,制定高效學習路線快速入門C++ 。Java是為了就業,C++ 是信仰。(C++ 是教學、信仰、商業這三個原本互斥的概念(這三個概念也是三個階段,正好可以陪我們一起成長)的偏偏集合體)。

關於C類語言的基本思想,可以為學習C++ 定下基調。下面通過斯特魯普(C++發明者)對Java程序員的字字珠璣的建議,再加上我的理解和總結,列出幾點“中心思想”。不要試圖用C++ 來編寫Java程序。不能依賴垃圾收集器了。同為面嚮對象語言,但要採用C++ 自己的抽象機制【類和模板】。

要理解C++ 與C語言是各個方面都不同的程序設計語言(雖然最早C++ 是作為“帶類的C”出現的),不要因為虛假的熟悉感而將代碼寫成C。

C++ 標準庫很重要很高效,要非常熟悉。

C++ 程序設計強調富類型、輕量級抽象,希望能細細體會。

C++ 特別適合資源受限的應用,也是為數不多可以開發出高質量軟件的程序設計語言。

C++ 的成長速度很快,要與時俱進。

一定要有單元測試和錯誤處理模型。

C++ 將內置操作和內置類型都直接映射到硬件,從而提供高效內存使用和底層操作。

C++ 有著靈活且低開銷的抽象機制【核心掌握】(可能的話以庫的形式呈現),而不是簡單的如Java一樣上來就給所有類創造一個唯一的基類。

Java程序員如何高效而優雅地入門Cpp

儘量不使用引用和指針變量,作為替代,使用局部變量和成員變量。

使用限定作用域的資源管理。

對象釋放時使用析構函數,而不是模仿finally:避免使用單純的new和delete,應該使用容器(例如vector,string和map)以及句柄類,(例如lock和unique_ptr)使用獨立函數來最小化耦合,使用命名空間來限制獨立函數的作用域。

不要使用異常規範。

C++ 嵌套類對外圍類沒有訪問權限。C++ 提供最小化的運行時反射:dynamic_cast和type_id,應更多依靠編譯時特性。零開銷原則,必須不浪費哪怕一個字節或是一個處理器時鐘週期(C++ 是信仰)。

C++ 是系統程序設計語言(例如驅動程序、通信協議棧、虛擬機、操作系統、標準庫、編程環境等高大上有技術深度的系統),而Java是業務開發語言(例如XXX管理系統,電商網站,微信服務號等基於B/S架構的上層UED相關的應用),高下立判(鄙視鏈是有道理的)。

學習C++ 最重要的就是重視基本概念(例如類型安全、資源管理以及不變式)和程序設計技術(例如使用限定作用域的對象進行資源管理以及在算法中使用迭代器),但要注意不要迷失在語言技術性細節中。

學習C++ 一定要避免深入到細節特性中去浪費掉大量時間,瞭解最生僻的語言特性或是使用到更多數量的特性並不是什麼值得炫耀的事情,尚學堂•百戰程序員陳老師指出學習C++ 細節知識的真正目的是:在良好設計所提供的語境中,有能力組合使用語言特性和庫特性來支持好的程序設計風格。

所以,使用庫來簡化程序設計任務,提高系統質量是非常必要的,學習標準庫是學習C++ 不可分割的一部分。(遇到問題先找庫,這一點我想每個Java程序員骨子裡都是這麼想的,不會鑽到細節中去。)領悟編程和設計技術比了解所有細節重要的多。而細節問題不要過分擔心,通過時間的積累,不斷的練習自然就會掌握。

Java程序員如何高效而優雅地入門Cpp,C++ 除了標準庫以外,有大量的標準庫和工具集,現在有數以千計的C++ 庫,跟上所有這些庫的變化是不可能的,因此還是上面那些話,要通過組合使用個語言特性以及庫特性來支持好的程序設計風格,所以熟悉這些庫的領域(不必鑽進去一一研究)以及領悟編程設計技術才是核心點。

Java程序員如何高效而優雅地入門Cpp


分享到:


相關文章: