c語言可以做網(wǎng)站嗎 誰叫你不幸生在中國(guó)了?——何祚庥
2021-06-13
誰讓你不幸出生在中國(guó)? ——何作秀(中國(guó)科學(xué)院院士)
這是一本面向非計(jì)算機(jī)專業(yè)的大學(xué)生的C語言書籍。 “我不是計(jì)算機(jī)系學(xué)生,為什么要學(xué)C語言?”這個(gè)問題在中國(guó)大陸每年被問上百萬次。
提問的對(duì)象可能是老師,也可能是哥哥姐姐。師兄師姐經(jīng)常用裝腔作勢(shì)的語氣,重復(fù)著他們依稀記得的老師的話。這些話大多是有遠(yuǎn)見的,比如“以后可能會(huì)用到”、“鍛煉編程思維是好的”、“C語言是學(xué)習(xí)編程的基礎(chǔ)”等等。
這些話沒有錯(cuò)。所謂“一技之長(zhǎng)”,多學(xué)絕對(duì)比不學(xué)好。但問題是,如果把學(xué)習(xí)C語言的精力用來學(xué)習(xí)其他與專業(yè)更相關(guān)的東西,會(huì)不會(huì)更好?既然如此,你為什么還要學(xué)C語言?
最實(shí)在的答案來自何作秀院士:“誰讓你不幸出生在中國(guó)?”
大學(xué)除了拿到“畢業(yè)證”和“學(xué)位證”外,還必須通過“四級(jí)”和“二級(jí)”,否則可能會(huì)被減免兩證,或者被阻止找工作,而且很難“安定下來”。等待。這里的二級(jí)是指“全國(guó)計(jì)算機(jī)等級(jí)考試二級(jí)”,是針對(duì)“程序員”的考試,“考核計(jì)算機(jī)基礎(chǔ)知識(shí)和使用高級(jí)計(jì)算機(jī)語言編寫程序和計(jì)算機(jī)調(diào)試的基本技能”。
雖然社會(huì)只需要少數(shù)人就能編程,但令人費(fèi)解的是,幾乎所有大學(xué)生都希望(或被要求)通過二級(jí),這使得編程課程成為必修課。
2 考試可用的語言包括 C、C++、Java、、、和。為什么要學(xué)最老的C?這里的原因復(fù)雜多樣,每個(gè)學(xué)校都有自己的解釋,我就不一一列舉了??傊袊?guó)一定是世界上“懂”C語言最多的國(guó)家,二級(jí)考試是必須的。
總之,這門課既然開了,不學(xué)是不可能學(xué)的,精力都被占用了,那我們就來仔細(xì)看看C語言吧。雖然有點(diǎn)無奈,但好在C語言確實(shí)是個(gè)有趣的家伙,越了解越覺得有趣。不信請(qǐng)往下看...
游戲、黑客和 C 語言
1969 年的美國(guó)貝爾實(shí)驗(yàn)室是當(dāng)時(shí)科技界的夢(mèng)工廠。它聚集了世界上最具創(chuàng)造力的科學(xué)家和工程師,其中包括幾位諾貝爾獎(jiǎng)獲得者。他們一起創(chuàng)造了無數(shù)的發(fā)明。比如數(shù)碼相機(jī)的核心CCD,當(dāng)年在貝爾實(shí)驗(yàn)室誕生。
這些家伙的成就看似遙不可及,但其實(shí)都是凡人,在某些方面和我們非常相似。例如,當(dāng)他們看到一臺(tái)功能強(qiáng)大的計(jì)算機(jī)時(shí),他們首先想到的就是用它來玩游戲。在那個(gè)時(shí)候,電腦是一種奢侈品,只有大型組織才能擁有,在電腦上玩游戲是一件很可怕的事情。不過誰在乎呢,追求快樂才是最重要的,所以他們不會(huì)為了玩游戲開心而動(dòng)腦筋。
那個(gè)時(shí)候還沒有商業(yè)游戲,所以要玩游戲,首先要發(fā)揮自己的DIY精神,自己動(dòng)手制作。自己編的游戲被人喜歡了,這在當(dāng)時(shí)是最值得尊敬的。
有一個(gè)工程師叫(以下簡(jiǎn)稱ken)。他今年26歲,很閑。他看到阿波羅11號(hào)載人登月,覺得很酷。我想嘗試一下,所以我設(shè)計(jì)了一個(gè)“”游戲。在游戲中,玩家駕駛宇宙飛船,穿梭于虛擬太陽系,欣賞美景,還可以降落在各種行星和衛(wèi)星的表面。這個(gè)游戲先寫在系統(tǒng)上,后來改寫在系統(tǒng)上。
能運(yùn)行這兩個(gè)系統(tǒng)的機(jī)器都是笨重的大型機(jī)。雖然它們具有出色的計(jì)算能力,但它們的顯示效果很差,機(jī)器時(shí)間成本非常高。該公司必須為一款游戲支付 75 美元(當(dāng)時(shí)美國(guó)的平均月收入約為 200 美元)。這要是被老板發(fā)現(xiàn)了,可不是開玩笑的。于是他與他 28 歲的同事 M.(以下簡(jiǎn)稱 dmr)合作,在大樓里到處尋找免費(fèi)的“游戲機(jī)”。努力得到了回報(bào),他們真的找到了。
DEC 制造的 PDP-7 小型機(jī)具有當(dāng)時(shí)最先進(jìn)的圖形處理能力。那個(gè)時(shí)候電腦主要是用來處理數(shù)據(jù)的,圖形能力不是很重要,所以PDP-7更經(jīng)常安靜地躺著,很少使用,直到ken和dmr的鐵桿玩家發(fā)現(xiàn)了它。 .
比賽開始了。但是,游戲的運(yùn)行需要操作系統(tǒng)的支持。 PDP-7在當(dāng)時(shí)還是一個(gè)“裸機(jī)”,沒有可以在其上運(yùn)行的操作系統(tǒng)。偉大的DIY精神再次發(fā)揮作用。他們挽起袖子開始為 PDP-7 編寫操作系統(tǒng),并給這個(gè)系統(tǒng)起了個(gè)名字——Unix。
直到今天,Unix 仍然是最受信任的操作系統(tǒng)。它不僅支持軍隊(duì)、政府、電力、電信、銀行等大型組織的重點(diǎn)業(yè)務(wù),也是蘋果Mac系列電腦,甚至iPod的魅力之源,部分歸功于它。
Unix 最初是用匯編語言編寫的,這是一種更接近機(jī)器而不是人的語言。計(jì)算機(jī)可以直接理解的語言稱為機(jī)器語言。它的所有句子都是由兩個(gè)數(shù)字“0”和“1”組成的,根本不適合人類。
當(dāng)最后一個(gè)機(jī)器語言程序員發(fā)瘋時(shí),人們終于開始思考如何讓計(jì)算機(jī)識(shí)別人類語言?;舅枷胧侵谱饕粋€(gè)翻譯程序,將人類語言直接翻譯成機(jī)器語言。這個(gè)翻譯程序被命名為“編譯器”。
但是直接理解人類語言太難了,直到現(xiàn)在還沒有實(shí)現(xiàn),所以我做了一個(gè)妥協(xié),設(shè)計(jì)了一種盡可能接近人類語言并且可以準(zhǔn)確翻譯成機(jī)器語言的語言。這種語言就是我們常說的編程語言。學(xué)習(xí)編程的過程,其實(shí)就是學(xué)習(xí)向編譯器說一門編程語言的過程。
第一種編程語言絕對(duì)是最接近機(jī)器,遠(yuǎn)離人類的。它是匯編語言。雖然它看起來有點(diǎn)像人類語言,比如加法叫做“ADD”,減法叫做“SUB”,但它的語法完全是機(jī)器化的,每一行語句都嚴(yán)格對(duì)應(yīng)一條機(jī)器指令。這個(gè)特性使它適用于一種計(jì)算機(jī)編譯后的匯編程序不能在另一臺(tái)計(jì)算機(jī)上使用,因?yàn)閮膳_(tái)計(jì)算機(jī)的機(jī)器語言不同。
從技術(shù)角度來說,匯編語言缺乏“可移植性”。
Unix 的優(yōu)雅和 Unix 的吸引力,讓很多人希望在自己的電腦上安裝 Unix 來獲得樂趣。因此 ken 和 dmr 決定用高級(jí)語言編寫 Unix,以便它可以在更多類型的機(jī)器上運(yùn)行。
高級(jí)語言是除機(jī)器語言和匯編語言外幾乎所有編程語言的統(tǒng)稱。它的特點(diǎn)是更接近人類語言,與機(jī)器語言基本無關(guān)。不同的高級(jí)語言編譯器可以將相同的代碼翻譯成適應(yīng)不同機(jī)器的指令,所以大多數(shù)高級(jí)語言都具有很好的可移植性。
故事到此結(jié)束,本書的主角C語言出現(xiàn)了。在決定使用高級(jí)語言后,ken和dmr在語言選擇上遇到了麻煩。
當(dāng)時(shí)有很多高級(jí)語言可供選擇,包括那些直到現(xiàn)在還在使用的語言,但沒有一個(gè)被認(rèn)真對(duì)待。 DIY基因再次發(fā)揮作用,他們決定設(shè)計(jì)一種易于使用的高級(jí)語言來重寫Unix。
那是 1972 年。Ken 繼續(xù)改進(jìn) Unix。基于Ken早年設(shè)計(jì)的B語言,dmr開始設(shè)計(jì)新的語言。兩人共同開發(fā)了一個(gè)編譯器。這種新語言被隨意命名為-C 語言。
1983 年,由于 Unix 和 C 的巨大成功,ken 和 dmr 獲得了計(jì)算機(jī)行業(yè)最高獎(jiǎng)項(xiàng)圖靈獎(jiǎng)。玩到這種程度的游戲,古今只有這兩種人。
Unix 和 C,如果你有其中之一,你就可以在敵國(guó)發(fā)財(cái)。但是,他們從一開始就沒有考慮申請(qǐng)專利、商標(biāo)、軟件著作權(quán)等法律保護(hù)。相反,他們將所有內(nèi)容(包括源代碼)傳播到他們想要的任何地方。
對(duì)他們來說,使用自己的程序是最大的幸福和最大的財(cái)富。正因?yàn)槿绱耍S多組織和個(gè)人可以自由地為 Unix 和 C 做出貢獻(xiàn),極大地促進(jìn)了它們的發(fā)展。
從上面的故事中,我們可以看出他們的很多可愛之處:以興趣為出發(fā)點(diǎn)做事,不計(jì)較未來;很有研究精神,信奉“自己動(dòng)手,豐衣足食”;樂于分享,不求回報(bào)。
他們的這些特點(diǎn),是正宗“黑客精神”的集中體現(xiàn)。他們也被視為黑客界的英雄,甚至是山岳的締造者。每個(gè)人都恭敬地稱他們?yōu)?ken 和 dmr(必須是小寫)。幾十年過去了,黑客圈里沒有第二個(gè)人敢叫“ken”這個(gè)英文圈里很常見的名字。
Unix 和 C 仍然是年輕黑客在被圈子接受之前必須努力練習(xí)的三項(xiàng)技能中的一項(xiàng)和兩項(xiàng)(第三項(xiàng)是任何腳本語言)。由黑客設(shè)計(jì),為黑客所推崇,C語言本身處處閃耀著黑客精神。這種光讓它永遠(yuǎn)年輕。
其實(shí)作為一個(gè)開發(fā)者,有一個(gè)學(xué)習(xí)氛圍和一個(gè)交流圈是很重要的。這里推薦一個(gè)C語言C++交流群。無論您是新手還是轉(zhuǎn)行,歡迎入駐,大家共同交流,共同成長(zhǎng)。
C語言,一個(gè)不老的傳奇
最流行的歌曲一定是最常聽到的,最流行的語言一定是最常用的。 C語言現(xiàn)在用的多嗎?業(yè)界普遍的回答是:如果一件事可以用X語言來做,就一定不能用C語言來做。
這里的 X 可以指任何語言。天啊,這好像是在說“能聽X的歌,就不能聽周杰倫的歌”。這是在評(píng)價(jià)周杰倫還是曾軼可?
哪種編程語言最受歡迎?每個(gè)人都會(huì)有自己的主觀看法。讓我們用客觀數(shù)據(jù)說話。
2016 年 8 月公布的編程語言流行趨勢(shì)圖(最新統(tǒng)計(jì)數(shù)據(jù)請(qǐng)?jiān)L問上方網(wǎng)站)。可以看出,C語言一直位居前二,最近又有重新奪回第一的勢(shì)頭。
如果你不需要它,你不需要它,它如此受歡迎,這有點(diǎn)令人費(fèi)解。 dmr 曾經(jīng)說過:“C 很奇怪很奇怪,它有很多缺陷,并且取得了巨大的成功?!币?yàn)樗殴智矣腥毕荩詴?huì)盡量避免,取而代之的是一種彌補(bǔ)這些缺陷的語言;因?yàn)樗_實(shí)取得了巨大的成功。 ,所以今天還是很流行的。
一個(gè)成功的例子是圖 xx 中列出的 10 種最流行的語言。除C語言外,其余9種語言中有7種是直接使用、間接引用或部分借用C語言的。語法(比如語句末尾必須有“;”),只是語法找不到C的影子。 以這個(gè)世界第一的影響力,受到歡迎是合情合理的,即使它愛恨交織。
C語言的愛與恨
C 語言設(shè)計(jì)的第一原則是:“信任程序員”。對(duì)編程語言不太了解的人不會(huì)想到這句話。但是對(duì)于真正的程序員來說,這句話足以讓C語言愛一輩子,愛到死。
在C語言當(dāng)?shù)赖臅r(shí)代,電腦相當(dāng)昂貴c語言可以做網(wǎng)站嗎,但速度不如現(xiàn)在的手機(jī)快,內(nèi)存以KB計(jì)算。因此,當(dāng)時(shí)對(duì)程序最基本的要求就是效率。
C 語言完全滿足了人們對(duì)效率的需求。精心設(shè)計(jì)的代碼可以大大節(jié)省計(jì)算機(jī)資源,而且不像匯編語言那樣難用,所以很受程序員歡迎。
后來硬件越來越便宜,性能越來越高。計(jì)劃的效率不再是追求的主要目標(biāo)。安全性、穩(wěn)定性和易維護(hù)性變得重要,C 語言的缺點(diǎn)也變得明顯。 .
C 語言給了程序員最大的發(fā)揮空間,讓他們?cè)诖a中自由發(fā)揮自己的熱情和創(chuàng)造力,從不質(zhì)疑代碼是否會(huì)帶來危害,因?yàn)樗靶湃纬绦騿T”,相信程序員的決定一定是正確的,即使有錯(cuò)誤,也必須自己改正。
無限的自由,在一些人手中是創(chuàng)造力的源泉,在另一些人手中,它可能是混亂的源泉。隨著軟件系統(tǒng)規(guī)模的擴(kuò)大,需要的程序員越來越多,綜合水平越來越低,出錯(cuò)的概率越來越高,每一個(gè)低級(jí)的錯(cuò)誤都可能造成災(zāi)難。
很多人把造成這種混亂的原因歸咎于 C,開始懷疑它,甚至討厭它,但從來沒有反思過他們?cè)愀獾木幋a能力。
所以有人說c語言可以做網(wǎng)站嗎,給這匹野馬放韁繩,不要讓它狂奔。但是C拒絕了鎖鏈,這么多語言披上了C的外衣,掛上了鎖鏈,站了起來。因?yàn)殚L(zhǎng)得很像C,所以大家很容易接受;因?yàn)樗麄儽绘i住了,他們不再信任程序員,而是告訴程序員如何做這件事,如何做那件事。
如果程序員不聽他們的,他們就會(huì)拒絕工作。這樣,混亂得到解決,開發(fā)速度加快,多人合作更容易,錯(cuò)誤減少,對(duì)程序員能力的需求減少,工資也減少,老板高興,行業(yè)繁榮。
平心而論,“一件事可以用X語言做,你一定不能用C語言做”確實(shí)是一個(gè)很好的策略。程序員雖然會(huì)失去一些自由,但在合法范圍內(nèi)還是有一定的空間的??梢杂袆?chuàng)意,而這些創(chuàng)意很少會(huì)產(chǎn)生負(fù)面影響,結(jié)合起來讓老板、程序員和用戶開心。但是程序員,尤其是受人尊敬的程序員,他們的血液里天生就有躁動(dòng),向往自由的黑客生活。
所以在撫摸他們身上的傷口的同時(shí),他們會(huì)懷念那個(gè)肆無忌憚卻無敵的老將軍,懷念他手下的無拘無束的日子,懷念他激發(fā)出的層層潛力。這位老將軍是程序員心中永遠(yuǎn)的戰(zhàn)神。
C 語言教會(huì)了我們什么
現(xiàn)在,還需要用到C語言的地方大概僅限于以下三個(gè)方面:
C 語言仍然是編寫操作系統(tǒng)的最佳選擇。它為操作系統(tǒng)而生,可以更直接地處理電腦底層,精致、靈活、高效。最重要的是,操作系統(tǒng)的開發(fā)者是頂尖的程序員,他們有足夠的能力和經(jīng)驗(yàn)來駕馭C語言。
在程序運(yùn)行效率要求較高的地方,比如嵌入式領(lǐng)域,C語言也是首選。但是,目前嵌入式系統(tǒng)的硬件性能已經(jīng)足夠強(qiáng)大,功能要求越來越高,C語言的生存空間正在縮小。
在需要繼承或維護(hù)現(xiàn)有 C 代碼的地方,還需要 C 語言。有許多影響深遠(yuǎn)的軟件和程序庫最初是用 C 開發(fā)的,因此 C 將繼續(xù)使用。然而,其中許多已經(jīng)用其他語言重寫了,這些 C 代碼總有一天會(huì)被拋棄。
應(yīng)用這么窄,學(xué)起來有多大用處?
從“不可用”的角度得出“學(xué)習(xí)C語言沒用”的結(jié)論是不公平的。即使是計(jì)算機(jī)及相關(guān)專業(yè),C語言的“用處”也不是很大。學(xué)習(xí)C語言的意義在于它為我們打開了一扇了解計(jì)算機(jī)的窗口。在幾乎所有東西都離不開電腦的今天,越了解電腦,就越能用好電腦。
卡內(nèi)基梅隆大學(xué)計(jì)算機(jī)系原系主任周以真教授2006年發(fā)表著名文章——《計(jì)算思維》。 “像計(jì)算機(jī)科學(xué)家一樣思考”適用于大學(xué)新生。它針對(duì)的是非專業(yè)人士,而不僅僅是計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生。這是因?yàn)椤皺C(jī)器學(xué)習(xí)統(tǒng)計(jì)已更改。
計(jì)算生物學(xué)正在改變生物學(xué)家的思維方式。同樣,計(jì)算博弈論正在改變經(jīng)濟(jì)學(xué)家的思維方式,納米計(jì)算正在改變化學(xué)家的思維方式,量子計(jì)算正在改變物理學(xué)家的思維方式?!币虼?,“計(jì)算思維代表了一種普遍的理解和一種這樣普遍的技能,每個(gè)人,而不僅僅是計(jì)算機(jī)科學(xué)家,應(yīng)該對(duì)它的學(xué)習(xí)和應(yīng)用充滿熱情”。
不幸的是,我們?nèi)匀缓苌儆袑W(xué)校提供此類課程。因此,編程課程在一定程度上肩負(fù)著傳播計(jì)算思維的責(zé)任。這對(duì)于不需要使用C語言的同學(xué)來說,也是最大的意義。
總之,學(xué)不學(xué)C,學(xué)C適合不適合自己,既然這門課已經(jīng)開并且有好老師帶領(lǐng),那就趁著這個(gè)機(jī)會(huì)不要浪費(fèi)時(shí)間了。也許一個(gè)學(xué)期后,你會(huì)發(fā)現(xiàn)自己在編程方面的天賦,然后在這方面努力,最后成為受人尊敬的程序員。
————————
看到這里,是不是對(duì)編程語言和C語言有了新的認(rèn)識(shí)~
如果你喜歡這篇文章,動(dòng)動(dòng)小指點(diǎn)贊然后去吧~