導讀 馬文·明斯基和終極萬能工匠玩具——艾倫·凱(Alan Kay)
艾倫·凱在猶他大學讀博士時(1968年),製作了一臺由硬紙板做的Dynabook(“適合所有年齡兒童的個人計算機”)原型機。1970年,他加入了施樂帕洛阿爾託研究中心,在那裡推動了圖形使用者介面和乙太網技術的開發,並領導了Smalltalk和Alto計算機的開發。他曾擔任雅達利公司首席科學家、蘋果公司高階研究員(植物園專案)、華特迪士尼公司研發副總裁和惠普實驗室高階研究員。2001年,他成立了視點研究所(Viewpoints Research Institute),開發了Squeak和e Toys。
讓我提前坦白:我愛馬文!我使用一般現在時說出這句話,是因為馬文雖然在肉體上離開了,但他仍然活在所有有幸認識他的人的腦海中,這些人包括認識他本人的人,以及透過他的眾多演講或像本書一樣的著作認識他的人。我想,大多數讀過本書的人也會感覺認識了馬文,因為“思想中的馬文”開始鮮活地存在他們的腦海中。正如邁克·特拉弗斯所指出的,馬文的一條主要的經驗法則是:我們應該努力將偉大的思想家們內化到自己的頭腦中,讓他們能夠不斷地思考,從而幫助我們思考。我正要試著如此行事——在這篇導讀裡開啟“馬文頻道”。
我尤其喜愛馬文這篇獨具一格的文章。這是他為了支援他所堅信的偉大願景而寫給兒童讀者的:如果你們能理解並好好使用新的計算媒介,將對你們成長的過程產生巨大的積極影響,你們會對世界產生更加偉大的看法,並會獲得一套處理世事的思維工具。他直接對孩子們發出呼籲。因為他是研究計算機的人,所以比較瞭解計算機真正能做什麼。而大多數成年人(包括許多計算機專業人士)對計算機的認識都還十分膚淺。學習“偉大的思維”的一個主要困難是,我們總是從“我們在哪裡”開始,並試圖將新的想法和事物融入我們認為自己已經知道的東西中。如果新的想法或事物與我們的非常不同,那麼我們常常要麼完全忽略它們,要麼將它們強行扭曲,使之符合我們當前的“私人世界”(即我們兩耳所聞的世界)。馬文希望孩子能有這樣一種思維方式:“我認為這個想法或事物是這樣的,但它也可以有另一種構成方式,它可能是由我完全沒有想過的東西構成的。”(馬文很擅長這一思維方式!)
馬文常常用萬能工匠玩具與上述思維方式做類比,因為在玩這種玩具的過程中,你可以透過少數極其簡單的零件,做出多到令人驚訝的各種東西,就像一個想法或事物可以有不同的構成方式一樣。這些零件非常像磚塊和其他簡單的基本構件,對計算機來說,就像是計算機材料。馬文從小就是個非常了不起的萬能工匠建造家,並且就像每個孩子都知道的一樣,他知道建造恰如其分的東西會帶來巨大的滿足感。與此同時,孩子在愉快地專注於做好某些事情的時候,學習行為也自然而然地產生了。正如瑪麗亞·蒙臺梭利(Maria Montessori)多年前所指出的,玩耍就是孩子的工作。孩子在玩耍中學習,得到成長。
我們通常用萬能工匠玩具做的第一件事是,製作超越零件本身的各種結構。從開始動手擺弄零件後,我們總能想出辦法完成這件事,就像我最終用零件建成了一座摩天大樓。
透過這“第一件事”,我們立即可以瞭解到,萬能工匠中最重要的不是其部件的細節,別的建造材料也有基本元件及其組裝方式,其中的設計方式才是最重要的,因為大多數偉大的思維存在於組合這些部件的設計中。
我們可以以另一種方式看待這種偉大的思維:如果所製造的東西越複雜,那麼和材料相比,架構就越佔據主導地位!換句話說,在我們所接觸和思考的事物背後,往往是一些本質上具有組織性的奇妙的東西。正如馬文所說,“這些部分如何相互影響比它們本身是什麼更加重要。”
萬能工匠的一些部件是可移動的,因此,我們可以製作一輛可以拖著或拉著走的玩具車,或一輛帶有駕駛室的拖拉機。
那麼,我們是否可以製造一輛自動行駛汽車呢?萬能工匠並沒有直接提供製造這種汽車的方法,但我們可以即興創作。例如,我們可以把我們做的摩天大樓放在玩具車上,用一些重的東西(比如袋子裡的硬幣)當作砝碼,然後用繩子把玩具車的後軸纏繞起來,讓它被重物拉著轉動。
看看我們製造的這輛自動行駛汽車。它還不夠“聰明”,不能防止自己撞到牆上或從桌子上掉下來。我們能讓它“聰明”地避免這些情況嗎?在這裡,我們說的“聰明”又是什麼意思呢?
馬文與派珀特合作多年,共同探索了優秀的智慧工作模型。他們開始超越傳統的程式設計和計算,尋找更好的部件、組織方式和設計方式來製造“思維的材料”。
他們靈感的來源之一是控制論領域,這是馬文在大學期間鑽研的領域;另一個來源是自主的、略帶智慧的機器龜,它是格雷·沃爾特(Grey Walter)製造的,不僅能適應任何複雜的環境,還能學習條件反射(就像巴甫洛夫的狗)。馬文認識格雷·沃爾特,受其啟發,為兒童設計了基於Logo語言的海龜幾何圖形系統。
馬文和派珀特還發現,大多數有趣的系統都不分層,而是以各構成部分相互依賴的方式交叉連線;此外,過程是比“事物”更重要的系統構成部分。
馬文在寫這篇文章的同時,還在寫一本關於大腦運作的書——《心智社會》。該書的開篇寫道:“要解釋思維,我們必須展示思維是如何由無思維的、遠遠比我們所認為的聰明的事物更小、更簡單的材料構成的……但這些簡單的小粒子是什麼?它們是構成我們思維的‘智慧體’嗎?”
我們製作了一些萬能工匠玩具,其整體能力遠大於其部件能力。我們能不能用萬能工匠玩具,製造出比其構成部件更加聰明的智慧體呢?
為了讓自動行駛車輛更加智慧,我們必須讓它能足夠早地感知將要發生的事情,從而在災難發生前及時做出動作,好讓汽車停下。其中一種實現方法是給車輛安裝“感測器探頭”。它將與車輛前方的障礙物接觸,並與剎車系統連線,當接觸障礙物時,就會剎車。假如把感測器探頭放到車輛後側,我們就會得到一個“碰撞感測器”。當車輛後方被撞時,剎車就會鬆開,並促使車輛啟動和躲開。
當孩子們有了一個大創意,並且發現有足夠的萬能工匠玩具部件來實現這一創意時,他們會非常高興!然而隨著這個創意的實現,新的、更好的創意也會不斷出現,因此,部件總是無法滿足孩子們的需求。
而計算機有許多美妙之處,其中一個尤其美妙之處便是:無論你要實現任何想法,總能在計算機中得到足夠多的部件,並且這些想法必定會帶來更多美妙的想法。在計算機的世界中,除了我們的想象力,幾乎不會有摩擦,也不會有限制。
孩子們使用像萬能工匠這樣的玩具進行建造活動,是一個從智力上真實體現成年人所做事情(此處特指工程和藝術活動中的設計與建造之類的事情)的縮影。在孩子使用萬能工匠建造的活動中,設計的過程並沒有因為他人預先做好特殊部件或預先完成設計(就像現在許多當代“建築玩具”所做的那樣)而消失。大多數預設的目標認為,相對於在學和做的鬥爭中獲得樂趣,成功更加重要,無論這種成功多沒意義。然而,對於偉大的思維及其思維能力的學習,正是我們在與難以學習的想法不斷鬥爭、逐漸領會並最終熟練的過程中發生巨大的思想變化的結果。許多“學習上的困難”是至關重要的,西蒙·派珀特將其稱為“努力的樂趣”(hard fun)。
受到格雷·沃爾特製造的機器龜的啟發,Logo語言世界中誕生了一個絕妙的想法:為孩子製作一個可程式設計的實體海龜。它的“思維”由孩子編寫的程式來提供。這就把格雷·沃爾特巧妙地用一些電線和電子管完成的事情,用一種真實且深刻的方式帶入了孩子的世界。
實體海龜和兒童程式語言的結合,對現實世界和計算機世界都非常有益。人們由此發明並創作了許多有趣的專案,包括透過程式設計告訴海龜如何畫畫和做事,從而賦予海龜更多能力,同時讓孩子在討論中真正學習數學。這些專案透過讓孩子給海龜構建大腦,使海龜開始思考和學習。在專案開展的過程中,孩子在生物學、心理學方面獲得了重要的認識,同時也對自己及自己的思維有了重要的認知。
一個簡單的Logo程式——“條件反射行為的智慧體”,它能讓海龜執行格雷·沃爾特所實現的“漫步探索”行為。海龜會一次又一次地向前移動“一點點”,然後在向左45°和向右45°之間隨機地轉一個角度。
接下來將介紹Logo程式語言的一個派生版本——通用GP的塊拖放式程式語言。它可以很方便地使用任何網頁瀏覽器進行線上訪問。除了Logo語言提供的功能,GP語言還有一些更實用和更現代化的功能。用GP語言完成的程式,它與格雷·沃爾特的“漫步探索”程式相同。
這個程式只能讓海龜達到“能動”的水平,遠達不到“聰明”的水平,海龜會被牆壁或其他障礙所束縛。讓我們給它新增一個並行的“避障”行為程式。為了實現“避障”行為,須使用觸碰感測器檢查是否撞上了什麼東西,如果是,海龜便往回退。
值得注意的是,無論海龜向前還是向後走,總會有一個隨機的轉彎,這有助於海龜最終擺脫障礙物。海龜的軌跡是否讓你想起很久以前的Roomba呢?由此可見,兩段簡單的控制程式可以引發很多事情。
終極萬能工匠
丹尼·希利斯(Danny Hillis)和布萊恩·西爾弗曼是馬文的兩名學生,也是著名的計算機科學家,他們製作的下“井字棋”計算機幾乎展示了萬能工匠玩具構建能力的極限。這款計算機包含的許多想法,是萬能工匠玩具的發明者從未想過的。
萬能工匠玩具的侷限性並非在邏輯上。從邏輯上講,我們可以用它們來構建一臺完整的計算機。其侷限性是在實際使用中體現的。萬能工匠玩具會存在各種各樣的誤差、摩擦和其他一些問題,在這些問題累積一段時間後,計算機將會因部件卡死而無法執行。為了儘可能降低這類問題的影響,第二臺更為簡單的萬能工匠計算機被設計出來。
我們可以看到,在本書收錄的第1篇文章中,馬文為什麼使用萬能工匠玩具來類比孩子透過設計和程式設計以“創造前所未有的東西”的天性和力量。我們創造東西不僅是為了擁有,還是為了學習——首先用我們的手去感覺,用我們的眼睛去看,然後退一步,更加深入地思考,我們的行為從“細微修改”變成了“深思熟慮”(from“tinkering”to“pondering”)。計算機可以讓我們把手工製作和仔細思考的東西以動態的行為體現出來,提升我們思考的質量。從這個意義上講,計算機即“萬能工匠”!
在計算機程式設計和程式設計方面,我們和馬文一樣延續了一個悠久的傳統。這個傳統始於幾何畫板(Sketchpad)的誕生。1962年,伊萬·薩瑟蘭(Ivan Sutherland)發明了幾何畫板這個現代互動式圖形計算程式。薩瑟蘭的顧問便是馬文和克勞德·夏農。
我們可以在幾何畫板中看到今天的個人計算機雛形!就像55年前,我們能夠通過幾何畫板,輕鬆地將一座橋的草圖轉變成可用於計算應力、應變和顯示橋樑外觀的動態模擬程式;今天,我們可以讓孩子畫出動物的神經結構圖,讓它們運作起來,並嘗試模擬動物。幾何畫板是在超級計算機上執行的,這臺超級計算機有足球場那麼大。今天,孩子們的個人膝上型電腦就有更強的計算機處理能力,而這些膝上型電腦只需要幾百美元,並且只有幾何畫板的顯示器那麼大。(現在,足球場大小的計算機就在顯示器的背面,而且速度更快!)
馬文參與了膝上型電腦和兒童計算機發明的工作。1968年,當我在猶他大學讀研究生的時候,在那附近的一個計算機教育會議上,馬文做了一場令人興奮的演講,演講的主要內容是派珀特及其幫助孩子學習偉大思維的思想。那一年的下半年,我在波士頓郊外參觀了派珀特和辛西婭·所羅門的Logo教室,他們所做的一切令我無比驚訝,至今仍然如此!在返回猶他州的飛機上,我畫了這張“適合所有年齡兒童的個人計算機”草圖:“創造性思維的動態媒介”。這一靈感來自幾何畫板、Logo和我們研究團隊的想法。這部分工作後來發展成為我們現在使用的個人計算機、膝上型電腦和平板計算機。
2018年,一些孩子透過編寫工作模型程式讓他們的草圖活動起來,並學習條件反射是如何工作的。他們使用的理念和技術直接來自伊萬·薩瑟蘭、馬文、派珀特、辛西婭和當時的其他先驅。本導讀中的示例闡釋了(尤其是對孩子來說)什麼是計算機真正重要的東西,那就是如何超越對傳統媒體的模仿,產生新的動態方式來表達想法、理解和學習複雜系統、建立科學理論模型,並創造只有他們才能創造的新的藝術和產品。
您認為孩子應該用計算機做什麼呢?
無限的構建工具包——馬文·明斯基(Marvin Minsky)現在的成年人總是太焦慮,尤其焦慮如何才能更多地瞭解計算機。他們想讓所有人都“精通計算機”。“精通”意味著能讀會寫,然而,大多數計算機書籍和課程只是教你如何編寫程式。更糟糕的是,這些書籍或課程只介紹命令、指令、程式語言和程式設計語法規則,幾乎從不舉例子。但真正的語言不僅包括單詞和語法規則,還包括文學——人們使用語言要表達的東西。沒有人能只通過學習語法規則就學會一門語言,我們也往往是從感興趣的故事開始學習語言的。本書將講述一些關於Logo程式語言的好故事。
人們總是試圖以解釋普通事物的方式來解釋計算機,就像透過學習加法表和乘法表來教授算術一樣。因此,他們也從教授如何用計算機進行兩個數字的相加開始來解釋計算機,接下來再教授如何讓計算機把很多數字相加起來。這十分枯燥:一是大多數人已經厭倦了加法,二是這個故事確實很無趣。
我們不能因為老師想讓數字變得有趣而指責他們。讓我們面對現實吧,數字本身並沒有太多特性,這正是數學家如此喜歡它們的原因!數學家發現,沒有任何有趣特質的東西具有神奇的魔力。這聽起來自相矛盾,然而你仔細想想,這正是我們能夠以各種不同的方法使用數字的原因!無論計數物件是花、樹、汽車還是恐龍,為什麼我們對這些不同種類的東西進行計數會得到同一類結果?為什麼我們總是以相同的結果(即一個數字)告終?這就是算術的魔力。它抹去了所有的細節,使你所計數的東西的特質消失得無影無蹤。
計算機程式正好相反。計算機程式創造了前所未有的事物。一些人從中找到了一種全新的體驗:一種自由的感覺,一種可以做任何自己想做的事情的力量。這裡的“事情”不是指“很多事情”,而是“任何事情”。我說的並不是透過像許願那樣的方式來獲得自己想要的,也不是擁有一艘比光速還快的宇宙飛船,或是一臺時光機器。我的意思是,這種體驗就像給一個孩子足夠的積木,讓他建造一個原尺寸的城市模型一樣。孩子仍然需要決定怎麼運用這些積木,但是沒有任何外部的限制,唯一的限制是他們的內心。
我第一次有這樣的經歷是在上學之前。那時還沒有出現任何計算機程式,但已經出現了玩具構建工具包,其中有一種名為“萬能工匠”的玩具。使用萬能工匠玩具做建造只會用到兩種零件——木棍和線軸。線軸就是小木輪,每個木輪的中間有1個孔,邊緣有8個孔。木棍是一些圓形的小棍子,它們長短不一,可以塞進線軸孔裡。這些木棍的末端有小裂縫,所以有彈性,當它們被插進孔裡時,就能被緊緊地卡住。
神奇的是,用線軸和木棍足以做出任何東西。有些線軸的孔被鑽得較大,使穿過線軸的木棍可以轉動。使用線軸和木棍,我們可以製造塔、橋、汽車、推土機、風車和巨大的動物等。我們可以為汽車裝上輪子,為滑輪和齒輪製造軸承,讓它們做更有趣的事情。我們需要自己製作齒輪:只需把8根棍子插進1個線軸即可。儘管這樣做出來的齒輪不完美,轉彎的時候總是咔嗒、咔嗒響,但它們確實能有效運轉。
這些木棍被切成兩種長度:一組長度按照1、2、4和8的比例;另一組則按照長度正好是第一組木棍所組成正方形的對角線長度來進行切割。因此,所有木棍的長度都是2的平方根(√2)的冪。這意味著,你也可以用第一組的木棍作為第二組木棍組成的正方形的對角線。它們可以用來建造堅固的交叉支撐結構。
萬能工匠玩具的秘訣在於,探尋用最少的幾種部件型別構造儘可能多的不同結構。我小時候曾因此出了名。那時,我們全家正在某處遊覽,我在酒店大堂裡用萬能工匠玩具搭建了一座塔。我已經想不起它有多高了,但它一定非常高。這對我來說不過就是拼搭三角形和立方體,然後把它們安放在一起而已。但是,大人們對這麼小的孩子可以建造如此大型的東西感到無比驚訝。我也從中領悟了一些事情:有些成年人就是想不明白,怎麼能做到只要有用不完的木棍和線軸,就能搭建任意的東西呢?就在我寫下本段文字的這一刻,我認識到其中的原因:那些成年人只是不懂得“線軸-木棍”的秘訣而已!
在西蒙·派珀特(Seymour Papert)初創Logo程式語言的時候,我也有過相同的體驗。Logo語言中,有一些和萬能工匠玩具中的木棍類似的東西,不同之處在於,它們是計算機中的指令:一根100個單位長度的小棍叫作“FORWARD 100”。Logo中也有類似線軸的指令,例如“RIGHT:90”,就好像在畫完一根小棍後,緊接著在它的右側與之成直角畫第二根。在Logo語言中,我立刻認出了我的“老朋友”構建玩具的影子。
編寫Logo程式很像用構建工具包搭建房屋,但更加精彩。透過Logo程式設計,我們可以畫出各種東西和結構,還能顯示畫出它們的過程。我們使用文字就能完成這些。我們可以讓做出的東西變形,也可以讓它們相互作用:只需讓程式中一些物件的屬性依賴於其他物件的一些特徵即可。Logo程式也有缺點:我們不能把使用Logo程式製作的汽車帶到戶外,然後讓汽車從一座小山上滾下去。但Logo程式的優點在於:這些透過Logo程式做的汽車,部件永遠不會鬆動、脫落和丟失。Logo程式和構建玩具在最基本的體驗上完全一致:我們都可以透過它們領會如何透過簡單事物的相互作用,創造更加美妙的事物。
Logo程式語言在多年以前就已經出現。本書的幾位作者在孩童時期就用它發現新的事物。我現在非常高興能寫這篇文章,回想這是一次多麼偉大的冒險,而現在旅程才剛剛開始。
另外,還有一些不錯的構建玩具,比如裝配模型(Erector)和麥卡諾。裝配模型的套裝非常棒。它有很多種部件,最基本的部件是多孔金屬片和不同型別的角度支架。套裝中有許多小螺絲釘和螺母可以把它們連線在一起;還有長長的鋼軸,其大小與金屬片上的孔剛好匹配,可以穿過小孔自由轉動。金屬軸上可以安裝齒輪和滑輪,便於製作複雜的、實用的東西。
英國製造的麥卡諾模型(Meccano Model)更好。它的黃銅齒輪齧合得更加平滑。在我年紀大一點的時候,我使用麥卡諾的10號套裝,按照麻省理工學院第一個計算機研究實驗室在20世紀40年代提出的思路,構建了一個早期的現代遙控機器人。說到製造計算機,丹尼·希利斯(Danny Hillis)和布萊恩·西爾弗曼曾經用萬能工匠玩具的部件製造了一臺真正的計算機。這臺計算機可以計算“井字棋”遊戲的走法。它是用線軸、木棍及繩子建造而成的,還用了一些小銅釘將木棍釘上,以防止木棍脫落。它確實可以工作,目前被收藏在某個博物館裡。這臺計算機使用了大約100套萬能工匠玩具,體積非常大,比一間大房間還要大。
20世紀60年代,構建工具型玩具的黃金時代結束。大多數新玩具都改為使用粗糙、劣質的塑膠部件,它們十分笨重,無法用來搭建精細的機械。麥卡諾破產了,這讓我十分難過。我們現在還可以買到裝配模型玩具,但購買時需要向賣家說明購買的是金屬材料的版本。如今最受歡迎的拼搭構建玩具似乎是樂高積木,這是一種可以拼插在一起的塑膠小磚塊。樂高積木其實和Logo程式很相似,只不過在樂高積木中,只能使用“RIGHT:90”(右轉90°)這樣的指令。一開始,這對孩子來說可能更容易上手,但它只能構建一個不夠有趣的世界,不能給人一種能夠建造“任何東西”的感覺。另一種新興的構建工具型玩具是“慧魚”(Fischertechnik),慧魚模型有很好的、堅固的部件和緊韌體。它製作精良,工程師也會使用它。但是,因為它有很多種不同型別的部件,所以並不能像Logo語言那樣給人以“我能構建出自己的想象王國”那樣的感覺。
隨著構建工具型玩具漸漸過時,給聰明孩子們玩耍的許多事物也逐漸過時了。玩具汽車變得難以拆解,收音機更是如此。除了把無用的塑膠玩具拼裝在一起,孩子們再也學不會構造什麼東西了。然而,似乎並沒有人注意到這一點,因為在美國社會,許多孩子開始沉迷於體育運動、毒品和電視節目。或許計算機能提供幫助我們迴歸正途的方法。
孩子們在使用實物型構建工具包建造了一個東西之後,還得把它重新拆開,否則,剩下的部件就不夠用來完成下一個專案了。但是在用程式進行構造時,構造者可以把構造好的程式儲存在自己的磁碟上,以後再把它們取出來,用它們繼續構建更大的程式。現在你可能會擔心計算機的儲存不夠用,但這對未來將不再是問題,因為儲存的成本將快速降低。更重要的是,孩子可以和朋友彼此分享程式,在分享之後,自己的程式仍然屬於自己。即便是古代的帝王,也難以想象能擁有如此巨大的財富。不過至今,大部分的成年人還沒有合適的詞彙來闡述這樣的事情,或者說,他們沒有合適的概念能幫助自己思考這樣的事情。當孩子談論“表示”“模擬”和“遞迴過程”時,許多成年人完全不知所云。對此,讓我們寬容以待吧。成年人自己的問題已經夠多了。
你如果想要了解計算機是什麼、可以做什麼,那麼不必去學習別人說的那些“位”“位元組”“二進位制決策”等內容。我並不是說這些內容不對。計算機確實大部分是由小型的雙向開關構成的。但是,如果誰說知道了這些就能懂得計算機能做什麼,那就大錯特錯了。沒錯,就像房子是用木棍和石頭建成的,但這並沒有告知你建築結構的知識;動物主要由氫、碳、氧和氮這些化學元素組成,這同樣不能說清楚其中的生物學知識。
曾有一個火星生物與我“思維連線”,它想知道文學是什麼。我告訴它我們怎樣把單詞組合成句子,而單詞透過字母組合而成,以及我們在單詞和單詞之間留出稍大的空格以表示單詞的開始和結束。“啊哈,”它說,“那字母呢?”我解釋說:“所需要的一切都是小點,只要擁有足夠多的小點,你就能製造任何東西。”之後,它又詢問我老虎是什麼。我解釋說,老虎主要由氫和氧組成。“啊哈,”它說,“我想知道它們為什麼燃燒得如此明亮。”最近一次連線,它說它一定要了解計算機。我給它講了所有關於位元和二進位制決策的內容。“啊哈,”它說,“我懂了。”
計算機程式即社會
要理解計算的作用,你需要了解另外兩個事實。第一,編寫大型計算機程式就是用較小的過程構建更大的過程。你也許會深信不疑地說,就像雕刻家用粘在一起的黏土顆粒做出大型的雕塑一樣。這種說法和用“位”與“位元組”的方法解釋計算機一樣,犯了相同的錯誤。從來沒有哪一位雕刻家像這樣思考,科學家、程式設計師也不會。同理,建築師首先考慮的是形狀和形式,然後是牆壁和地板,最後才是如何製作。
第二,在構建活動中,從什麼型別的部件開始並不重要!除了使用Logo程式語言的人,大多數人都沒有真正理解這一點。哪怕我們從不同型別的計算機開始,它們內部有不同型別的部件,在絕大多數情況下,它們仍可以在頂層層面完成相同的事情。這就像我們可以使用木棒或金屬梁,採用同樣的方法來建造一座大風車一樣。當從近處仔細觀察風車時,你會覺得每個部件都十分不同。但從頂層層面看,這兩個風車都有一個底座、一座塔身和一套槳葉。計算機也同樣如此!
任何計算機都可以透過程式設計實現其他計算機可以完成的事情,或者完成其他型別的“社會過程”(Society of Processes)所完成的事情。
大多數人覺得這難以置信。為什麼計算機能做什麼並不依賴於它的構成呢?這是大約在50年前,英國科學家艾倫·圖靈(Alan Turing)所揭示的規律。他指出,就像雕刻家不必關心黏土顆粒的形狀一樣,程式設計師也不必關心計算機內部的各個微小部件是如何工作的。舉個例子,Logo程式從簡單的“對-錯”選擇開始,每次只判斷一件事務。但接下來,我們可以編寫另一個Logo程式,讓它從一系列事務列表中選擇一件事務來判斷,並且這個列表可以包含成千上萬的事務!
艾倫·圖靈的理論附有長篇的解釋,我們在任何一本不錯的計算機理論書中都可以找到其詳細論述。這個理論的總體思路如上文所述。圖靈在年輕時便認識到,計算機不僅依賴於構成部分的狀態,還依賴於改變狀態所遵循的規律。此外,各部件是如何製造的並不重要。圖靈提出“程式是什麼”這個問題,並意識到程式可以被看作狀態的集合,或者更確切地說,程式可以被看作計算機如何改變其狀態的預設途徑。
接下來,圖靈思考,假設你有計算機X,同時又希望擁有一臺與之不同的計算機Y。那麼為什麼不為X編寫一個程式,來重新排列它的狀態,讓X和Y在行為與狀態上相似呢?如果這樣做了,那麼從外部看,X的行為就與Y的行為一模一樣。對此,程式設計師會說,這是X在“模擬”Y。當然,這種模擬需要一定的條件。X必須有足夠的儲存能力來儲存Y的描述,這種“模擬”才能正常工作。如果X和Y非常不同,那麼模擬程式可能執行得非常緩慢。此外,圖靈還指出,各種計算機都可以透過程式設計來模擬任何其他型別的計算機。這就是為什麼我們可以編寫一類特殊的程式,使得相同的Logo程式能夠在全世界各種型別的計算機上執行。
實際上,每個雅達利Logo系統都包含這樣一套程式。這套程式是布萊恩·西爾弗曼與他的朋友編寫的。很抱歉,你看不懂這套程式。因為它不是用Logo語言寫的,而是用一種深藏於機器內部的機器語言寫的。但它確實存在,只是隱藏在看不見的地方,它可以讓普通計算機模擬Logo計算機。令人驚訝的是,早在50年前,也就是1936年,艾倫·圖靈就指出了其實現機制,而那時計算機還遠未發明呢!他是怎樣做到的?我想,他一定在自己的腦海裡進行了模擬。
我的神奇經歷(首先是使用構建工具包,之後使用類似Logo這樣的程式語言)中有一種“普遍存在”的規律:大事物往往並不完全依賴於其內部的微小部件。
構成大事物的這些部分之間如何相互影響,遠比它們自身是什麼更加重要。這也是為什麼無論錢是紙做的,還是金子做的,或者無論房子是木板做的,還是磚砌的,都沒有太大關係。
類似地,假如外星人具有金色的骨頭,而不是像人類一樣具有鈣質骨頭,那也沒什麼大不了的。許多人錯過了一些重要的東西,不能領會簡單的事物可以發展並構成整個世界。他們因為看不到各種不同事物是如何由少數幾種原子構建而成的,所以很難理解科學。他們因為看不到(如鳥類、蜜蜂和熊等)不同的生物如何從簡單、無生命的化學物質,透過數萬億個過程進化而來,所以也很難理解進化。當然,其中的竅門在於,將事物發展並構成世界的過程分為許多個步驟來實現,每一個步驟又採用同樣的方法,使用除錯過的、規模更小的過程來實現。
為什麼老師不告訴我們計算機有這麼強大的能力呢?因為大多數成年人依然相信,計算機只能做大規模、快速、機械化但實用的算術計算。於是,那些數十億美元市值的企業,用枯燥的實際應用,擠走了我們構建巨型思維機器的夢想。
本文節選自:《創造性思維》一書