---
# System prepended metadata

title: 程式與生活
tags: [Documentation, Templates]

---

---
title: '程式與生活'
disqus: Arce
---

大家好，我是專業拖更的亞斯(Arce)。
我想表達的事情，實在是很難動筆寫成文章。
如果今天是純粹的寫篇指定語法或功能教學，那真的很簡單就能寫完了。
因為以現在的<高階語言>而言，使用的是類似英文指令的方式，你只需要懂一些很簡單的英語單詞、並學會該程式語言的框架結構，教學基本就結束了。

但這樣毫無意義，這不是我主辦教學的目的。
程式語言僅僅是種工具，更重要的是其背後的思維邏輯。
我不打算強迫每一個人都成為哲學家，但我希望在此之後，大家都能夠思考事物的起始以及終結，理解"現象科學"的概念，學會觀察並歸納出結果，並懂得反推與套用框架。

最後理解，很多事情並不是理當如此，即使探討毫無意義，但依舊其來有自。

---
# 目錄

[TOC]

# Your choice

套一段我很喜歡的電影"駭客任務"中的對話。


> Neo: “But if you already know, how can I make a choice?”
The Oracle: “Because you didn't come here to make the choice. You've already made it. You're here to try to understand why you made it.”
		    
尼歐: 「如果你已經知道我會做什麼選擇了，那我怎麼能夠選擇？」
祭師: 「因為你並不是來這裡做選擇的。你早就做好選擇了。你在這裡只是因為你想搞懂為什麼你做了這個選擇。」

小時候只覺得，這是部跨時代的動作電影，在說明"世界是虛擬的"這個概念。
長大後才明白，這部電影其實在探討"選擇"，不論是造物主的、祭師的、墨菲斯的、崔妮蒂的、尼歐的。
即使是在現實生活中，絕大部分的選擇並不是你真的做的決定，而是你僅有這些選擇可以被選取與執行。

你應該能隱約理解到，如若我們要探討"選擇"，那將會需要非常多的預備知識。
但在那之前，人們還必須先站到"能夠做出選擇"的那個位置。
又或者，只講選擇太抽象了，現階段你仍然無法理解，甚至都不知道這跟程式課有何關聯。但是沒關係，直到整個系列課程結束後，我們再來面對"選擇"的問題。


# 程式的根本
該來講講"程式"了。
接下來我們所講的東西會涉及到各種領域，從神學、歷史、物理、數學…，甚至到量子力學，但我會盡可能用舉例的方式讓各位理解，如果有不了解的地方請再提問。

若要說到程式的基礎，就必須談談"加、減、乘、除"。
<進位制>，是一種記數的方式，以有限的數字/符號來表達出所有的數值，比如生活中最常用的十進位，即是用0~9就可以表達出所有數值。

你也可以想像一下電影"浩劫重生"的場景中，湯姆漢克在樹上畫下了4直線與1斜線的組合，形成的簡單易懂的五進制。

![](https://i.imgur.com/KYTUmHv.png)

當你看向整體的符號時就知道是一組符號表示5天，而任意的一條斜線或直線都代表了1天。

所以進制的好處就顯而易見了，進制可以讓人在運算大數值時更加方便，否則一次複雜計算耗費的紙張資源大概都可以砍光全世界的樹了。

至於為什麼生活中常用到十進制呢? 
有人說是因為人類有10根手指頭的緣故，但只能說是從目前的結果以及觀察後，歸納與反推後的理解了。
因為實際上，在古文明的考據中，也確實出現過使用其他進制的文明呢。

而現在，不論你是否學過心算/珠算，現在有沒有理解了算盤的原理了?

而電腦的發展，就構築在進位制上。

最早的電腦以功能而言，甚至都沒有"儲存"的能力，更像是我們所知道的計算機，每個按鈕都只是會觸發固定的<函式>。
當進行複雜的計算時，每一次的計算結果還是要手抄記錄下來。
更甚者如果要更換函式，還必須更改內部的電路，而當時的電腦體積可能是整個房間，所以改電路非常的工程浩大…。

一直到<馮·紐曼架構>－第一個，具備儲存功能的電腦架構理論被提出後，二進制正式的被用於電腦程式，並且沿用至今。

<!-- 2021/10/29 到此 -->
# 程式的背後、底層的邏輯

所以，現在應該有人在想，進位制到底如何變成程式呢?

實際上，現在所普及的電腦，都有非常人性化的<介面>。
即使很多時候你仍覺得不方便，但這些圖形化介面大大降低了使用者在應用層面的難度。
如果沒有提供介面，今天的使用者想要達到某些功能，可能就得打上長串的指令，甚至是要從硬體層面開始著手了。

程式的背後邏輯，如果要以生活中的例子比喻，那就類似於：
上司指派了你一件工作，而這件工作內容是基於曾經學習得到的經驗，讓你清楚知道要做這件事該從何下手、經過一定的流程與多道手續後，方能完成這份工作。
而在這過程中，有很多屬於<低階>的工序，比如：寫字、計算、整理文件...等。
這些在你排定工作流程時，並不會特地寫出來的、屬於基本或思考上很自然忽略的工序。
當然，如果在拆分更細，可能包括購買寫字需要的紙筆、找到對應的聯絡窗口資訊...等。
而在最後，你回報給上司的部分，其實只有簡單的"XX工作完成了"簡短的報告。

這個簡短報告本身就近似於功能；而往下拆解的這些公序，則近似於程式背後實際執行的邏輯。

實際上，你在介面上所操作或使用的每一個功能，都屬於非常<高階>、<高功能等級>的部分。
比如：遊戲中按下滑鼠左鍵攻擊，這樣一個看似簡單的功能背後，其實可以拆解成很多子程序，如：
取得被按下的按鈕、判斷按鈕類型、判定攻擊種類、呼叫對應攻擊程序、取得被指定的攻擊對象、計算傷害...。

而每一個子程序背後又可以再往下拆解，比如: 取得被按下的按鈕，實際上需要使用函式庫，並按照一定的協定才能與硬體溝通。

當拆解到非常<底層>的部分，你所使用的<功能>最終會回歸<進位制>，也就是基本的四則運算。
程式在最低階最底層的地方，僅僅是回傳一個數值結果，這個數值結果回傳到上一層後會再度運算出另一個結果，以此類推，不停向上...。
而軟體與硬體就由很多的運算結果組合最終產生了特定的意義，逐步回歸到上層，所謂高階的部分，最終組合並收斂成一個特定的功能。

# 邏輯
<!-- 人類的結構:讓我們把時間拉回現代 -->
所謂的高階與低階，在不同領域可能代表了不同的意思。
比如工作職場上，表示的是位階的不同，著重實作面(低階)或精神/設計/領導面(高階)；
在神經科學面，可能是指接近淺意識(低階)或表層意識(高階)；
在核廢料中，指的是被輻射污染的物品(低階)或被使用過的核燃料棒(高階)；
在程式面，可能是指接近硬體/實作層面(低階)，或是具備一定的封裝與抽象化過程(高階)。

實際上，高階跟低階是相對而言，有比較才會有高低之分。
從上面的舉例你也許注意到，跟實作、被使用過有關的概念，會偏向低階；而越抽象、越接近精神面的概念，則偏向高階。
這其實是因為，高低階是來自<邏輯>。
邏輯又可以稱為理則、論理、推理、推論，是指一種建立理論，並且有效驗證的研究。關於邏輯的學說非常複雜，可以參考[wiki](https://zh.wikipedia.org/wiki/%E9%80%BB%E8%BE%91)。
在不同的學術領域中跟不同的推理方式有關，如果要簡要的說明，可以說是：為了釐清某些的<因果關係>，所以根據觀察到的現象提出了一套理論，然後根據事實與現有理論有系統的驗證。

恩，非常難以理解呢。

要舉例說明的話，就像是"1+1=2"這個算式，其實需要經過龐大的證明才能確立，但現在我們都把他當成基本知識記住，甚至以此去衍伸出了更多運算了。

但知識可能會錯，如同這幾百年間不斷有科學理論被推翻。
邏輯所要表達的，其實是一種正確推論方法，很多時候人們所見的相關事物，並不表示他們具有因果關係，反之亦然。

歐洲的蝴蝶振翅，在美國造成了龍捲風? 丟了一隻鞋子，導致一個國家滅亡? 有著混沌的設定，但卻是最清楚的一個?
理論都必須從設計實驗並驗證後才能得證，但即使經過嚴謹的推理，很多時候仍不能保證沒有遺漏的因素存在，這也是為何實驗通常會選在沒有干擾的環境下進行。
但前題的理論如果有誤，自然也無法得到正確的答案，只能得到看似正確實則錯誤的結論。

大概，只要不是神，沒有人能夠保證自己提出的理論一定是正確的吧。

# 人

# 電腦的結構(未完待續)
<!-- 模仿人類的結構 -->

<!-- 同步與非同步 -->

<!-- 而我們如今的通用的，可儲存程式的電腦架構，是在1945年，基於圖靈 (Alan Turing) 以及多位先人的研究，由馮·紐曼(John von Neumann)為首的多位學者提出《First draft of a report on the EDVAC》報告，該報告中捨棄了十進制並改用二進制，並正式成為了一套沿用至今的電腦架構 - 馮·紐曼結構。 -->

# 軟體?硬體?(未完待續)

# 程式語言?高階/低階?前端/後端?(未完待續)

# 無程式碼(未完待續)

:::info
**Find this document incomplete?** Leave a comment!
:::

###### tags: `Templates` `Documentation`
