一定要好好学习C语言
提到 C 語(yǔ)言,很多人的第一反應(yīng)是:C 語(yǔ)言,不都過(guò)時(shí)了?還有必要研究嗎?
當(dāng)然有必要。用一個(gè)詞來(lái)形容:C 生萬(wàn)物。
大量重量級(jí)軟件都是C寫的,比如
操作系統(tǒng):Linux,UNIX,IOS內(nèi)核,windows內(nèi)核,Android內(nèi)核
虛擬機(jī):jvm虛擬機(jī),CPython
后臺(tái)服務(wù)器:Nginx,libev
中間件緩存:Redis,Memcached
數(shù)據(jù)庫(kù):MySQL,SQLite
編譯器:GCC,GDB等
云計(jì)算laaS:?計(jì)算-kvm/qemu,網(wǎng)絡(luò)-Linux/DPDK,存儲(chǔ)-Linux/SPDK等
可以看到,整個(gè)世界的基礎(chǔ)架構(gòu)都是在 C 語(yǔ)言之上運(yùn)行的,C語(yǔ)言是你必須學(xué)習(xí)的語(yǔ)言。因?yàn)檫@個(gè)世界上絕大多數(shù)編程語(yǔ)言都是 C-like 的語(yǔ)言,也是在不同的方面來(lái)解決 C 語(yǔ)言的各種問(wèn)題。學(xué)習(xí)C語(yǔ)言是一個(gè)合格的后端程序員的必經(jīng)之路。
主流操作系統(tǒng)是 C 寫的,絕大多數(shù)語(yǔ)言的編譯器也是 C 寫的,數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、硬件驅(qū)動(dòng)、服務(wù)器應(yīng)用等等,都是 C 寫的。說(shuō)霸氣點(diǎn)兒,這個(gè)世界就是在 C 語(yǔ)言之上運(yùn)行的。而且在這些領(lǐng)域,C 語(yǔ)言是完全的“壟斷”,連競(jìng)爭(zhēng)者都沒有。
所以,扎心的就來(lái)了——“會(huì)不會(huì) C 語(yǔ)言是軟件工程師和社畜的分界線” 。畢竟,真正的高手,就得掌握計(jì)算機(jī)是如何組成的,程序是如何運(yùn)行的,編譯器是如何把高級(jí)語(yǔ)言轉(zhuǎn)化成 CPU 指令的,網(wǎng)絡(luò)設(shè)備是如何傳送數(shù)據(jù)的...等等,而這些,都要跟 C 語(yǔ)言打交道,說(shuō)白了,C 語(yǔ)言就是內(nèi)功。
而且眾所周知,現(xiàn)如今幾乎所有的編程語(yǔ)言,都是以 C 語(yǔ)言為基礎(chǔ)拓展的:C++、Java、Go、Python、JS 等等,所以你會(huì)發(fā)現(xiàn),學(xué)好了 C 語(yǔ)言,別的語(yǔ)言都很容易上手,更不會(huì)因?yàn)椤罢Z(yǔ)言層出不窮”而焦慮。當(dāng)然,你也可以跳過(guò) C 語(yǔ)言學(xué)其他的語(yǔ)言,不過(guò),技術(shù)債遲早是要還的。
不夸張地說(shuō),想要成為高手,就必須吃透 C 語(yǔ)言。只有如此,你的技術(shù)之路才能走得更遠(yuǎn)。
所以,與其吐槽說(shuō) C 語(yǔ)言“過(guò)時(shí)”,不如想想,如何更好地?fù)肀А⑹褂盟.吘?#xff0c;大部分人學(xué) C 之路都頗為坎坷,會(huì)遇到很多困難,比如:
C 語(yǔ)言的的語(yǔ)法很基礎(chǔ),但學(xué)完又感覺什么都不會(huì)?
指針是如何靈活使用內(nèi)存的?
如何編寫高性能代碼?
編譯器在鏈接程序時(shí)發(fā)生了什么?
....
我的經(jīng)驗(yàn),學(xué)好C語(yǔ)言,除了簡(jiǎn)單的語(yǔ)法外,更重要的是要搞懂?C 程序從編寫到編譯,再到被運(yùn)?的整個(gè)細(xì)節(jié)。分享我當(dāng)初的學(xué)習(xí)路徑:
掌握基本語(yǔ)法,理解 C 程序的運(yùn)行細(xì)節(jié);
掌握標(biāo)準(zhǔn)庫(kù),性能優(yōu)化以及工程化內(nèi)容,搞懂如何寫一個(gè)可以用在生產(chǎn)實(shí)踐中的 C 程序;
掌握編譯、鏈接、加載以及和操作系統(tǒng)的交互,搞懂 C 程序是如何運(yùn)?起來(lái)的。
當(dāng)年我啃的時(shí)候并不容易,難點(diǎn)在于系統(tǒng)性的資料不好找,市面上所謂“0 元送、免費(fèi)”的資料,不僅只有基礎(chǔ)語(yǔ)法,更是零散不成體系,學(xué)了一堆跟沒學(xué)一樣,云里霧里的。
從體系化這個(gè)層面,我還是比較推薦老朋友「極客時(shí)間」的,他們最近出了個(gè)專欄 ——《深入 C 語(yǔ)言和程序運(yùn)行原理》,早在專欄打磨階段,我就參與了調(diào)研,現(xiàn)在上線了,讀了幾篇,還不錯(cuò),想跟大家分享一下,先來(lái)看專欄總結(jié)的學(xué)習(xí)路線圖,建議收藏👇
這個(gè)專欄最大的感觸是 —— 完全按照程序員的學(xué)習(xí)痛點(diǎn)來(lái)設(shè)計(jì)的:
先聚焦于 C 語(yǔ)言的核心語(yǔ)法,帶大家了解編譯器是如何在機(jī)器指令層面實(shí)現(xiàn)它們的;其次介紹現(xiàn)代 C 語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的一些重要功能,及背后的運(yùn)作機(jī)制;接著詳解適合編寫高性能的 C 代碼,也是工程化相關(guān)的重要內(nèi)容。最后,探討二進(jìn)制可執(zhí)行程序是如何在與操作系統(tǒng)的協(xié)同工作下被運(yùn)行。
從這 4 個(gè)層面,跟著看下來(lái),你就能深入理解 C 程序的完整生命周期。原價(jià) 129 元,用極客時(shí)間「隱藏優(yōu)惠」,到手¥89。
掃碼看目錄、免費(fèi)試讀👇🏻
早鳥+口令「cyuyan666」
到手僅¥89
新人無(wú)需口令,¥59 拿下
C 語(yǔ)言高效學(xué)習(xí)路徑
專欄作者是「于航」,PayPal 技術(shù)專家,也是 QCon 和 GMTC 大會(huì)優(yōu)秀講師和出品人。18 年那會(huì),還深度參與了 Emscripten 編譯器工具鏈項(xiàng)目的研發(fā)工作,在推動(dòng)國(guó)內(nèi) Wasm 技術(shù)的發(fā)展和落地實(shí)踐方面出了不少力。
最早是在極客時(shí)間的「每日一課」里看到他出的視頻,對(duì)他提到的 C 語(yǔ)言的學(xué)習(xí)方式,印象非常深刻,而這次專欄的設(shè)計(jì)邏輯就是:聚焦 C 語(yǔ)言核心語(yǔ)法實(shí)現(xiàn) → C 項(xiàng)目工程化技巧 → 深入 C 程序運(yùn)行。
主要分為四個(gè)模塊:
前置篇
專欄中涉及到了計(jì)算機(jī)體系結(jié)構(gòu)、匯編語(yǔ)言等較為底層的基礎(chǔ)知識(shí),為避免讀者的知識(shí)盲區(qū),所以會(huì)快速帶你了解匯編語(yǔ)言、寄存器等內(nèi)容,并且回顧一個(gè) C 程序從編寫到運(yùn)行的完整過(guò)程;還會(huì)用一個(gè)比較復(fù)雜的 C 程序,帶大家快速回顧 C 語(yǔ)言的核心語(yǔ)法。
C 核心語(yǔ)法實(shí)現(xiàn)篇
梳理 C 語(yǔ)言7大核心語(yǔ)法“背后的故事”,帶你了解編譯器如何在匯編層面實(shí)現(xiàn)這些語(yǔ)法。通過(guò)這一模塊的學(xué)習(xí),你會(huì)對(duì) C 程序的運(yùn)行細(xì)節(jié)有著更深刻的理解,從而可以更好地掌握并優(yōu)化程序運(yùn)行。
C 工程實(shí)戰(zhàn)篇
介紹 C 語(yǔ)言在大型工程實(shí)戰(zhàn)的必備技巧。包括:
快速掌握 C 標(biāo)準(zhǔn)庫(kù)的重要功能,以及這些功能背后的實(shí)現(xiàn)原理;
掌握編寫高性能C 代碼、編碼規(guī)范、結(jié)構(gòu)化測(cè)試與編譯等,這些 C 項(xiàng)目工程化的實(shí)用技巧。
C 程序運(yùn)行原理篇
介紹 C 程序是如何通過(guò)編譯,并最終被操作系統(tǒng)運(yùn)行的。程序的運(yùn)行涉及到眾多與操作系統(tǒng)的交互細(xì)節(jié),你將在這個(gè)模塊里詳細(xì)了解。
說(shuō)了這么多,一起來(lái)看下目錄吧下面👇🏻
再說(shuō)一遍優(yōu)惠:
原價(jià) 129 元
早鳥+口令「cyuyan666」
到手僅需¥89
新人無(wú)需口令,¥59 拿下
掃碼看免費(fèi)試讀👇🏻
時(shí)至今日,C 語(yǔ)言作為最“古老”的編程語(yǔ)言之一,仍然“老當(dāng)益壯”、生生不息。這一切靠的不是巧合,而是絕對(duì)的實(shí)力。
而要發(fā)揮 C 語(yǔ)言的最大威力,我們就不應(yīng)該只簡(jiǎn)單了解它的語(yǔ)法,而應(yīng)該在此基礎(chǔ)上進(jìn)一步了解代碼如何被編譯,程序如何被運(yùn)行。只有當(dāng)完整的“鏈路”建立在腦海中時(shí),你才對(duì)程序有了最完全的把控。
點(diǎn)擊「閱讀原文」👇🏻,這次吃透 C 語(yǔ)言。
總結(jié)
以上是生活随笔為你收集整理的一定要好好学习C语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第四期直播分享预告-高薪offer指南
- 下一篇: 每个人都有自己的人生节奏