天天看點

程式設計三原則和代碼執行的完整過程

今天和大家分享一下程式設計的三大原則和解讀,然後内視程式執行過程的奇幻之旅!

一、程式設計的三大原則:

第一:編寫程式前應該深思熟慮

第二:程式應該是具有可讀性的短文,它将在計算機上執行,進而解決問題。

第三:實踐是提高程式設計能力和解決問題能力最好的辦法

from : Richard enbody

程式設計三原則和代碼執行的完整過程

1、解讀:

第一:開始程式設計意味着要從細節上開始設計,要考慮如何解決問題。如果一開始就編寫程式,那麼程式的結構往往不合理,程式也會很亂。要麼程式不會被順利執行,要麼執行後得不到想要的答案。是以,編寫程式前的問題分析是相當重要的,如何把問題分解為幾個步驟再加入一定順序用程式表達出來,這是就是核心。

第二:對于程式可讀性的需求就希望我們的程式可以和文章一樣讓人能讀懂。一方面,閱讀程式最多的人是你自己,為了友善你在日後重新審查自己以前編寫的程式,隻有讀懂它,才能和它一起工作,更新它,完善它,另一方面在做項目時,協作非常重要,具有優秀可讀性的程式可以大大提高工作效率,大家可以快速完成各個子產品的融合與測試。最後,如果一段程式失去可讀性那它将失去價值。

第三,衆所周知國内外的教育模式有很大差别,國内大學普遍更注重理論教學,這樣做的好處在于學生的理論基礎和知識量高一些,而緻命缺陷是實踐能力太弱,真正的工程能力并沒有在大學中得到鍛煉。國外和國内正好相反他們更注重實踐能力,是以,國外的學生動手能力更強。而扯這個的原因在于,如果你隻有理論知識卻沒辦法落地,就像口袋裡揣着幾千萬但是一毛錢都不可以花一樣難受,隻有将理論落地将它落在實處,理論才有價值。是以,實踐,實踐,再實踐,這是我們真正掌握一項技能,步入一門科學最重要的途徑,隻有實踐才是檢驗真理的唯一标準。

二、代碼執行過程

1、語言分類

了解了程式設計的三大原則,就可以開始實踐了嘛?當然可以,你可以先去print一個Holle world玩玩。但是,它是怎麼通過計算機實作的呢?這又要說到計算機語言的分類了,計算機語言分為進階語言和機器語言,而計算機可以直接執行的語言隻有機器語言,是以,所有的進階語言最終都是轉換成機器語言交給計算機執行的。那麼,進階語言按轉換方式分類又分為編譯類語言和解釋類語言,編譯類需要包括C,C++,java等等,其中C語言和彙編語言最接近硬體。解釋類語言包括Python,javascript, perl, shell等等。而這兩類語言最大的差別在于編譯類語言會将程式編譯成一個機器語言包,并且将這個包儲存下來,以後執行程式就不需要再編譯,可以直接執行,大大節省了編譯時間,但是需要占用更多記憶體。而解釋類語言是利用解釋器來執行,并不會生成機器語言檔案,是以每次執行都需要重新解釋。花費時間要高于編譯類語言,但是,占用記憶體更少。在可讀性和簡潔性方面解釋類需要搔首弄姿,在穩定性方面編譯類語言獨占鳌頭,是以,沒有最好的語言,語言都有各自的使命,主要是看使用者拿它來做什麼。

知道了語言的分類,我們還得知道一個東西,它的名字叫計算機。這時可能有人會說,你這不廢話嘛?現在三歲的小孩都知道計算。是的,小孩子是知道計算機,但是,他不知道計算機的定義和它強大的算力。

2、計算機

計算機就是進行計算的物體,它必須支援輸入,操作和輸出資料,同時,它還有一個非常重要的特征就是,它是由簡單的部件通過複雜的方式內建起來的,是以,它的複雜性在于部件的組織結構。而計算機起源于人類對于自身大腦的一次認知更新,大腦是最進階的計算系統,它是由神經元構成。而小小的神經元卻可以完成資訊輸入,操作和輸出。它可以通過生化反應,電、化學能轉換的方式進行資訊傳遞(感興趣的同學自行百度,這裡不在贅述)。看到這裡可能你會突然意識到,原來我們一個神經元都可以作為一個微型計算機來處理資訊。而我們的大腦有1000億個這樣的神經元,用于交換和傳遞資訊的突出更是達到100萬億個。當然,我們一個神經元的算力不可能達到真正計算機的水準,但是,試想一下這麼多神經元加起來組合而成的大腦其巅峰算力将會多麼恐怖?

程式設計三原則和代碼執行的完整過程

3、布爾邏輯

言歸正傳,剛才扯出了很多關于大腦的計算能力問題,假如電腦是仿照人腦來設計,人腦的算力是由有神經元的數量決定的,那麼計算機的算力是什麼決定的呢?帶着這個問題我們追根溯源,扯開遮羞布最終發現,現代計算機使用最簡單的開關作為基本組成部分。你沒聽錯就是開關,可是開關怎麼可能實作那麼複雜的運算呢?好先說現在計算機使用的開關,它的叫半導體,作為電子通信專業的學生之前我一直不知道原來半導體是作為計算機基礎單元,做計算用的。再說計算,開關就兩功能一開一關,最容易了解的方式就是開電燈亮,關電燈熄。而最簡單的開和關這兩種特性居然可以組成邏輯電路,就是給開和關換個名字,開—>真、關—>假!就像你大爺換個名字還是你大爺一樣,開關換個名字還是開關,是以功能一樣。真(開):燈亮,假(關):燈熄!

将開關抽象為真假以後我們就可以聊聊布爾邏輯了,這個布爾邏輯呢,就和它的名字一樣不二邏輯,顧名思義就是不超過兩個開關的組合。國中實體就告訴我們,電路有并聯和串聯兩種(不知道的同學自行百度,這裡不做解釋),布爾告訴我們,把兩個開關用一根線連結起來的串聯電路,我們就稱之為邏輯“與”電路,為什麼稱為邏輯“與”呢?因為,"與"同"和"是近義詞,叫邏輯“和”電路又不好聽,是以,不二就改成邏輯“與”電路了(當然以上純屬瞎編,如有雷同純屬意外)。言歸正傳,邏輯與電路就是說:除非兩個開關同時打開否則電路都是斷的燈不會亮,抽象出來就是除非兩個參數都為真燈才會亮。

程式設計三原則和代碼執行的完整過程

邏輯“或”那就比邏輯“與”稍微進階一點了,布爾說,既然邏輯與這麼麻煩,那我把電路分開搞成兩條支路,最後再做交彙處理不就完了。這樣隻要一個開關是開着的我的燈不就亮了,布爾有點小激動立馬就試了下,咦!還不錯,随便開一個開關燈都會亮。但是,這個關燈的時候問題就來了,這特麼要關兩個開關啊,關燈的時候太麻煩了,萬一女朋友來了關燈都要浪費一秒的時間。于是乎,他又發明了一個邏輯運算叫邏輯非,非顧名思義就是“不”。到此邏輯學家族中的三大家主都被布爾創造出來了,後面的各種門都是它們三個的徒子徒孫。然後,各種邏輯門之間的組合就可以組成加法器,有了加法其他就好辦了。減法是對另一個數字取反後的加法,乘法是重複的加法,除法則更複雜和抽象,有了這些基本運算我們就可以做乘方,開方,卷積等等更進階的運算解決更複雜的問題。到這裡,我們也完成了從邏輯運算到算數運算的跨越。

程式設計三原則和代碼執行的完整過程

搞懂了計算機怎麼進行計算我們也就可以暢想計算機如何提升算力。和人腦一樣,計算機隻要可以內建更多的運算單元,就可以執行更多的指令算力自然就會飛漲。是以,出現了著名的摩爾定理。到這裡我們也就回答了剛開始的問題,輸出hello world,這條程式是怎麼通過計算機實作的。首先我們通過編譯器或者解釋器将程式變成計算機可執行的機器語言,也就是二進制語言,二進制就是一串由0和1組成數字,計算機就可以進行邏輯運算了,而各種邏輯運算又可以組成算數運算将結果運算出來,最後,計算機将結果通過電路送到顯示器,我們也就看到hello world!

程式設計三原則和代碼執行的完整過程

最後我們再回顧一下今天的曆程。今天我們開始聊了程式設計的三大原則。

提出了很多問題:

1,計算機經過怎樣的操作最終輸出hello world?

2,計算機語言是怎麼分類的?

3,計算機是怎麼定義的?

4,計算機強大的算力是怎麼來的?

5,什麼是布爾邏輯?

6,從邏輯運算到算數運算是如何轉換的?

我們是以2到6這五個小問題為導向嘗試回答第一個問題,最後的最後和大家分享一句話,程式設計:就是解決問題的過程!!!

繼續閱讀