築夢角落

致力於用最生活化的例子讓所有人都能懂程式,也喜歡分享動漫、小說心得,以及自己的所見所聞、所思所想。

程式是什麼?程式的運作原理?程式入門圖解

最後更新時間 : 2023-10-28 | viewed : 311

什麼是程式?程式是如何運作的?

想了解這個問題,先從觀察日常可見的音樂盒開始。

暫且拋開令人陌生的專有名詞,用一首曲子的時間,就能知道程式是如何從無到有變出來的,又是如何讓硬體裝置發揮最大的可能性。

 

目次

 

前言


本文旨在幫助初次接觸程式或自學的朋友釐清整體概念,希望大家在利用其他內容完整的書籍或網路資源學習時能更順利。

文中所舉的例子在細節上難免有失真或缺少一些知識點,還望見諒。有任何想法歡迎留言。

 

誰適合閱讀


想學程式,但完全零基礎的人。

剛開始學程式的人或學生。

寫了一陣子程式,但一直覺得程式摸不著、看不到、沒有實體,因此感到困惑的人。


程式是什麼?


想學習程式,如果能先對程式有基本認識,就不容易被細節給迷惑。

那麼,什麼是程式呢?

 

從英文來看,Google 把 Programming 翻譯成程式設計,而 Program 翻譯成程式、程序、方案、規劃之類的意思。

如果我們換個說法,把「程式」替換成程序、規劃、計劃,是不是好像突然有點理解什麼了?

粗略來說,寫好的程式就像是一個計劃書,裡面描述了所有該做的事情,並且要按照規定好的步驟去執行(這也是程序的意思)。

 

想像一下,如果有人跟你說:「去幫我買一下蘋果。」這句話可以視作一個程式,裡面包含了一個指令

如果情況複雜一點,他說:「去幫我買一下蘋果,如果單價低於 10 元就買 10 顆,如果單價高於 10 元就買 5 顆,如果剩下的錢還夠就全部拿去買橘子。」這句話也可以視作一個程式,裡面包含了多個指令條件判斷

 

上面兩句話是用人類語言描述的,是說給人聽,是一個人對另一個人的「請託」。

而如果希望 CPU (電腦)為我們做點什麼,就需要用程式語言來描述,寫「程式」給 CPU 看,讓 CPU 去執行。

 

這裡我們可以先簡單下一個結論:

想讓自己以外的人或機器,按照自己的期望去完成一些事而發出的指令,就是程式。

雖然這個說法並不嚴謹,但在入門階段可以先這麼理解,隨著日後接觸的知識越來越多,自然能持續修正看法,產生自己的觀點。

 

程式的運作原理


音樂盒裡也有程式的影子

從生活化的例子瞭解了什麼是程式之後,接下來我們換個例子,來看看程式是如何運作的

 

音樂盒應該是我們日常生活裡,很容易接觸到的東西,在它的設計中有兩個重點值得我們注意:

(1) 有一排琴鍵
(2) 有一個帶有凸點的滾輪

當我們旋緊發條後,滾輪開始轉動,凸點會撥動琴鍵,然後發出聲音,這個過程跟程式運作有異曲同工之妙。

音樂盒的滾輪就是寫好的程式有凸點的地方代表 1 、沒凸點的地方代表 0,而琴鍵就如同電腦的CPU,會演奏出什麼旋律(執行什麼動作)完全由滾輪的凸點(程式的 0 跟 1)來決定。

程式就像是音樂盒的滾輪,想要琴鍵發出怎麼樣的旋律,就要怎麼去設計滾輪上的凸點

 

程式的目的


假如音樂盒的滾輪是可以替換的,或者滾輪上的凸點是可以隨時重新配置的,那我們就可以重複利用同一組已經打造好的琴鍵,依據我們當下的需求讓它演奏不同的曲子。

電腦也是如此,我們希望在硬體設備已經設計好了之後,它可以同時滿足各式各樣不同的需求,不必為了新的需求打造新的機器

程式可以讓同一顆 CPU 產生不同的行為,就像不同的滾輪可以讓同一組琴鍵演奏不同的曲子,所以我們的電腦、手機才能同時安裝並運行如此多樣化的軟體、應用程式。

程式的目的之一是為了讓硬體變得通用,沒有程式的話,硬體在被打造好之後就只能做固定的事,無法再改變它的行為,比如指針式手錶只能一直按時跳動,沒辦法讓它變成一個倒數計時器,除非你修改了硬體設計。

但如果手錶裡有一個微處理器(可理解為迷你版的 CPU),我們就可以透過修改手錶裡的程式,去改變或擴充手錶的功能,比如讓它可以倒數計時、碼錶計時等等。


CPU如何執行程式


大家應該還有印象,學生時期在計算機概論學過「電腦只看得懂 0 跟 1」這件事,並且透過音樂盒的例子,我們應該已經明白 0 跟 1 是怎麼運作的了。

單純改變 0 跟 1 的組合,就能讓音樂盒演奏出千變萬化的曲子,也能讓電腦產生完全不同的結果

下面我們就來看一個簡單的程式,進一步探究要怎麼寫出這些 0 跟 1 的組合,讓 CPU 動起來、為我們達成各種目的吧!

print("Hello, World!"); // 在螢幕上印出 Hello, World! 的字樣

這幾乎是每個程式語言最一開始會有的範例(算是一種慣例),執行之後能在螢幕上印出"Hello, World!",就說明你的開發環境已經部署完成,可以開始寫你的程式碼了

而這一行全用英文標點符號寫成的程式碼,最終仍然會被編譯成 0 跟 1 的組合,交給 CPU 去執行

下面我們用一張圖來看看整件事情發生的經過。

程式運作原理的大略流程

程式語言寫下的 print("Hello, World!"); 會經過編譯、連結、組譯等一系列複雜的過程,最終變成只有 0 與 1 的機器語言

CPU 會依據一連串 0 與 1 的指示,去指揮其他硬體設備工作,最後在螢幕上顯示「Hello, World!」。

機器語言在CPU眼中的樣子

CPU像導演,程式像劇本。

如果從另一個角度來看,程式也像是劇本,CPU 是導演,記憶體、硬碟、顯示卡是幕後的工作人員,螢幕、音響是幕前的演員。

而我們身為程式開發者,任務就是負責寫劇本(用程式語言寫下一連串的指令),讓導演(CPU)去指揮所有人在什麼時候該做什麼事。

 

結語


就跟任何一門專業一樣,程式學習之路也很漫長,但我認為程式應該屬於「易學難精」的科目。也就是說,在學習方面它應該要很容易入門,這也是我致力於用生活化的例子來分享程式知識的初衷。

容易入門的這點,也要歸功於前人累積下來的成果。從一開始的圖靈機、用打孔紙寫的機器語言、後來有了組合語言,到現在不光是有接近人類語言的高階程式語言,還有各種方便的開發工具,讓學習程式的門檻越來越低(但要學習的東西可能越來越多)

程式語言可能有很多種,程式問題可能千變萬化、充滿Bug,開發工具可能推陳出新、五花八門,但萬變不離其宗,只要記得寫程式就像在寫計劃書或劇本,而寫好的程式碼必須經過編譯、連結等一連串複雜的過程,最終變成 0 跟 1 的組合,交給CPU去執行,結果就會像音樂盒的滾輪能撥動琴鍵、演奏曲子。

了解這個本質,就能判斷哪些東西屬於不變的概念,哪些東西屬於隨時可能改變的操作方法,所有問題都能抽絲剝繭、迎刃而解。

雖然了解程式的本質並不會讓我們馬上就學會怎麼寫程式,但它能讓我們不害怕寫程式


希望這篇文章有幫助到剛開始接觸程式的人,或是寫了一陣子程式還是覺得摸不著頭緒的人。

就像我用生活化的例子來思考什麼是程式、以及程式跟硬體之間的關係,當我們在程式學習或開發上遇到困難的時候,也可以想想有什麼生活化的例子能幫助自己分析問題

如果你喜歡我的文章,歡迎留言讓我知道,有任何問題或想法也可以留言討論,一起學習!

 

 

 
我要留言!
 

X
暱稱(選填)
email(選填,僅站長可見。)
留言 To:#