這是最近一周時間幾個讀者小伙伴所提的問題挎挖,我順手截了兩個圖这敬。
實不相瞞航夺,這類問題之前也經(jīng)辰抖洌看到,但是我忘了截圖了阳掐。
每次遇到這種問題始衅,看起來很簡單冷蚂,但是打字一時半會還真說不清,想想今天周末了汛闸,寫一篇文章來統(tǒng)一聊聊吧蝙茶,如果小伙伴們有不同看法,也歡迎批評指正诸老,評論區(qū)見隆夯。
本文在開源項目:https://github.com/hansonwang99/JavaCollection 中已收錄,里面包含不同方向的自學編程路線别伏、面試題集合/面經(jīng)蹄衷、及系列技術文章等,資源持續(xù)更新中...
C
語言和C++
到底是什么關系厘肮?
首先C++
和C
語言本來就是兩種不同的編程語言愧口,但C++
確實是對C
語言的擴充和延伸,并且對C
語言提供后向兼容的能力类茂。對于有些人說的C++
完全就包含了C
語言的說法還是有點別扭的耍属。
C++
一開始被本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)發(fā)明時,起初被稱為“C with Classes”
巩检,即「帶類的C
」厚骗。很明顯它是在C
語言的基礎上擴充了類class等面向?qū)ο蟮奶匦院蜋C制。但是后來經(jīng)過一步步修訂和很多次演變(如下圖所示)兢哭,最終才形成了現(xiàn)如今這個支持一系列重大特性的龐大編程語言溯捆。
就像經(jīng)典書籍《Effective C++》一開頭就說的,現(xiàn)如今我們提到C++
厦瓢,都應該視其為一個龐大的「語言聯(lián)邦」提揍,最起碼包含如下幾個重要的組成部分:
- 面向過程編程
- 面向?qū)ο缶幊?/strong>
- 泛型編程
- 元編程
- 函數(shù)式編程
- STL標準庫
這其中的第一部分「面向過程編程」,正是C++
提供的向后兼容C
語言的部分煮仇,所以你能看到市面上在售的大部分講C++
編程的書劳跃,一開始前幾個章節(jié)基本都是在講「面向過程編程」的內(nèi)容,包括但不限于:數(shù)據(jù)類型浙垫、變量刨仑、運算符、表達式夹姥、語句杉武、判斷、循環(huán)辙售、函數(shù)轻抱、指針等等這些內(nèi)容。
不學C
語言能直接學C++
嗎旦部?
還是像前面所說祈搜,C++
編程語言的第一大重要組成部分就是「面向過程編程」较店,而這正是C
語言老大哥的領域。即使沒有學過C語言容燕,一上來就直接學習C++
的小伙伴梁呈,應該也難逃『面向過程』這一部分的內(nèi)容。因為市面上在售的大部分講C++
編程的書蘸秘,開始的章節(jié)都在講「面向過程編程」的內(nèi)容官卡。
從理論上來說,學C++
前并不一定非得學C
語言醋虏,但是有C
語言底子再去學C++
往往更具優(yōu)勢味抖,最起碼「面向過程編程」這一部分內(nèi)容能夠輕車熟路。
但是遺憾的是灰粮,即使是《C++ Primer》這種700
多頁厚的權威C++
書籍仔涩,開頭也只有很少一部分在講「面向過程編程」,所以對于面向過程這一部分的講述是肯定沒有專門講C
語言的書籍剖析得細致和全面的粘舟,不然也不會有這種重點側(cè)重于指針相關的《C和指針》等這類書籍的出現(xiàn)了熔脂。
所以個人建議是在學C++
之前,C
語言的基礎還是盡量要夯實柑肴,肯定是有幫助的霞揉。
C
學得好的,學習C++
是否更具優(yōu)勢晰骑?
是的适秩。
最起碼學C++
時,里面的「面向過程」這一部分內(nèi)容可以說輕車熟路了硕舆。
C++
能替代C
語言嗎秽荞?
既然C++
這么強大,包含這么多模塊和范式抚官,而且也幾乎包含了C
語言面向過程這一部分的內(nèi)容扬跋,那為啥還要學C
語言呢?都直接學習C++
它不香嘛凌节?
是的钦听,C++
很強大沒錯,但那些強大的范式和機制本身帶來的包袱就不輕倍奢,也確實給學習者造成了不小的負擔朴上,甚至勸退了很多人。
而反觀C
語言卒煞,C
語言本身就是一個把能力痪宰、性能、效率和學習成本權衡得非常極致的一種編程語言,以至于大學階段必開的程序設計課程里基本都有C
語言的身影酵镜。
而且C
語言的應用領域極度廣泛碉碉,上到操作系統(tǒng)底層的原生接口柴钻,下到普通的應用層開發(fā)淮韭,C
語言都有著不小的功勞。以至于這么多年來贴届,在Tiobe
編程語言排行榜里靠粪,C
語言都是居高位不下。
而且2020
開年C語言重回巔峰王座毫蚓,一舉奪得「2019
年度編程語言」占键。雖然這只是一個看起來很無聊的排名,但多多少少能說明一些事情元潘。
所以無論是過去畔乙,現(xiàn)在,甚至是未來翩概,近50
歲的C
語言老將軍依然永不為奴牲距。
只有C++
這種面向?qū)ο蟮恼Z言才適合大型項目嗎?
C++
的出現(xiàn)的確是為了更方便地開發(fā)大型應用程序钥庇,畢竟面向?qū)ο缶幊汤锏暮芏嘀匾枷牒蜋C制都對大型項目和復雜系統(tǒng)所要求的項目工程化牍鞠、代碼復用性/擴展性/可維護性等提供了強大的支撐。
但是擺在眼前的事實告訴我們评姨,即便是C
語言难述,也照樣可以構建出極其復雜的系統(tǒng)和軟件。上到Linux
這種曠世偉大的操作系統(tǒng)內(nèi)核吐句,小到被各個公司重度依賴的Redis
胁后、Nginx
等開源軟件或框架,都是C
語言的代表作品嗦枢。
所以有時候我們不得不承認的是择同,大家所說的抽象能力更多的是看寫這個程序的人,而并非編程語言本身净宵。
小 結
好啦敲才,扯得有點多了,總結一下就是:
-
C
語言和C++
是兩個不同的編程語言择葡,只不過內(nèi)容上有一定的重疊紧武; -
C
語言是一門很強大的編程語言,我覺得有機會還是要學一下敏储; - 一般來說阻星,有了
C
語言的基礎,上手C++
也會更快; -
C++
和C
各有各的選用考慮和應用場景妥箕,并沒有誰更好一說滥酥,學不學看自己的興趣和自身技術發(fā)展的考量
書籍推薦
最后聊一聊學習C
語言和C++
的書籍吧。
個人覺得如果想系統(tǒng)學習這兩門語言畦幢,最好還是得看一下經(jīng)典的書籍坎吻。
關于C
語言學習書籍,最最權威的當然是C
語言的發(fā)明者Dennis M. Ritchie
所著的《The C Programming Language》(它也有中文版的)宇葱,除此之外《C Primer Plus》也很系統(tǒng)全面瘦真。
關于C++
的學習書籍,最權威的當屬C++
的發(fā)明者Bjarne Stroustrup
大佬所著的《The C++ Programming Language》黍瞧,但是很明顯這本書不適合初學者诸尽,更加適合的還得是《C++ Primer》,也很系統(tǒng)全面印颤。至于再深入可以繼續(xù)閱讀諸如《Effective C++》您机、《STL源碼剖析》、《深度探索C++對象模型》等書籍年局。
這些書讀完际看,成神之路便可由此開啟。
本文在開源項目:https://github.com/hansonwang99/JavaCollection 中已收錄某宪,里面包含不同方向的自學編程路線仿村、面試題集合/面經(jīng)、及系列技術文章等兴喂,資源持續(xù)更新中...
每天進步一點點
慢一點才能更快