程序猿的崛起,一篇文章看懂編程語言!

出品:科普中國

製作:科了個普 楊陽

監製:中國科學院計算機網路信息中心

王國維在《人間詞話》里寫道:古今之成大事業、大學問者,必經過三種之境界:「昨夜西風凋碧樹。獨上高樓,望盡天涯路。」此第一境也。「衣帶漸寬終不悔,為伊消得人憔悴。」此第二境也。「眾里尋他千百度,驀然回首,那人卻在,燈火闌珊處。」此第三境界。概括了一種鍥而不捨的堅毅性格和執著態度。

「知道自己不懂」是為第一境界;「不知道自己懂」是為第二境界; 「知道自己懂了」是為第三境界。

無論你是小白,還是小白,還是小白,你在學習編程的過程中都會深深的體會到這三句話太準確了。學習編程意味著我們將要進入一個與日常生活經驗迥然不同的新領域,這最初的曲折辛酸,以及逐漸初窺門徑、小有所成並最終笑傲江湖、獨當一面的欣喜正是上面所說的學習三境界的真實寫照。這篇文章將要介紹計算機編程的前世今生,如果你想要了解程序猿這一高收入人群的真實生態,這篇文章就是IT界的《物種起源》,為你道盡它們的演化歷程和苦樂悲喜。

電腦的誕生

首先我們熱烈歡迎世界上最早的電腦登場,對,它的名字就叫安提基特拉機械,被認為是最初的電腦,展示於雅典國家考古博物館。

此機械是在希臘安提基特拉島附近的安提基特拉沉船里發現的,所以叫安提基特拉機械。它誕生於公元前100年左右,屬於模擬計算機,至今已有二千多年歷史。類似的複雜工藝技術直到14世紀時歐洲製造了天文鐘後才重新出現。它是古代人類智慧的最高傑作之一。

那麼,真正的近代的電腦誕生於什麼時候呢?答案是1945年,諾伊曼發明數字式電腦。此處應該有掌聲。

諾先生規定用二進位替代十進位運算,並將計算機分成五大組件,他的思想為電子計算機的邏輯結構設計奠定了基礎,並且已成為計算機設計的基本原則。

1951年,EDVAC計算機宣告誕生。由於他在計算機邏輯結構設計上的偉大貢獻,諾先生被譽為「計算機之父」。

由上圖可以得知,直到93年,我們現在一般用戶熟知的window操作系統才誕生。

電腦程序運行的基本原理是什麼?

感謝諾先生,沒有他的發明,小編今天就不能夠在電腦面前給大家科普了。接下來小編首先給大家分析一下開啟計算機主機的那一瞬間,桌面蹦出來的畫面是怎麼回事。

在一台電腦里有很多程序。其中,計算機做任何事情之前必須存在和運行的最重要的程序是操作系統程序。對,沒錯。就是你每次開機時候看到的那個熟悉的畫面,伴隨著叮噹叮噹的音樂,世界首富比爾蓋茨的微軟公司就是靠發明這個windows系統發大財的。這是計算機的主要「系統程序」。此操作系統程序不僅控制硬體部件,還控制其他軟體(許多應用程序),還可讓計算機用戶與計算機本身進行互動(比如通過鍵盤,觸摸屏,語音激活等等)。實在是萬能之神啊。

什麼是計算機語言?

與人類語言的複雜多變一樣,現在世界上已經有200種以上的計算機語言了。當然其中也有很多幾乎很少使用的語言,實際經常用到的語言只有20到30種。儘管如此,一個人要掌握太多計算機語言的話還是比較難的。

在那麼多的程序設計語言中,學習哪個才好?下面是最常用的語言,程序猿們的本事可不僅僅是直立行走那麼簡單,掌握這些工具中的大部分,並且精通其中的一兩種,才是一隻合格的現代程序猿。

人類語言是指,人類用特定的格式和辭彙來向他人發出指令,表達意願,進行交流。不同種類語言的辭彙和格式不盡相同,但可以達到相同的交流目的。

同樣,我們也可以用「語言」來控制電腦,讓電腦為我們做事情,這種語言叫做編程語言(Programming Language)。我們先簡單介紹一下常用編程語言。 編程語言也有固定的格式和辭彙,我們必須學會使用,才能在此基礎上編寫程序控制電腦。常用的編程語言有C語言,C ++,Java,C#,Python,PHP,JavaScript,Go語言,Objective-C,Swift等等,每種語言都有自己的優點。

計算機是如何聽懂編程語言的呢?實際上,如果沒有編譯器(一種專門程序)的存在,計算機是無法理解編程語言的。編譯器用來將編程語言編寫的指令轉換為機器語言。打個比方,人類有自己的人類語言,計算機也有自己的語言系統。它們使用只包含1和0的二進位代碼,1表示「on」,0表示「off」。編程語言更容易被人類所學習和掌握,而編譯器編譯出的計算機語言則更容易讓計算機接受。

程序猿使用編程語言編寫的程序代碼,編譯器可以理解,編譯器會將源代碼轉換為二進位代碼(目標代碼),然後彙編程序幫助這個目標代碼轉換為低級指令,指示機器執行,最後重新獲取結果。

為什麼要有編譯器的存在呢?

簡單的回答是,雖然編程語言已經編寫代碼告訴計算機該怎麼做了,但計算機只能理解兩種不同類型的數據:開和關。實際上,一台電腦實際上只是一個開/關(晶體管)的集合。計算機所做的任何事情背後的真相只不過是無數晶體管的開閉組合。

二進位碼就是作為1和0的表示的組合,其中每個數字表示一個晶體管。二進位代碼分為位元組組,8位數組表示8個晶體管。例如,11101001。現代計算機包含數百萬甚至數十億個晶體管,這意味著無法想像的大量組合。

於是這裡出現了一個問題,為了能夠編寫一個計算機程序,打出數十億的1和0將需要超人的腦力和精力,編一個小程序可能需要一兩年的工作。編程語言和編譯器中,前者對人友好,後者對機器友好,兩者通力合作,才能將人類的想法快捷而準確的傳達給計算機。

為什麼會存在那麼多的計算機語言?

數百種不同的編程語言使我們有可能創建計算機軟體,應用程序和網站。而無需編寫二進位代碼,他們讓我們相對容易的編寫,閱讀和理解代碼。同時,每種語言都帶有自己特殊的編譯器程序,它負責翻譯我們編寫的二進位代碼,讓機器明白我們的意圖。

那麼,為什麼我們有這麼多語言吶?

這是因為不同的語言被設計為用於不同的目的,一些可用於Web開發,一些用於編寫桌面軟體,其他用於解決科學和數字問題等。此外,編程語言也可以是低級或高級的。低級語言更接近計算機所理解的二進位代碼,而高級語言更容易編程,因為它們接近人類的語言和思維模式,設計簡單易於編寫。幾乎所有的主流編程語言都是高級語言。

編程語言生成的程序代碼是什麼樣的?

程序是一種用特定編碼語言編寫的文本文件。程序文件中的代碼稱為源代碼。每個編碼語言都有自己的文件擴展名,用於識別用該語言編寫的代碼文件。例如,Python是.py。要編寫程序,可以在純文本編輯器(如記事本)中編寫代碼,並將文件保存到計算機。

如何運行一個程序,並實際得到它來執行命令?編碼語言之間有所不同。一些語言保存到計算機後可以生成可以直接運行的單獨二進位文件,而其他語言的程序由某些軟體間接運行。例如,JavaScript程序文件將通過Chrome瀏覽器等運行。PHP程序文件將由像LAMP這樣的Web伺服器運行。

以hello.py文件為例,Python語言附帶一個命令行,它將顯示程序的輸出文本「Hello,world!」。如果要將代碼輸入命令行並按enter鍵,程序將運行並且命令將被執行。是不是成就感油然而生啊。

運行程序時會發生什麼?

電腦實際上並不了解「Hello,world!」這個短語,不知道如何在屏幕上顯示。它只能理解開關。所以要真正運行一個命令,如列印「Hello,world!」,它必須將程序中的所有代碼翻譯成一系列可以理解的代碼。

首先,源代碼被翻譯成彙編語言。彙編代碼被翻譯成機器語言。機器語言直接作為二進位代碼執行。我們再來理解一些細節。編碼語言首先必須將其源代碼轉換為彙編語言,一種使用單詞和數字來表示二進位模式的超低級語言。根據編程語言不同,這可以用解釋器(程序被逐行翻譯)或編譯器(程序整體翻譯)來完成。

然後,編碼語言將彙編代碼發送到計算機的彙編器,該彙編器將其轉換為計算機可以直接理解並直接作為二進位代碼執行的機器語言。

結論

像二進位代碼(計算機的母語)一樣簡單和原始的東西可以創建計算機軟體這樣複雜的東西,這是不是很令人驚奇呢?屏幕,操作系統,照片,視頻,互聯網,微信,在線銀行帳戶和本網站,所有這些都可以從1和0構建。編碼語言存在的全部原因是為了簡化所有這一切,這是人類智慧成就的象徵。

最後,最重要的是,有一個循序漸進的行動計劃,從學習編碼開始,你就將進入一個全新的世界。加油吧,少年。

「科普中國」是中國科協攜同社會各方利用信息化手段開展科學傳播的科學權威品牌。

科普百分百·助力科普中國,讓科學知識在網上和生活中流行起來。溫馨提示:以上為科普百分百網上閱讀所瀏覽內容,轉載分享只為知識傳播和學習宣傳,本文內容僅代表原作者觀點,如有意見建議,請私信留言,我們會及時處理。歡迎關注,謝謝


推薦閱讀:

Pycon 2016 小記

TAG:學習 | 編程 | 開發者 |