用一個(gè)詞來形容:C 生萬物。 聽起來有點(diǎn)浮夸,但也沒說錯(cuò)。 現(xiàn)今這個(gè)世界上,幾乎所有重要的軟件都跟 C 有關(guān)系:主流操作系統(tǒng)是 C 寫的,絕大多數(shù)語言的編譯器也是 C 寫的,數(shù)據(jù)庫、網(wǎng)絡(luò)、硬件驅(qū)動(dòng)、服務(wù)器應(yīng)用等等,都是 C 寫的。說霸氣點(diǎn)兒,這個(gè)世界就是在 C 語言之上運(yùn)行的。而且在這些領(lǐng)域,C 語言是完全的“壟斷”,連競爭者都沒有。所以,扎心的就來了——“會(huì)不會(huì) C 語言是軟件工程師和社畜的分界線” 。畢竟,真正的高手,就得掌握計(jì)算機(jī)是如何組成的,程序是如何運(yùn)行的,編譯器是如何把高級(jí)語言轉(zhuǎn)化成 CPU 指令的,網(wǎng)絡(luò)設(shè)備是如何傳送數(shù)據(jù)的...等等,而這些,都要跟 C 語言打交道,說白了,C 語言就是內(nèi)功。
而且眾所周知,現(xiàn)如今幾乎所有的編程語言,都是以 C 語言為基礎(chǔ)拓展的:C++、Java、Go、Python、JS 等等,所以你會(huì)發(fā)現(xiàn),學(xué)好了 C 語言,別的語言都很容易上手,更不會(huì)因?yàn)椤罢Z言層出不窮”而焦慮。當(dāng)然,你也可以跳過 C 語言學(xué)其他的語言,不過,技術(shù)債遲早是要還的。
所以,與其吐槽說 C 語言“過時(shí)”,不如想想,如何更好地?fù)肀?、使用它。畢竟,大部分人學(xué) C 之路都頗為坎坷,會(huì)遇到很多困難,比如:
C 語言的的語法很基礎(chǔ),但學(xué)完又感覺什么都不會(huì)?
指針是如何靈活使用內(nèi)存的?
如何編寫高性能代碼?
編譯器在鏈接程序時(shí)發(fā)生了什么?
....
我的經(jīng)驗(yàn),學(xué)好C語言,除了簡單的語法外,更重要的是要搞懂 C 程序從編寫到編譯,再到被運(yùn)?的整個(gè)細(xì)節(jié)。分享我當(dāng)初的學(xué)習(xí)路徑:
掌握基本語法,理解 C 程序的運(yùn)行細(xì)節(jié);
掌握標(biāo)準(zhǔn)庫,性能優(yōu)化以及工程化內(nèi)容,搞懂如何寫一個(gè)可以用在生產(chǎn)實(shí)踐中的 C 程序;
掌握編譯、鏈接、加載以及和操作系統(tǒng)的交互細(xì)節(jié),搞懂 C 程序是如何運(yùn)?起來的。
下面想跟大家分享一下,學(xué)習(xí)路線圖,建議收藏??
時(shí)至今日,C 語言作為最“古老”的編程語言之一,仍然“老當(dāng)益壯”、生生不息。這一切靠的不是巧合,而是絕對(duì)的實(shí)力。而要發(fā)揮 C 語言的最大威力,我們就不應(yīng)該只簡單了解它的語法,而應(yīng)該在此基礎(chǔ)上進(jìn)一步了解代碼如何被編譯,程序如何被運(yùn)行。只有當(dāng)完整的“鏈路”建立在腦海中時(shí),你才對(duì)程序有了最完全的把控。 本文綜合整理自:編程指北、findyi