iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
AI & Data

跟我一起在AI的世界裡打怪獸系列 第 6

Day6 用陰陽學說來理解0與1-程式語言的演進

  • 分享至 

  • xImage
  •  

在教室等了好久,穿著道袍,手拿拂塵的老師才慢慢走了過來。進到教室,老師拿出粉筆在黑板上畫下了「⚊」和「⚋」,緩緩開口……

「今天,我們要來學--八卦。」

咦咦咦?我不是來學機器學習的嗎?老師你真的沒走錯教室嗎?


電腦世界的本質-0與1

道家說,「陰陽之中生萬物」,聽起來很難理解。但你知道嗎,現在我們手中的手機、電腦,都是由最基本的0和1建立起來的。

會想要用這樣特別的方式來介紹程式語言,實在是因為之前看到一本小說,裡面的敘述讓我頗有感觸。

她說:「0與1的概念其實就是陰與陽。」(請自行參考蝴蝶seba-三臺令

這句話讓我思考了很久。

當然,你知道我知道,連作者自己都說了,這些就是胡言亂語。但是如果從這個角度看程式語言,的確會發現有許多有趣的相似之處。

0和1真的分別代表著陰與陽嗎?

《易傳.繫辭上》言:「《易》有太極,是生兩儀,兩儀生四象,四象生八卦,八卦定吉凶,吉凶生大業。」

有沒有人看到這段臉就黑了,怎麼我來還要上國文?別急,我簡單說一下這段的意思。

兩儀(「⚊」和「⚋」)從太極之中演化出來,演變成四象、八卦,而八卦可以用來測定吉凶,並運用於生活種的各項事務處理之中。

你看,不難吧?如果從圖來看,會更好理解。

0和1與陰陽的關聯

用一個爻(ㄧㄠˊ),來表示「有」、「無」這兩個概念。而這兩個概念同時包含不同的涵義,像「有」包含了陽、剛、男這樣的概念,而「無」包含了陰、柔、女這些概念。

在電腦中,則是用ㄧ個bit(位元)作為單位,裡面的「0」和「1」則分別代表著通電的有無,有打開開關的話就是1,沒有就是零。

所以在你操作電腦的時候,其中的某一個電子元件會一直進行「開開關關」的操作,把0和1的電子訊號傳給電腦,聽起來很酷吧!

而這個電子元件就是最非常紅的「半導體」,他透過電壓的調控來達到操作來達到開關的目的,至於其中的原理就不細說,因為要討論起來又得是一篇文章了= =

二進制

這個世界上有10種人,懂二進位的人與不懂二進位的人。

這是一句流傳很久的笑話,如果你會心一笑,表示你懂二進制了。但如果你質疑了一下這句話的數學邏輯……

那可能表示你的二進位知識還需要加強XD

十進制、二進制這些方法在生活中常聽到,所謂的「進」,就是數到多少的時候進位的意思啦!

我們最常用的十進制很好理解,就是從零數到九的時候進ㄧ位變成10。

二進制很神奇,從0數到1的時候就要進位了。這種跟現實世界不太ㄧ樣的進位方法常常讓學習的人霧薩薩,但其實不難。因為二進制逢1就要進位,所以數字的表示會是這樣的:
0 = 00
1 = 01
2 = 10
...

看到這裡,你應該知道上面那則笑話的笑點了吧!

為什麼要有八卦?-位元組的誕生

如同前面圖片中提到的,電腦的世界中只有0和1,那理所當然的,他是用二進制作為主要的數學系統。

但是我們可以先想一下,為什麼會出現八卦?每一件事物的誕生都有其原因。

其實不難理解,因為如果只有純粹的陰和陽,的確是最貼近世界的邏輯方式,但是對人類就不太友善了。

畢竟當時易學是用來推演占卜用的,如果在推演的過程中用的是單純的陰與陽……

那可能會出現占卜大師念著:「陰陽陰陰陽陰陰陽陰陽陽陰陽陽陰陽陰陰陽陰陽陰陽陰陽陰陽陰陽……案陰陽咧!我剛剛算到哪了?!」這樣的情況發生。

而電腦語言也是ㄧ樣,最原始的機器語言當然運算最有效率,但可能程式設計師心血來潮時飛快寫著:「0100010100100101010110101010010101010101010010101010101010101010010101010101……」

等喝口水回來,看著螢幕陷入沉思……我TM剛剛幹了些什麼?

所以聰明的古人把三個爻放在一起,創出了八卦,分別代表了天、地、山、澤、水、火、風、雷,八種不同的自然現象,同時也能代表八種身體部位、性情之類。

後來因為八卦所能代表的事物太少太籠統,於是又把兩個八卦合起來,形成六十四個重卦,每個重卦有六個爻,這樣占卜大師的腦子終於可以稍微休息了。

而程式設計師也是聰明的,不約而同地用了同樣的辦法,他們將8個bit組合,稱為byte(位元組),可以有2⁸=256種變化,每一種變化都可以代表一種符號。

而256種符號足以讓程式設計師給數字(0~9)、英文(大小寫a~z),以及鍵盤上出現的所有符號ㄧ個代表的變化了……程式設計師終於也輕鬆一點了。

從圖片上看的話,應該可以更好理解這幾點:
二進制的演變

程式語言的演變

人類將世界歸納成語言,又從語言中創造了世界。

不用去找出處了,這句話是我自己說的XD

我覺得電腦的創造是人類史上一個非常偉大的奇蹟,從龐大機台般的計算機,到現在人手一支手機,人類很努力的創造了一個屬於自己的世界。

而在這個世界的背後,是無數人或偶然間的靈光一閃,或堅持著的嘔心瀝血。我們今天能如此方便都是因為站在了巨人的肩膀上。

今天我們就來看看這個巨人是如何長成的吧。

機器語言時代

所謂的機器語言,就是0和1,機器的原始語言。

機器語言最大的優點就是消能非常高,因為完全不需要經過轉譯就可直接執行,但缺點也非常明顯……非常的費程式設計師。

看看現在的程序員就知道了,光是寫高階語言就累得要死了,如果要人類寫機器語言……太恐怖了。

低階語言-組合語言

咦?語言也有分高低階?所以比較高階的比較厲害嗎?

沒有哦!這裡所謂的高階、低階,代表的是「方便人類理解的程度」,人類越難理解的就越低階,越接近人類語言的就越高階。

會有這樣的演變,是因為0和1這樣的機器語言太難讓人理解了,於是人類就想了一個方法--

如果我先把需要的程式碼做成一個指令集,我需要的時候再去調用就好了,這樣不是很方便嗎?

以下是用組合語言寫出1加到100程式的過程(因為我也不會寫組合語言,我叫ChatGPT幫我寫的,有錯再跟我說……)

section .data
    sum dw 0          ; 初始化總和為0

section .text
    global _start
    _start:
        mov cx, 100   ; 設定迴圈計數器為100

    loop_start:
        add ax, cx    ; 將迴圈計數器的值加到總和中
        loop loop_start  ; 減少迴圈計數器,如果不為零,則重複迴圈

    ; 在這裡,ax中包含了1到100的總和
    ; 你可以將ax中的值輸出到螢幕或儲存在記憶體中,視需求而定。

    ; 程式結束
    mov eax, 0x60    ; 使用系統調用(exit)的系統調用號
    xor edi, edi     ; 返回碼為0
    syscall         ; 執行系統調用

很複雜吧?但跟機器語言比起來已經好很多了呢!

屬於低階語言的有:x86/x86-64、ARM、MIPS、PowerPC、SPARC、RISC-V等等,主要用來控制硬體、驅動程式開發等等,不同的語言需要經過不同的「組譯」,回推到機器語言作執行。

高階語言

雖然組合語言已經接近人類的語言系統了,但仍然有些難以閱讀,想要操作需要先對硬體架構和指令集有相當程度的了解,所以人類又對程式語言做了更進一步的進階。

下面是用python寫一段從1加到100的程式碼,跟前面的X86相比,是不是差很多XD

sum = 0
for i in range(1, 101):
    sum += i
print("總和為:", sum)

再編輯完成後,需要先將程式碼轉換為低階。其中,分成了編譯、直譯和即時編譯三種。

編譯

確認程式碼沒錯之後,一次翻譯、執行。

  • 優點:效率高,適合用在要求效能的系統和硬體上
  • 缺點:要完全除錯過後才能執行

代表的有:C、C++、Objective-C、Visual Basic、Swift、Go、Rust……等等。

直譯

一行一行翻譯程式碼,翻一行跑一行。

  • 優點:可以邊寫邊測試,適合用在初期的雛型建立上
  • 缺點:效能較差

代表的有:JavaScript、Python、Ruby、PHP、R……等等。

即時編譯

會先把程式原始碼編譯成中介碼 (Bytecode)。到執行期時,再將中介碼直譯,之後執行。

使用即時編譯技術的語言會比純編譯語言來的慢一些,但是卻又擁有直譯語言的特性。

代表的有:Java、C#……等等。

總結

所有的一切,都是從最基礎發展起來的,理解基礎,才能理解更高深的變化。  -- 蝴蝶seba

對於這句話我一直是認同的,當然,程式學習演變到今天已經成為一門非常龐大的學科,如果只是需要用到一點點,當然直接學某個程式與研就好,沒有太大的必要學太多的基礎。

但如果你是真的想把這門學科學好的,把基礎打扎實了會比較好。

看完今天的文章,各位應該對程式語言有了比較深的認識了吧?祝福你們可以在打好基礎後,未來在程式設計上發光發熱。

如果你看懂的是陰陽學說的部分……嗯,相信未來龍山寺前的攤位也會有你的一席之地(喂

如果你都沒看懂……

趕快翻到前面重看一次啊!我寫的很辛苦欸!!

最後的最後,有問題的都問,我盡量回答。

因為這樣解釋今天也是第一次,如果有任何錯誤,也請不吝指正,謝謝啦~~

Day6同場加映 課後反思-陰陽學說與程式設計


上一篇
Day5 老打鐵的武器鋪-我要學什麼程式語言?
下一篇
Day7 最受歡迎的武器?-熱門的程式語言
系列文
跟我一起在AI的世界裡打怪獸30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言