--- 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`