有時,程式壓縮會成為一種帶有競爭意味的事情,好像是用來證明自己在控制系統方面能力的比賽,看誰能挖掘出刪去一兩條指令的美妙捷徑,或者更好的是,重新思考整個問題並設計出可以去掉一整塊指令的新演算法。(演算法是一種具體的流程,我們可以用它來解決複雜的計算機問題,它是一種數學上的萬能鑰匙。)實現程式縮減最為明顯的方式是不按常理思考,從之前從未有人想到但仔細想來卻完全合理的非傳統角度來處理問題。那些能夠應用這種奇妙技術的人,身體裡一定流淌著藝術創作的血液,這種技術就像魔術般神奇而充滿想象,於是人們可以擺脫那些陳腐觀點的束縛,創造出完全超乎人們想象的新演算法。
十進位制列印程式就是如此。這是一個子例程(是程式中的一個小程式,你可以在某些情況下將其整合至許多不同的程式中),用來把計算機生成的二進位制數字轉換成常規的十進位制數字。用桑德斯的話來說,這個問題「在程式設計中不值一提——如果你可以編寫能夠正常工作的十進位制列印例程,只能說明你對計算機有了一些瞭解,勉強稱得上是程式設計師」。而如果你編寫出了非常棒的十進位制列印例程,那麼你也許可以稱自己為駭客。十進位制列印例程的終極壓縮版則不僅僅帶有競爭的意味,它更是駭客心目中的聖盃。
各個版本的十進位制列印例程已經出現了好幾個月了。如果你故意裝作不知道,或者你真的是一個笨蛋(不折不扣的「失敗者」),那麼你可能要用100條指令讓計算機將機器語言轉換為十進位制。但是,任何級別的駭客都會用更少的指令來實現,最終,通過充分利用各種程式、在各個地方壓縮指令,這個例程會縮減到50條左右的指令。
在這之後,駭客們越來越苛求這種最佳化。他們會花費很多時間來尋求一種用更少的程式碼來實現同一個功能的途徑。這不僅僅是競賽了,它是一種追求。不管付出了多少努力,似乎沒有人能夠突破50行的瓶頸。問題開始產生了,用更少的程式碼實現這個功能是否真的可行呢?是不是程式到一個點之後就無法再繼續壓縮了呢?
深受這一難題困擾的包括一個名叫簡森的高個小夥子,他是來自緬因州的駭客,沉默寡言,可以安靜地坐在klugeroom中,拿著列印材料寫寫畫畫。簡森總是尋找各種方式來提高自己程式的執行速度並壓縮佔用空間——他的程式碼完全是混合著布林和算術函式的奇怪序列組合,通常可以在同一個18位「字」的不同部分執行若干個不同的計算。這令人吃驚,就像是神奇的特技。
在簡森出現之前,駭客們曾普遍認為,十進位制列印例程的唯一邏輯演算法是讓計算機重複進行減法,並使用一個10的乘方表將數字儲存在適當的數字列中。而簡森則發現,10的乘方表其實並不是必需的。他想出了一個演算法,可以按倒序轉換數字,但能夠通過一些數字技巧將它們按正確的順序列印出來。這裡麵包含了複雜的數學論證,直到簡森將程式公佈在佈告板上,其他駭客才明白其中的道理。簡森這一舉動是在告訴大家他已經將十進位制列印例程壓縮至極致了——46條指令。人們會張大嘴巴,目不轉睛地看著這段程式碼。瑪吉·桑德斯回憶說,駭客們在之後的幾天內都異常沉默。
「我們知道這是終點了,」鮑勃·桑德斯之後說道,「這就是涅槃。」
計算機可以讓你的生活更美好。
這是駭客的信念,他們的行為微妙地體現出了這一信念。駭客很少試圖將「計算機具有神奇力量」這種觀點強加給外行人。但是,這個信念主導了tx-0駭客以及在他們之後各代駭客的日常行為。
計算機顯然改變了他們的生活,豐富了他們的生活,並且成為他們生活的重心,令他們的生活充滿冒險。計算機讓他們主宰了自己的一部分命運。彼得·薩姆森後來說:「我們做駭客有25%~30%是因為我們想這麼做,因為這是我們能做且能做好的事情,而有60%是為了給我們的子孫後代留下一些在我們離開後依然可以獨立存在的東西。這就是程式設計的美妙之處,它有著神奇的吸引力……一旦你修復了某個(計算機或程式的)行為問題,它就會永遠處於修復完成的狀態,這恰恰反映出了你的意思。」
就像阿拉丁神燈,你可以讓它聽從你的召喚。
毫無疑問,每個人都可以體驗這種能量並從中受益。毫無疑問,每個人都可以生活在構建於駭客道德之上的世界中並從中受益。這是駭客絕對的信念,他們堅定地擴充套件了傳統觀點對於計算機可以做什麼和應該做什麼的看法——引導整個世界以一種新的方式看待計算機並與其互動。
這並不容易實現。即使是在mit這樣的高等學府中,仍然會有一些教授認為對計算機近乎瘋狂的迷戀是愚蠢的,甚至是精神錯亂的。tmrc的駭客鮑勃·華格納曾經不得不向一位工程教授解釋計算機是何方神聖。華格納還更為生動地體驗到了計算機與反計算機之間的衝突,他修了一門叫做「數值分析」的課程,授課教授要求每位學生使用咔咔作響的笨重機電計算器來做作業。考托克也上了這門課程,他們兩個一想到要使用這種技術含量極低的機器就非常不情願。「我們為什麼那樣做?」他們問道,「我們不是有這臺計算機嗎?」
於是,華格納開始編寫可以模擬計算器行為的計算機程式。這種想法挺荒謬的。對某些人來說,這是在濫用寶貴的機器時間。按照人們對計算機的一般看法,計算機的時間非常珍貴,所以應該只嘗試那些能夠最大限度地充分利用計算機的事情,這些事情如果不用計算機實現,則會讓滿屋子的數學家盲目地計算好多天。駭客們則不這麼認為:任何看起來有趣或好玩的東西都可以是計算的來源,並且使用互動式計算機,沒有人嚴密監視你並要求你提供具體專案的許可,你可以按照這個信念行動。華格納用了兩三個月的時間研究在一臺沒有簡單方法可以執行基本乘法的機器上進行浮點型計算的各個複雜方面(程式要知道在哪裡放置小數點,這是必須的),然後編寫了3000行程式碼來實現這種功能。他讓這臺超級昂貴的計算機執行僅值其千分之一價格的計算器的功能。為了紀念這個具有諷刺意味的程式,他稱其為「昂貴的桌面計算器」,並自豪地用這個程式完成了他的課堂作業。
他的分數是:零分。「你用了計算機!」教授這麼跟他說。「這不可能是正確的。」
華格納甚至懶得去解釋。他怎麼可能讓他的老師明白計算機正在把曾經不可能的事情轉變為現實呢?另一個駭客甚至編寫了一個叫做「昂貴的打字機」的程式,將tx-0變成了可以用來編寫文本的機器,它能夠以字串的形式處理文字,並在電傳打字機上將其列印出來。你能想象到教授會接受在計算機上寫的課堂作業報告嗎?那位教授(事實上,還有那些沒有沉浸在這未知的人機互動世界裡的人)怎麼可能明白華格納和他的駭客夥伴們天天使用這臺計算機來模擬(用華格納的話來說)「人們幾乎無法想象的奇怪事情」?這位教授遲早會明白,每個人也都會明白,由計算機開啟的世界是沒有邊界的。
如果有人還需要進一步的證明,你可以引用考托克在計算中心正在做的專案:國際象棋程式。大鬍子人工智慧教授約翰·麥卡錫大叔已在ibm704上開始了這個研究,他在駭客學生當中頗為出名。儘管考托克和幫助他完成該程式的其他幾個駭客非常反對僅僅把ibm當做一臺批處理機器來用,但他們設法獲取了夜晚的一些時間,來互動使用ibm機器,並與704的系統程式設計師們展開了一場非正式的戰鬥,看哪組人會是計算機時間的最大消耗者。兩組人難分高下,這給穿著白襯衫打著黑領帶的704工作人員留下了足夠深刻的印象,他們真的讓考托克及其小組摸到了704的按鍵和開關:要知道,能夠這樣親密接觸ibm機器的人並不多。
在實現國際象棋程式的過程中,考托克所扮演的角色可以代表著駭客在人工智慧領域將要扮演的角色:像麥卡錫或他的同事馬文·明斯基這樣的重要角色會啟動一個專案,或者大聲問自己某些事情是否可能實現,然後如果對這些事情感興趣,駭客們會著手實現。
這個國際象棋程式最開始是使用最早的一種計算機語言fortran編寫的。計算機語言比組合語言看起來更像英文,也更容易編寫,並且可以用更少的指令實現更多的功能。但是,在像fortran之類的計算機語言中,每下達一條指令,計算機必須首先將該命令轉換成自己的二進位制語言。這個過程由一個叫做「編譯器」的程式來實現,而編譯器要完成工作也需花費時間,而且也會佔用計算機寶貴的空間。實際上,使用計算機語言,你離與計算機進行直接互動又遠了一步,駭客們通常更喜歡組合語言,他們稱之為「機器」語言,他們不喜歡如fortran一類不夠優雅的「更高階」的語言。
但是考托克意識到,由於國際象棋程式中需要處理大量的數字,因此部分程式不得不由fortran完成,而另一部分則可用匯編語言實現。他們一部分一部分地實現它,嘗試了「移動生成器」、基本資料結構以及所有型別的創新策略演算法。在向計算機灌輸了移動每個棋子的規則後,他們為其提供了一些引數,用來計算棋子位置、考慮各種走法並且這種走法要對自己最為有利。考托克幾年來一直在堅持完善這個程式,隨著mit不斷地升級ibm計算機,這個程式也在不斷發展。在一個難忘的夜晚,幾個駭客圍坐在一起,看著程式在真實的比賽中走出前幾步。它的開局相當不錯,但是大約走了八步左右,計算機便陷入了真正的麻煩中,它要被將死了。所有人都在好奇計算機將作何反應。它用了一些時間(在場的所有人都知道,在這些停頓中,計算機實際上是在「思考」,計算機的思考過程就是機械地考慮各種走法、進行評估、排除大部分走法並使用預定義的一套引數來最終做出決定)。最後,計算機將兵向前移動了兩格,不合規則地跳過了另一個棋子。這是bug!但也是非常聰明的一招——這讓計算機走出了死局。也許程式正在計算能夠征服國際象棋的新演算法呢!
在其他的大學裡,教授們都公開宣稱,計算機在國際象棋比賽中永遠下不過人類。但駭客們則知道得更多。他們是那些賦予計算機超常能力的人。同時,通過與計算機進行有效且有意義的交流,駭客將會是最主要的受益者。
但他們不會是唯一的受益者。在智慧的自動化世界裡,使用會思考的計算機能夠讓每個人獲益。而且,如果所有人都像遵循駭客道德的駭客那樣懷著強烈的好奇心去探索世界,同樣渴望平等,歡迎創新,無私地分享成果,渴望進步和創造,那麼每個人從中獲得的好處不會更多嗎?如果我們都能在不帶偏見的基礎上接受其他人,就像計算機接受給電傳打字機輸入程式碼的任何人一樣,那麼每個人的受益不也會更多嗎?如果我們向計算機學習建立完美系統的方法,並且開始在人類體系中模仿這種完美製度,我們難道不會從中受益嗎?如果每個與計算機進行互動的人能夠像駭客一樣具有同樣單純、有效且充滿創造性的動力,那麼駭客道德也許可以像慈善事業一樣在社會中傳播,而計算機將確實能夠讓世界變得更美好。
在mit的院牆內,人們擁有實現這個夢想的自由——駭客的夢想。沒有人敢設想這個夢想會廣泛傳播。相反,就在mit,人們開始著手打造駭客的世外桃源,這可能是永遠也無法複製的天堂。