C語言探索之旅 | 第一部分第一課:什么是編程?

作者 謝恩銘誓军,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)苟鸯。
轉(zhuǎn)載請(qǐng)注明出處同蜻。
原文:http://www.reibang.com/p/7f84ae8c7ef5

內(nèi)容簡介


  1. 開宗明義
  2. 什么是編程?
  3. 總結(jié)
  4. 第一部分第二課預(yù)告

1. 開宗明義


不知道為什么早处,一直對(duì) C語言有一種很深厚的“情懷”(類似老羅對(duì)錘子手機(jī)的那種)湾蔓。

  • 也許因?yàn)?C語言是很多前輩諄諄教誨說一定要學(xué)一下的一門編程語言;
  • 也許因?yàn)?C語言自 1972 年誕生以來歷經(jīng)數(shù)十年依然獨(dú)領(lǐng)風(fēng)騷砌梆,位列編程語言排行榜前三默责;
  • 也許因?yàn)閹缀跛胁僮飨到y(tǒng)(Windows贬循、Unix、Linux桃序,macOS杖虾,Android、iOS媒熊,等)奇适,底層都有大量的 C語言代碼;
  • 也許因?yàn)?C語言在嵌入式領(lǐng)域是主要的編程語言芦鳍;
  • 也許因?yàn)樵谥T多編程語言中嚷往,C語言的入門是比較難的;
  • 也許因?yàn)樾枰?5 到 10 年的時(shí)間柠衅,你才能說自己精通了 C語言皮仁;
  • 也許因?yàn)閷W(xué)好了 C語言,一般就能輕松入門其他語言茄茁。

有太多也許魂贬,但是可以肯定的是:C語言是一門充滿魅力的編程語言。

C語言的發(fā)明人裙顽,“C語言之父” Dennis Ritchie 在 2011 年去世付燥。很低調(diào),沒有太多新聞報(bào)道愈犹。同年史蒂夫.喬布斯去世键科,各界報(bào)道鋪天蓋地(當(dāng)然了,喬布斯也是很偉大的人)漩怎。

我想說:應(yīng)該多紀(jì)念那些低調(diào)付出的人勋颖。

Dennis Ritchie 除了 C語言這項(xiàng)偉大發(fā)明(Windows、Linux 和 macOS 操作系統(tǒng)勋锤,底層幾乎都用到了 C語言)饭玲,還與 Ken Thompson 一起研發(fā)了 Unix 操作系統(tǒng)(雖然大部分工作是 Ken Thompson 起步的,不過后來 Dennis 用自己發(fā)明的 C語言重寫了 Unix 操作系統(tǒng))叁执。

要知道茄厘,Unix 操作系統(tǒng)成為了后來舉世聞名的 Linux 操作系統(tǒng)的參考對(duì)象,Android 手機(jī)底層就是用的修改過的 Linux 系統(tǒng)谈宛。蘋果的 macOS 操作系統(tǒng)底層也是類 Unix 系統(tǒng)次哈。我們用的 iPhone 和 iPad 等的操作系統(tǒng),底層大部分也是 C語言編寫的吆录。

不為了提高編程水平窑滞,光為了感受大師的風(fēng)采,光為了探尋一下我們每天都在接觸的這門語言,也要學(xué)一下這位了不起的人物的傳世杰作:C語言哀卫。

在這個(gè)系統(tǒng)課程中巨坊,我將帶大家一起探索 C語言的奇妙世界。

2. 什么是編程聊训?


你也許聽說過編程抱究,也許你想要真正明白編程到底是怎么一回事恢氯。

用 C語言編程带斑,是怎么樣的呢?用 C語言作為入門編程的第一門語言真的好嗎勋拟?我們能用 C語言做任何事嗎勋磕?

這一課就是為了回答上述可能顯得有點(diǎn)愚蠢但實(shí)際上很重要的問題。而且借著這些問題敢靡,你在學(xué)完這一課后會(huì)找到你真正想要的答案挂滓。

在學(xué)一樣技術(shù)前先了解一下用它能做什么,不是很好么啸胧?

我們從最簡單的問題開始:

什么是編程赶站?

編程意味著“編寫計(jì)算機(jī)程序”,這些程序能讓你的機(jī)器(一般來說是電腦)做你要它做的事情纺念。

實(shí)際上贝椿,你的電腦里充滿了各樣的程序:

  • 計(jì)算器是一個(gè)程序;
  • 文本編輯器也是一個(gè)程序陷谱;
  • 你的聊天軟件(QQ烙博,微信,等)也是程序烟逊;
  • 你玩的游戲也是程序渣窜。
合金彈頭

上圖大家可能有點(diǎn)陌生,不過這是我那一輩(80 后)的人很喜歡玩的經(jīng)典游戲 Metal Slug(《合金彈頭》或稱《越南戰(zhàn)爭》)宪躯,就是一個(gè)程序乔宿。

簡單來說,在今天的日常生活中访雪,程序隨處可見详瑞。大到航空母艦、空間站冬阳;小到智能手表蛤虐、iPhone,里面都有各種大大小小的程序肝陪。

程序幾乎可以讓你用電腦做任何事情驳庭。你可以自己編寫一個(gè)革命性的加密軟件,也可以編寫一個(gè) 3D 格斗游戲。你的電腦可以為你做任何事(除了泡咖啡之類饲常,不過未來應(yīng)該可以)蹲堂。

注意了,我可不是讓大家現(xiàn)在就去寫一個(gè) 3D 格斗游戲贝淤,因?yàn)槟翘珡?fù)雜了柒竞,會(huì)讓你手指抽筋的。我們的課程會(huì)循序漸進(jìn)播聪,一開始是最簡單的朽基,可能只是實(shí)現(xiàn)在窗口里顯示一段文字。

說來說去离陶,C語言是什么呀稼虎?

編程,用什么語言呢招刨?


你的計(jì)算機(jī)(computer霎俩,也叫“電腦”)真的是一個(gè)奇怪的家伙,這樣說已經(jīng)算很給它面子了沉眶。我們給它傳遞命令打却,只能輸送給它 0 或 1(因?yàn)殡娔X里面有大大小小的數(shù)不勝數(shù)的晶體管,而它們被用來做“開關(guān)”谎倔,0 和 1 正好可以用來表示“開啟”或“關(guān)閉”這兩個(gè)狀態(tài)柳击,所以電腦最底層其實(shí)都是 0 和 1 這樣的二進(jìn)制碼)。打個(gè)比方传藏,我要讓電腦做加法:

“計(jì)算 1 + 2 等于多少”腻暮。我實(shí)際上輸給電腦的是(是我隨便寫的,我并不記得怎么轉(zhuǎn)換這句話到二進(jìn)制碼):

01010011101100110011110101

正如你看到的毯侦,這就是你的電腦所會(huì)的語言哭靖,被稱為“二進(jìn)制語言”。它也只會(huì)這門語言侈离,可以看到這門語言完全不容易理解试幽。

所以,我們的第一個(gè)真正的問題來了:

怎么才能夠用更簡單的語言來和電腦對(duì)話呢卦碾,難道只能用 0 和 1 嗎铺坞?

你的電腦既不講中文也不講英語。然而洲胖,即使最瘋狂的專家也不會(huì)真的要去用二進(jìn)制碼來編寫程序济榨,那簡直令人難以忍受。

所以绿映,我們的計(jì)算機(jī)學(xué)者們就想到:先用其他簡單一些擒滑、便于理解的語言編寫程序腐晾,之后再把它翻譯成電腦的二進(jìn)制語言。

最不容易的丐一,就是要編寫這樣一個(gè)“翻譯”程序藻糖。幸虧計(jì)算機(jī)學(xué)者們已經(jīng)把這樣的翻譯程序?qū)懞昧耍覀円矝]必要重新做了(著實(shí)松了一口氣)库车。所以我們要做的就是告訴電腦:“我要做加法:1 + 2 等于多少”巨柒,這句話會(huì)被翻譯成電腦的二進(jìn)制碼:

01010011101100110011110101

一些術(shù)語


上面我在解釋時(shí)都是用的簡單的詞語,但要知道在計(jì)算機(jī)領(lǐng)域柠衍,每樣事情都有特定的術(shù)語洋满。這個(gè)系列課程中我們都將使用合適的術(shù)語。

這樣有好處拧略,不僅可以顯得你比較“高大上”芦岂,而且當(dāng)你有一天要跟另一個(gè)程序員解釋一些原理瘪弓,用專業(yè)術(shù)語才好垫蛆。雖然周圍的人可能會(huì)把你當(dāng)“火星人”看,但大可不必理會(huì)腺怯。

上面我們說過袱饭,我們不可能用 0 和 1 來編寫程序,所以我們使用“簡化的語言”呛占,按專業(yè)術(shù)語應(yīng)該被稱為“高級(jí)語言”虑乖。

編程語言有幾個(gè)等級(jí),等級(jí)越高就越接近于我們?nèi)祟惖恼Z言(比如英語)晾虑。高級(jí)語言使用方便疹味,但是也有一些缺陷,之后我們會(huì)看到帜篇。

下面列舉一些高級(jí)語言:

  • C
  • C++
  • Java
  • Swift
  • Python
  • JavaScript
  • PHP
  • Go

當(dāng)然這里只是列舉常用的幾種糙捺,要把所有高級(jí)語言列出來那得花不少時(shí)間。

除了剛才的高級(jí)語言笙隙,另一個(gè)我們要記得的術(shù)語是:源代碼洪灯。所謂源代碼,就是你用高級(jí)語言寫出來的代碼竟痰。所以你得先寫出源代碼签钩,然后再把源代碼轉(zhuǎn)換成機(jī)器能理解的二進(jìn)制碼。

接下來再來學(xué)兩個(gè)術(shù)語:編譯器編譯坏快。編譯器指的是把源代碼轉(zhuǎn)為電腦能理解的二進(jìn)制碼的工具铅檩。這個(gè)轉(zhuǎn)換的過程,稱為編譯莽鸿。

對(duì)于每一種高級(jí)語言昧旨,都有對(duì)應(yīng)的不同編譯器。當(dāng)然,也不難理解臼予,因?yàn)槊糠N高級(jí)語言本身是不同的么鸣戴,我們不可能用 C語言的編譯器去編譯 Java 的源代碼。

之后我們還會(huì)看到粘拾,即使對(duì)于一種高級(jí)語言(例如 C語言)烙肺,也存在好幾種不同的編譯器,有 Windows 的編譯器间学,GNU 的編譯器淹办,等等。這些我們會(huì)在下一課學(xué)到械哟。

由編譯器編譯出來的二進(jìn)制程序被稱為可執(zhí)行程序疏之。所以對(duì)于 Windows 下的可執(zhí)行程序,都有一個(gè)后綴名 .exe(就是 EXEcutable 這個(gè)英語單詞的前三個(gè)字母暇咆,表示“可執(zhí)行的”)锋爪。

為什么選擇學(xué)習(xí) C語言


之前說過,高級(jí)語言有很多種爸业。我們應(yīng)該在它們之中特別選擇一門來作為入門編程的語言么其骄?

這是大問題。

我們有如下選擇:

  • 很高級(jí)的語言:非常容易使用扯旷,可以說適合普羅大眾拯爽。其中,有 Python钧忽,Ruby毯炮,等。通常來說耸黑,用這些語言寫程序會(huì)比較快捷桃煎。然而它們常需要一些額外的文件(比如解釋器)才能執(zhí)行。

  • 沒有那么高級(jí)的語言:這類的高級(jí)語言(C語言是一種)崎坊,誠然不容易編寫备禀。但是學(xué)習(xí)這樣的語言可以幫助更深刻地理解編程的原理和電腦運(yùn)作的原理。之后你再要學(xué)一門新語言會(huì)很容易奈揍,你完全可以自學(xué)曲尸。

此外,C語言非常流行男翰。大量我們?nèi)粘J褂玫能浖际怯?C語言編寫的另患。計(jì)算機(jī)學(xué)科也經(jīng)常用 C語言作為教授編程的語言。

你可能會(huì)問蛾绎,有一個(gè)問題我不明白:“C語言和 C++語言有什么區(qū)別呢昆箕?”

可以說鸦列,C語言和 C++ 比較類似,都是使用非常廣的語言鹏倘。為了更好地說明它們分別是如何誕生的薯嗤,我們來說點(diǎn)歷史好了:

在電腦重達(dá)幾噸,大小像一大間屋子那樣的時(shí)代纤泵,計(jì)算機(jī)領(lǐng)域的前輩們開始發(fā)明一門編程語言:Algol骆姐。

技術(shù)不斷進(jìn)步,他們又發(fā)明了一門新的語言:CPL捏题,之后發(fā)展成為 BCPL玻褪,后來被稱為 B語言。

后來公荧,終于發(fā)展成了 C語言带射。

又過了一段時(shí)間,人們想要在 C語言上加一些東西(一些改進(jìn)循狰,如果你非要這么說的話)窟社。這門新語言誕生了,就是 C++晤揣,是基于 C語言發(fā)明的桥爽。C++ 在 C語言的基礎(chǔ)上加了不少新的東西,使我們可以用不同的方式編程昧识。

注意:這并不是說 C++ 比 C 更優(yōu)秀,只是可以讓我們用不同的方式編程盗扒。也不是說 C語言相比就是一門老舊的語言跪楞,不,C語言今天仍然很常用侣灶,它是我們所用的 Windows甸祭,macOS,Linux褥影,Unix 等操作系統(tǒng)的基礎(chǔ)池户,而且在嵌入式領(lǐng)域也是主要的編程語言。

編程艱辛么凡怎?


這個(gè)問題可能困擾很多人校焦。是否需要成為有幾年研究經(jīng)驗(yàn)的數(shù)學(xué)家才能學(xué)編程呢?

答案是:絕不统倒。學(xué)編程并不需要在數(shù)學(xué)方面有多大造詣寨典,當(dāng)然數(shù)學(xué)好對(duì)學(xué)編程也是大有裨益的(比如編寫 3D 游戲,就需要有一些空間幾何知識(shí))房匆。其實(shí)最常用的也就是四則運(yùn)算了:加耸成、減报亩、乘、除井氢。

那編程有什么難的呢弦追?

誠然,不是那么可怕花竞。但是可能需要知道電腦工作的機(jī)制骗卜,為了更好的理解我們用 C語言做的事。

一個(gè)程序員一般有以下特質(zhì):

  • 耐心:很多時(shí)候左胞,你的程序不是第一次就能順利運(yùn)行的寇仓,要堅(jiān)持不懈。

  • 邏輯意識(shí):不需要有很多數(shù)學(xué)知識(shí)烤宙,但是要會(huì)思考遍烦。對(duì)于認(rèn)為編程輕而易舉的人,對(duì)不起了躺枕。

  • 冷靜:急躁起來也不能拿榔頭敲電腦啊服猪。要讓程序運(yùn)行,可不能這樣做拐云。

簡單說來罢猪,學(xué)習(xí)編程沒有特別需要的技能。一個(gè)對(duì)數(shù)學(xué)一竅不通的人也可以成為很好的程序員叉瘩,關(guān)鍵是要有耐心思考問題膳帕。很多人后來都發(fā)現(xiàn)自己愛上編程了,變得喜愛思考薇缅。

3. 總結(jié)


  1. 為了實(shí)現(xiàn)計(jì)算機(jī)程序危彩,我們需要用電腦懂得的語言來編寫程序。

  2. 有很多種編程語言泳桦,我們可以按等級(jí)來分汤徽。一般越高級(jí)的語言,越容易掌握灸撰,但是在最終的程序效能上可能會(huì)差一些谒府。

  3. 我們要一起來學(xué)習(xí)的 C語言被認(rèn)為是高級(jí)語言里偏低級(jí)的。它是全世界最著名和最常用的語言浮毯。

  4. 源代碼是一系列指令完疫,用編程語言編寫。

  5. 編譯器是一個(gè)把我們的源代碼轉(zhuǎn)換成二進(jìn)制碼(0 和 1)的程序亲轨,轉(zhuǎn)換之后的二進(jìn)制程序可以被我們的電腦執(zhí)行趋惨。我們?cè)?Windows 操作系統(tǒng)里經(jīng)常遇到的 .exe 文件就是二進(jìn)制文件,里面可沒有源代碼惦蚊。

  6. 編程并不需要很高深的數(shù)學(xué)知識(shí)器虾,除非你的程序要調(diào)用一些數(shù)學(xué)公式讯嫂,比如加密程序。但是兆沙,編程需要你有邏輯意識(shí)欧芽,并且有條不紊。

4. 第一部分第二課預(yù)告


今天的課就到這里葛圃,一起加油吧千扔!

下一課:C語言探索之旅 | 第一部分第二課:工欲善其事,必先利其器


我是 謝恩銘库正,公眾號(hào)「程序員聯(lián)盟」(微信號(hào):coderhub)運(yùn)營者曲楚,慕課網(wǎng)精英講師 Oscar 老師,終生學(xué)習(xí)者褥符。
熱愛生活龙誊,喜歡游泳,略懂烹飪喷楣。
人生格言:「向著標(biāo)桿直跑」

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末趟大,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铣焊,更是在濱河造成了極大的恐慌逊朽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曲伊,死亡現(xiàn)場離奇詭異叽讳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)熊昌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門绽榛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婿屹,你說我怎么就攤上這事⊥评#” “怎么了昂利?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長铁坎。 經(jīng)常有香客問我蜂奸,道長,這世上最難降的妖魔是什么硬萍? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任扩所,我火速辦了婚禮,結(jié)果婚禮上朴乖,老公的妹妹穿的比我還像新娘祖屏。我一直安慰自己助赞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布袁勺。 她就那樣靜靜地躺著雹食,像睡著了一般。 火紅的嫁衣襯著肌膚如雪期丰。 梳的紋絲不亂的頭發(fā)上群叶,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音钝荡,去河邊找鬼街立。 笑死,一個(gè)胖子當(dāng)著我的面吹牛埠通,可吹牛的內(nèi)容都是我干的赎离。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼植阴,長吁一口氣:“原來是場噩夢啊……” “哼蟹瘾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掠手,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤憾朴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后喷鸽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體众雷,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年做祝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了砾省。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡混槐,死狀恐怖编兄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情声登,我是刑警寧澤狠鸳,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站悯嗓,受9級(jí)特大地震影響件舵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脯厨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一铅祸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧合武,春花似錦临梗、人聲如沸涡扼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壳澳。三九已至,卻和暖如春茫经,著一層夾襖步出監(jiān)牢的瞬間巷波,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工卸伞, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抹镊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓荤傲,卻偏偏與公主長得像垮耳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子遂黍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355