您當前的位置:首頁 > 書法

Why C++?

作者:由 沉水潤心 發表于 書法時間:2019-06-13

這是一篇說服你來學C++的文章。( 勸你向善?

對於軟體開發甚至是計算機科學學習來說,C++是一門很好的語言。當然如果本身抱有的目的就不是學習本身為目的的話,那麼針對你所要學習的領域進行特性化的學習即可,但我仍然建議你有時間來看看C++這門語言。

Words can kill 語言可以殺戮

《虐殺器官》中的語言學武器令人影響深刻。C++不像科幻電影中那樣“神通廣大”,它只是一門程式語言。核心在於,語言雖說只是一種工具,但確實無時無刻的在潛移默化的影響著其使用者,某種意義上來說,數學也是一樣。

C++語言的設計哲學是

接近零開銷的抽象

。語法層面上基本相容C,使其具有接近底層的程式設計模型。同時給與程式設計師幾乎以最大程度的自由。而面向物件程式設計與泛型程式設計則是C++最重要的程式設計正規化,有點冰與火的感覺,卻又相輔相成,你中有我,我中有你。這種不同正規化之間的有機結合使得C++具有無比強大的威力,接近底層使得其可以極好的利用編譯器的最佳化來儘可能最佳化你的程式碼,如果你想,甚至可以將一些執行期的工作放到編譯期來做。

學習C++,你需要建立對整個程式的生命週期的良好理解。一個C++程式有編譯,連結,執行等等過程。

編譯過程涉及編譯原理,其中詞法分析,語法分析,語義分析,能夠較好的讓你理解高階程式語言的本質,以致於IDE中的靜態程式碼分析工具是如何工作的。讓寫程式碼就像寫文章一樣,其中編譯器的作用不言而喻;連結過程涉及程式邏輯的組織,庫的設計與作用邏輯,一個個小程式碼檔案是如何生成一個可供計算機執行的龐然大物,C++中各種各樣的識別符號是如何被解析引用的;執行過程讓你有一個對程序執行的大致抽象,其中的堆和棧是什麼,程式的執行建立在怎樣的一個基礎上,程式又如何與其他程式進行互動。進行系統呼叫,又或者是網路通訊?其中的每一塊細細長談都可能耗盡你畢生時光。

如果說抽象與封裝是程式組織的靈魂,模板與物件給你提供了良好的保障。物件給你一種執行時多型,而模板給你一種編譯時多型。C++將型別系統的特徵發揮的淋漓盡致,不但給你提供強大的型別保證,同時還給予你以破壞它們的工具。不但允許你進行隱式型別轉化,讓你方便寫程式,同時允許你限制這種轉換。從此意義看,C++是充滿著矛盾的,然而其真的矛盾嗎?沒有,它只是給與設計者在設計中自由權衡的機會。

你可能會覺得C++是一門古老的語言從而缺乏活力。然而C++20已經蓄勢待發。從C++98到C++11讓C++煥然一新,程式設計效率得到極大提升。作為一門跨平臺的語言,它的發展不僅僅建立在對新生程式設計模型應用的支援上,同時建立在語義細粒度和流行設計概念的支援上。如果說一門學科的發展依賴於概念的逐步澄清,那C++無疑是無比成功的。移動語義和final等關鍵字就是最好的佐證。學習C++不僅在於學習其語言特性,往往還需要學習一些最佳實踐,從中你可以看到許多其它語言的影子,這也是學習C++給你帶來的豐厚回報。良好的程式設計實踐以及貫穿的知識體系,都讓你的能力得到了實質性的提升。

C++的缺點也是十分明顯的。它太複雜了,想學好需要付出大量的時間,以致於沒有人敢說自己真正“精通”C++。面對實際應用開發我只需要常常用到其中一部分就夠了。如果我需要語言執行時的動態支援,何必拿C++設計半天,而不換一門動態語言來編寫呢?面對工作需求已經夠煩了,C++仍就要求你給它一份不小的精力關懷。如果你是直接面向工作學習程式語言的話,除非工作需要,否則按照工作需求優先學習吧。

如果你打算學習C++了,可以參考以下資料:

一個典型的 C++ 程式設計師成長經歷

如何系統地學習 C++ 語言?

如果你覺得上述理由仍就不夠打動你,而你又看動漫的話,我這還有一個推薦的理由:

因為,我們生來便是自由的!

參考

如何評價《虐殺器官》這一部作品?

C++語言的設計與演化

Effective C++

標簽: C++  語言  學習  程式設計  編譯