教育:構造主義和機能主義

“CPU如何工作?”

  (這個問題由隨筆《一種很簡單的編程語言》引發)(該文寫了一部分,還未發表)

  我看過《編碼:隱匿在計算機軟硬件背後的語言》,但是今天回想這個問題,還是覺得不懂,於是上網搜索,結果還是不懂。這本書強大到——用繼電器實現CPU!但我爲什麼還是沒看懂?

  我不會覺得自己笨,所以一定是書有問題。(呵呵?)但是這本書不該有問題,那……總之不怪我,是書的表達問題……

  心理學中曾有構造主義和機能主義之爭。我打個比方:有一隻懷錶,爲了弄懂其如何工作,構造主義仔細地拆開了表,說:“這個表有100個齒輪。”而機能主義看了看錶,說:“這個表有一個錶盤,錶盤之下必然有一個動力系統,也必然有一個能量儲存系統。”——二者說得都很對,但是前者顯然仍不知道表如何工作,我們也似乎也不能說後者就弄懂了表如何工作。那麼,我們該怎麼回答這個問題呢?

  我們使用懶人信條的第二條,假設我們已經回答完了,所以你也該懂了——什麼叫“懂了”?“我明白CPU是怎麼工作的了”、“我明白懷錶是怎麼工作的了”、“我懂微積分了”,這些都是什麼意思?也許某人會算二次函數下的面積,但他未必“懂”微積分,因爲他只知道可以套用某個公式。但我還知道爲何可以套用這個公式——因爲這個公式包含在微積分基本定理中,而微積分基本定理對光滑曲線總是有效。雖說要是把“爲什麼”一直問下去,我也不會懂,但其一我懂的比他多,其二我已經觸碰到了最基本的一些定律。由此可見,“懂”就是能把基本的東西一直上推到表面——通過不斷組合。所以對於CPU,要做的就是從門電路開始——但通過對門電路的組合,我們可以組合出新的成分,並以此爲新的基石。自底向上是構造主義,自頂向下是機能主義。前者是工程組裝順序,後者是分析設計順序。二者必然是可以對接的——但是在心理學中,這個對接十分困難,從神經到精神實在太遠——CPU則相對簡單。《編碼:隱匿在計算機軟硬件背後的語言》這本書,大體是按構造主義方法寫的,這很好,但是缺點是看不到目標;而用機能主義方法寫,則看不到底層細節——也就是我們擁有的東西。對接是感人的:你用機能主義方法分析出了一個基本需要,然後發現某現有之物恰可以去滿足這一需求——這讓人興奮。但我也就是說,在目標主導的情況下,機能主義方法纔是基本的,要回答“CPU的工作原理是什麼”,也當從機能主義角度開始。倒不是說這本書倒過來寫更好些,但絕對更快、更簡練。但是開頭——從繼電器到門,就難以倒敘了,我承認這是一個例外,並且難以言說,或許是因爲繼電器過於基本了?但是畢竟結構主義路線在這裏過於難走,(心理學尚有解剖可看,並且器官可能作用並不單一而是經過高度合併;而CPU是我們的設計,合併功能是未來的事了)總之設計應當主修機能主義,而拆表工作中結構主義就更沾光一些——也只是一些。

  那麼我是不是該試圖回答一下這一問題——“CPU如何工作?”

  第一步,“CPU”是什麼?——先列出計算機的全部結構:

  • 邏輯儲存器(包括儲存器、輸入、輸出,此抽象來自《彙編語言》)
  • CPU(包括運算器、控制器,此抽象來自《計算機組成原理》)

  ……不得不說我再一次意識到自己的紕漏——問題應該是“CPU”是完成何工作之物。而在此之前我先回答一下計算機爲完成何工作之物——我們定義一臺簡單計算機,爲了區別於圖靈機,暫稱“簡單機”,其工作原理如下:

  1. (初始化)簡單機分爲“儲存部分”和“處理部分”,儲存部分爲足夠長的一串的字節(8位),處理部分爲一個寄存器A和一套指令,寄存器A存放地址,指令將一個數對應於一個操作,這個操作可以按固定規則地更新寄存器A和儲存部分。
  2. 執行寄存器A中數值對應地址中的操作
  3. 回到1

  然而這不就是那一篇隨筆(見開頭)中的BF語言嗎?我們甚至不需要那個寄存器A,把寄存器A看做某個固定地址就可以,把第一條改爲“執行地址…中的操作”。如果這樣,那麼CPU就是幹這件事的東西,即【把數字轉化爲數據操作】

CPU就是把數轉化爲操作的東西

  現在才得出這個結論似乎有些可笑——CPU等價於一個switch,但我們知道數據很容易儲存,操作呢?我們以“取某地址的數”操作爲例:(設置一個寄存器X來簡化)

  (參考《編碼:隱匿在計算機軟硬件背後的語言》第17章)

  (2018-1-6 於地球, 未完待續)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章