為什么感覺(jué)學(xué)完C/C++后寫(xiě)不出有用的東西?
最近瀏覽到一個(gè)很有趣的問(wèn)題,有國(guó)外網(wǎng)友問(wèn)出這樣的一個(gè)問(wèn)題:為什么感覺(jué)學(xué)完C/C++后做不出有用的東西?然后評(píng)論里就熱鬧了,留言區(qū)火力全開(kāi)。
這是其中一個(gè)老哥的留言:
「你正在使用的操作系統(tǒng)就是用C語(yǔ)言寫(xiě)的;
能讓你在網(wǎng)站上問(wèn)出一個(gè)如此愚蠢問(wèn)題的計(jì)算機(jī)網(wǎng)絡(luò)也是用C/C++寫(xiě)的;
你智能手機(jī)上運(yùn)行的操作系統(tǒng),C/C++寫(xiě)的;
驅(qū)動(dòng)你路由器的軟件,C/C++寫(xiě)的;
Java JVM,C++寫(xiě)的;
幾乎驅(qū)動(dòng)整個(gè)數(shù)字世界的Linux內(nèi)核,毫無(wú)疑問(wèn),C語(yǔ)言寫(xiě)的」
你可以看下linux內(nèi)核的語(yǔ)言組成,絕大部分都是C語(yǔ)言寫(xiě)的,還有一少部分匯編。
可以看到,操作系統(tǒng)、TCP/IP協(xié)議棧、編譯器、解釋器、驅(qū)動(dòng)程序等這些都是基礎(chǔ)設(shè)施,它們是整個(gè)數(shù)字世界的基石。
最重要的是幾乎沒(méi)有重新發(fā)明的必要性,除去教學(xué)等場(chǎng)景外,我們幾乎沒(méi)有可能要自己去實(shí)現(xiàn)一個(gè)內(nèi)核、自己寫(xiě)一遍T(mén)CP/IP協(xié)議棧、自己寫(xiě)一個(gè)編譯器等等。
當(dāng)然,這些基礎(chǔ)設(shè)施的實(shí)現(xiàn)也是有相當(dāng)?shù)碾y度的,不管是理論上還是工程上,就以操作系統(tǒng)來(lái)說(shuō),現(xiàn)在在理論上依然有宏內(nèi)核與微內(nèi)核的爭(zhēng)論,工程實(shí)踐上Linux內(nèi)核進(jìn)化也幾乎永不停息,依然在開(kāi)發(fā)中。因此剛學(xué)習(xí)完C/C++后你在沒(méi)有任何操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)以及編譯原理等背景知識(shí)下幾乎沒(méi)有可能直接去參與構(gòu)造這些基礎(chǔ)設(shè)施,也就感覺(jué)學(xué)完沒(méi)什么用。
在這種情況下我們只能把目光從基礎(chǔ)設(shè)施轉(zhuǎn)移到應(yīng)用程序上,這里更加貼近我們的日常生活,比如寫(xiě)一個(gè)小程序、開(kāi)發(fā)一個(gè)網(wǎng)站等,而在這些場(chǎng)景下其它語(yǔ)言的確更有優(yōu)勢(shì),原因很簡(jiǎn)單,這些語(yǔ)言就是為這些場(chǎng)景而生的。
使用一個(gè)web框架可以輕易搭建出前端頁(yè)面,使用java或者python可以快速搭建出后端,這些都可以解決我們的實(shí)際問(wèn)題,但要知道沒(méi)有前面提到的基礎(chǔ)設(shè)施這些應(yīng)用場(chǎng)景就無(wú)從談起。
很多同學(xué)應(yīng)該都玩過(guò)樂(lè)高,買(mǎi)過(guò)來(lái)后都是一個(gè)個(gè)很小的塑料塊。
現(xiàn)在你想用它們搭建一個(gè)汽車(chē)模型,如果直接從頭搭建就太麻煩了,可能需要組裝上萬(wàn)個(gè)小小的塑料塊。
而廠家針對(duì)這部分怕麻煩的消費(fèi)者提前將汽車(chē)中的輪子、車(chē)門(mén)、底盤(pán)等大的模塊用這些小塑料塊搭建出來(lái)了,你只需要將它們拼接在一起即可快速組裝成汽車(chē)模型。
這可比從一個(gè)個(gè)小塑料塊從頭搭建快多啦,但我想沒(méi)有任何一個(gè)人在用大模塊快速搭建出汽車(chē)模型的同時(shí)會(huì)覺(jué)得一個(gè)個(gè)的小塑料塊不重要沒(méi)什么用,很簡(jiǎn)單,因?yàn)檫@些大模塊就是用一個(gè)個(gè)小塑料塊拼接起來(lái)的。
在這里C/C++就好比小塑料塊,高級(jí)語(yǔ)言就好比更大的模塊。
好啦,今天這篇就到這里。