C#編程初探(2)走近編程

自由踐行 發佈 2022-12-14T18:26:00.985722+00:00

上節我們是從遠處觀望C#編程,對它有了一點了解,這節讓我們繼續走近它。什麼是編程?很多時候,別人一聽說你是編程的,哇!好高大上!其實這是不了解的人對編程的一種誤解,我們程式設計師都自嘲自己是碼農。就比如我今天教大家編程,其實跟教大家種地沒啥本質區別:)我們都說編程,那什麼是編程呢?

上節我們是從遠處觀望C#編程,對它有了一點了解,這節讓我們繼續走近它。

什麼是編程?

很多時候,別人一聽說你是編程的,哇!好高大上!其實這是不了解的人對編程的一種誤解,我們程式設計師都自嘲自己是碼農。就比如我今天教大家編程,其實跟教大家種地沒啥本質區別:)

我們都說編程,那什麼是編程呢?

單從編程這兩個字來看,很好理解。編程就是編製程序的縮寫。編制是動作,程序是結果。

既然編制是動作,就跟做其他事一樣,需要明白用什麼編?怎麼編?用什麼涉及到材料、工具的選擇,怎麼編涉及到流程、工藝的要求。

既然程序是結果,也跟做其他事一樣,需要明確最終結果是什麼?能幹什麼?是什麼決定了方向,能幹什麼決定了標準。

我覺得編程跟寫作文很相似。比如我們分別把寫作文和編程,按上面的路子套用一下:

用什麼語言?漢語(C#)

用什麼材料或工具?紙、筆(Visual Studio)

流程:審題、立意、選材、提綱、修改(需求、功能、架構、編制、調試)

工藝:總分總(WinForm)

是什麼?記敘文(Windows下的應用程式)

能幹什麼?通過評分標準獲得分數(採集某網站數據)

不加括號寫作文的部分大家都能看懂是什麼意思,括號內的編程術語大家可能就一臉懵。其實這些字母不過就是行業的一些專有概念或名詞,你不了解這些概念或名詞,當然就很難理解,但道理卻都是相通的,無非就是像寫作文一樣寫出一堆代碼來嘛。寫作文的成果是文章,編程的成果就是程序嘛。所以,不需要把編程想得那麼神秘或高深,這就跟我們平時做其他事一樣,大同小異。

剝開了編程的外紗,我們再看什麼是C#編程。這裡C#指的是一門程式語言,那什麼是程式語言呢。

什麼是程式語言?

要解釋清楚程式語言,就必須先了解什麼是機器語言。

我們說見人說人話,見鬼說鬼話。那麼見到電腦,就得說電腦能懂的話,電腦能懂的話就是機器語言。但機器語言都是0101這種機器碼構成的,對我們人來說簡直就是天書。

這太難溝通了,那如何來解決呢?

我先舉個例子,比如我們表達愛對方:

  • 對中國人說:我愛你;
  • 對英國人說:I Love you;
  • 對日本人說:あなたのことが好きです(百度翻譯的)

雖然不同國家的語言發音、書寫都不同,但最終目的都是為了表達一個意思。

所以,偉大的計算機先驅們就發明了各種程式語言,每種程式語言都有自己各自的語法、規範,也就是我們上一節提到的各種程式語言,Python、C/C++、Java等。不過無論是哪種語言,最終都將被翻譯成為機器語言。

那這個翻譯工作誰來做呢?這就不得不提到編譯器了。

什麼是編譯器

我們把從程式語言翻譯成機器語言的過程,叫做編譯。這種有編譯能力的軟體,就被稱為編譯器。

雖然我們說編譯就兩個字,好像也不過就是把「我愛你」替換成「I love you」這麼簡單的事,但實際上為了能夠滿足對複雜社會的抽象解釋,它的工作原理還是挺複雜的,不過大部分知識相對都比較深奧,也跟我們日常編程沒太大關係,這裡我就不展開了。

需要提及的是編譯器與作業系統的關係。

什麼是作業系統

我們都知道軟體要想運行,必須依賴於硬體,硬體的核心就是CPU,也就是我們經常說的晶片。不同架構或型號的CPU有不同的指令集,這個指令集就是我們前面說的機器碼。正常我們編程,就是面向硬體的編程。比如我們在大學學單片機的時候用的是8051晶片,那都是直接面向硬體寫彙編代碼(基本等價於機器碼),就沒有作業系統這個概念。

但隨著科技的發展,不同類型、不同功能的硬體廠商有很多,對一些複雜的設備,比如電腦或手機,需要不同的供貨商提供不同類型的設備。拿電腦CPU來說,就分Intel和AMD。如果每種不同的硬體都編寫不同的程序那就沒法玩兒了。所以聰明的人類,為了解決這個問題,很早之前就在程序與硬體之間增加了一個媒介,專門用來管理和調配這些硬體的,我們把這個媒介稱之為作業系統。作業系統對程序說:程序,你不用關心硬體是什麼以及怎麼工作,你只要告訴你想幹什麼,我來指揮他們去做。然後回頭對那些硬體們說:硬體,你們甭搭理軟體是怎麼設計的,你們就按我的指令來執行,我讓你往東你們別有的偏往西。當然作業系統做的事情不止於此,這裡我只是做個簡單的比方。這種規範化的約定使得軟體和硬體的溝通成本大大降低,IT行業也隨之高速發展。

於是乎,對電腦、手機這種硬體和軟體品類都極其豐富的設備,我們面向硬體的編程就變成了面向作業系統的編程。

目前主流的作業系統Windows、MacOS和iOS、Android、Linux、Unix,當然還有我們華為的Harmony。不同的作業系統能夠執行不同類型的程序,這種可以執行的程序就被稱為可執行程序,程序的存儲表達就是可執行文件。比如windows支持的是exe格式文件,安卓是apk格式文件等。以前這些作業系統都是互相獨立的,誰都不能互相識別。但是現在windows11可以直接打開apk文件,這絕對是個進步,以後如果能繼續互通,走向大一統那可是美事一樁。

回到主題,把我們編寫的代碼轉換成作業系統能夠識別的可執行文件,就是編譯器的核心工作之一。

到這裡,我把編程、程式語言、編譯器、作業系統之間的關係大概講了一下,了解了這些關係,你也許大概就明白了我們用各種語言編制的代碼是怎樣能夠在不同作業系統上運行的了。相信因果、追求本源,這對我們以後的問題查找和吹牛B都大有好處。

可能有些文字稍微晦澀難懂,看明白的觀眾老爺們請在評論區扣一下,我給你們點個讚,沒有白費我手打這麼多字的苦心。沒看明白的就多看幾遍!看不明白的可以評論區提問。

當然實在看不明白的也無所謂。在實際開發過程中,我們與編譯器直接打交道的機會很少,不足以影響實際的編程成果。黃狸黑狸,得鼠者雄。能編出實用的軟體,就比什麼理論都強!

關鍵字: