在我們2001年著手開發Processing時,我們的目標是將在麻省理工學院產生的想法與科技帶到更廣闊的世界。其中一個想法是融合設計的視覺原理與電腦科學思考系統的方式。另外,我們也希望分享一種寫程式的方法,在過程中透過撰寫程式理解事物,而此一方法我們稱為「程式碼速寫」(sketching with code)。第三個想法是從我們教導設計師寫程式的過程中所學到的,也就是如何向工作坊及課堂以外的人們分享這些知識。我們希望盡可能地將它推廣出去。
這一切都透過我們特地為圖像製作、動畫編排,以及互動作品所創造的一套程式工具而實現。多年來,我們不斷完善這套以程式碼進行視覺設計的元件,這項工作並非從零開始,而是奠基於此領域中的前輩過去所提出的想法與程式碼。
Processing源起於麻省理工學院媒體實驗室(MIT Media Lab),最早可追溯至視覺語言工作坊(Visual Language Workshop,簡稱VLW),該工作坊於1975年創立,並於1985至1994年間成為媒體實驗室的創始研究小組。研究小組的主持人穆麗葉.庫珀(Muriel COOPER,1925-1994) 曾在麻省理工學院擔任圖像設計師,並任職於出版辦公室,之後成為麻省理工學院出版社的創始藝術總監。VLW專注於以螢幕為載體的出版與資訊空間的典型設計,而其最為人所稱道的公開展示之一是《資訊景觀》(Information Landscapes),內容呈現出了領先其所處時代的3D動畫互動排版設計。正是VLW的研究與參與者們,深深地影響了Processing的發展。
Processing的誕生直接源自於前田約翰(John MAEDA)於1996年在媒體實驗室所創立的美學與運算小組(Aesthetics and Computation Group,簡稱ACG)。前田在媒體實驗室的研究持續整合視覺設計的探索與新興的軟體科技。他所招收的學生亦探討與VLW類似的主題,並持續研究用於創建視覺媒體的程式設計工具。其中,David SMALL一開始在VLW進行研究,爾後在ACG取得了博士學位。這也為他的研究與知識建構了某種延續性。
ACG最常使用C++程式語言和一套名為ACU的圖像工具來撰寫程式。後者主要是由班.弗萊(Ben FRY)開發,Tom WHITE與Jared SCHIFFMAN也為此貢獻了相當的心力。
在我們開始於媒體實驗室投入研究的1990年代末,ACU只在視算科技公司(Silicon Graphics, Inc.)的Octane與O2工作站運作,這些都是當時價值數萬美元的電腦。到了2000年,只要價值數百美金、配備圖像處理硬體的個人電腦,就能夠使用ACU。值此世紀之交,這種硬體負擔能力的改變,使這類由VLW及ACG所創造的作品,有可能在學院與企業實驗室之外實現。
ACG的網站(http://acg.media.mit.edu/)目前仍然在線上,並有少數私人備份。一部分作品收錄於前田在2004年由Thames & Hudson出版社出版的著作《創意程式碼:美學+運算》(Creative Code: Aesthetics + Computation)當中。以現在的標準來看,前田鼓勵我們製作的ACG概念影片是相對低解析度的影片,但依然如實呈現了作品的動態效果,而ACG的碩博士論文多半也都還能在線上瀏覽。
前田在ACG內開發出「數字設計」(Design By Numbers,簡稱DBN)程式設計平台。麻省理工學院出版社為這項計畫所出版製作的書籍和軟體於1999年發行。歷經首次發行後,前田引介我們加入這項計畫,協助維護與擴充內容。Processing在許多方面都是以DBN為模型,同樣是把程式語言跟編輯器整合在一起。DBN是一個最小的系統,畫布只有100 × 100像素,而且只能使用灰度值呈現――意即沒有色彩。這些語法規則,以及令人感到自在的程式碼元件例如紙和筆,都使得DBN相當容易上手。
運用DBN進行教學的經驗,形塑了我們日後所開發的Processing。我們第一次舉辦的活動是1999年8月25日於美國平面設計協會(AIGA)全國總部的一場工作坊。這場「運算圖示」工作坊是針對非程式設計背景、甚至缺乏電腦操作經驗的人所開設。前田主持這場工作坊,Tom WHITE也提供協助。之後,前田要求我們與Elise CO在羅德島設計學院的系列工作坊進行授課。當時為了這些工作坊,我們特地設計並建構了DBN的教材軟體,這是一系列Perl的腳本,讓教師能夠製作練習題,並讓學生直接將作業上傳到網路伺服器中。
這段經歷燃起我們開發Processing的雄心壯志。我們從擴充DBN,將其內容納入色彩與其他特色著手,但我們很快地便理解到這些限制其實是該平台的本質,並且不應該被擴充。我們想要創造一個像DBN那樣容易上手的系統,同時需要一座橋梁來架構出更具企圖的成果。我們想讓使用者能創作具有色彩的大尺寸3D圖像,甚至還有更多其他功能。簡單的Processing草圖幾乎與DBN的草圖無異,但Processing的規模更大――它的門檻低卻同時擴展了可能性。這種可能性的由來就類似於我們用ACU撰寫的C++程式,部分原因是出於Java程式語言的其餘部分和函式庫(Libraries)已經可供使用。
我們經由三部分來打造Processing:語言、環境與社群。每一環節都不可或缺,這項計畫的特色就是三者間的交互作用。
Processing的程式被稱為「草圖」(sketch)。這不僅是命名法上的變化,更是一種截然不同的撰寫程式方法。較為傳統的方式是在第一行程式碼之前,就為軟體的整體規劃找到解決方案。這種方法在有確切定義的領域裡可以運作得很好,但若要用於探索與發明,它就會提前扼殺其他的可能性。透過程式碼製作草圖,可以探索意料之外的途徑,獨特的結果往往會在過程中出現。
Processing並非從零開始創建的語言,它是我們的元件與Java程式語言的混合體。用一個最簡單的例子說明,以下是標準的「Hello World!」Java程式語法:
public class HelloWorld {
public static void main(String[] args) {
// Prints “Hello, World” to the terminal window.
System.out.println(“Hello, World”);
}
}
這個程式將寫入文字檔的內容包含在兩層附加細節中,這對大型程式來說非常重要,但對簡單程式而言卻會造成混淆。以下是使用Processing達成同樣結果的寫法:
print(“Hello World!”);
然而,「Hello World!」這個例子與Processing的精髓――用程式碼創造圖像――並無太大關聯。以下是更常見的第一個Processing草圖案例:
line(10, 20, 90, 80);
這個程式碼指令是在螢幕上從座標(10, 20)到(90, 80)之間畫一條線。另一個更有趣的Processing草圖,是從500 × 500像素的畫布中心畫一條線到螢幕游標的位置。
void setup() {
size(500, 500);
}
void draw() {
line(width/2, height/2, mouseX, mouseY);
}
由於Processing的目的是創作圖像,因此它使用的語言包含了專門用於處理形式、顏色、幾何,以及圖像等元素。同時,任何可用於Java的程式碼都可用於Processing。我們的主要想法是,不僅要讓製作簡單的視覺物件變得容易,也要讓較有經驗的程式設計師能夠使用同樣的語言來處理比較複雜的事情。
「環境」是指讓使用者在其中撰寫草圖的軟體應用程式。Processing的環境稱為「Processing開發環境」(Processing Development Environment;PDE)。目前供Processing 3使用的開發環境只有幾個按鈕,用於運作與停止速寫,以及啟動與關閉除錯模式(早期的Processing開發環境還有一些開啟、創造、儲存,以及匯出草圖的按鈕)。Processing開發環境的主要用意是讓撰寫草圖變得又快又容易,其次是把Processing開發環境當成素描簿來使用,亦即一個可以儲存草圖,又能提供簡易管道來作為開啟與執行草圖的地方。Processing開發環境也能夠開啟與執行範例草圖,並且可以很容易連結到參照(Reference)的頁面。
Processing開發環境是為了初學者創建的,並非每個人都使用Processing開發環境來撰寫草圖。有些人會在其他程式設計環境(例如Eclipse)或其他文字編輯器(例如Sublime Text 2)當中使用Processing。Processing開發環境自2001年以來不斷發展,已演進至邁出重要一步的Processing 3 PDE。
「社群」是指撰寫Processing草圖並彼此分享作品與程式碼的一群人。我們從未寫過客製軟體來支持社群參與,而是使用既有論壇軟體,此外,不同的社群成員也會創造出新的機會。Processing的早期版本將草圖匯出至Java Applets,這在當時是透過網路分享作品的一種簡易方式。在預設的情況下,匯出的草圖包含一個原始碼連結,以及附註一句「Built with Processing」的網頁。這句話是一個簡單的檢索詞,讓人們得以探索其他人所創作的成果,而網頁所包含的原始碼則讓人們知道草圖是如何被創作出來的。雖然使用者可以移除原始碼連結,但我們仍希望將共享作為預設的狀態。很多時候,我們是透過觀看他人的程式碼才學會如何寫程式,因此,我們希望這種開放性成為這項計畫的核心。
2002年8月2日,我們推出了第一個名為「Discourse」的Processing論壇。在介紹單元中的第一則貼文是由REAS、adrien、re|form|at、eviltyler、tomek、ik0、fdb、 Josh NIMOY、Mike DAVIS、Takachin、edwardgeorge、riboflavin、jes,以及Alex所撰寫。在最初幾年,Discourse是一個活力洋溢的空間,也是一個人們共享互助的地方。我們一同探索,而那些懂得較多的人也慷慨地提供建議。這個Alpha版論壇於2005年結束,並由Beta版論壇所取代,而後者也在2010年結束,由「論壇1.0」所取代。上述的前期論壇都有線上存檔:Alpha Forum、Beta Forum、1.0 Forum,以及2.0 Forum。2018年5月,我們再次以「Discourse」為名,推出了第五個論壇。
秉持社群的核心精神,每個人都創造了其他學習與分享的機會。運作時間最長、成果最突出的是Sinan ASCIOGLU的「OpenProcessing」,這個社群平台近來推出一個與p5.js草圖相容的新介面。早期的倡議包括「自由藝術機構」(Free Art Bureau)在世界各城市建立使用者團體的「Processing Cities」行動、Tom CARDEN和Karsten SCHMIDT的「Processing Hacks wiki」,以及Tom CARDEN的「blog aggregator」。早期社群媒體網站透過在Del.ici.ous與Flickr等網站建立標籤的方式,創造出Processing社群與能量。OpenProcessing持續茁壯,但其他倡議行動則隨著網路與社群的變遷而改變。
Processing原始碼已在網路上開放多年,首先分享在SourceForge,而後是在Google Code上,而我們在2013年將原始碼移到GitHub後,程式碼撰寫的質與量大幅提高,建立起一種全新的Processing社群類型。GitHub讓程式碼貢獻者的整合與細節討論變得更為容易。它也有助於這個逐漸擴大的開發團隊進行溝通與追蹤軟體的變遷。Processing核心軟體的完整程式碼貢獻名單呈現了這項進行中的工作。
其中,對Processing社群最有貢獻的當屬函式庫。超過100個Processing函式庫將這套軟體由核心向外進行各方延伸,包含從數據、模擬到影片和視覺等類別,函式庫都是與Processing語言整合的獨立軟體。大多數函式庫是由個別社群成員所開發,而原始碼和範例則可以供所有人使用與學習。
Processing發軔於2001年春天一本速寫簿上的若干筆記。同年秋天,弗萊在日本的武藏野美術大學帶領了第一個Processing工作坊。這套軟體的Pre-alpha版「Processing 0005」是最精簡的版本,而這套語言的初期版本已被整合到一個備用的Processing開發環境當中。由於瑞斯當時在義大利的伊夫雷亞互動設計學院任教,所以許多早期的工作坊都在歐洲進行。Processing透過這些工作坊迅速發展,而程式語言則在Alpha版釋出期間經常性的更新。很感激這些機構讓我們有機會與學生們共度這些時光。
這項計畫早期稱為「Proce55ing」,網站是www.proce55ing.net。起初這項計畫的名稱不斷地在改變,包括「Pr0c3ssing」、「Pro35sing」,以及「Pr0cess1ng」等。2004年,我們將計畫名稱改為「Processing」,將網站定址www.processing.org,以便觸及更廣泛的受眾。大致上,不喜歡這個計畫名稱的人對它的尖銳評論從未中斷,因為這個名稱讓人們無法搜尋到計畫相關資料而受挫。我們之所以把它命名為Processing,是想突顯「過程」(process)甚於最終結果,並且彰顯軟體的活躍狀態。它一直在運作,是一種即時的媒體。
最初幾年,我們將Processing分享給在網站上註冊的人。當時,我們還在努力與麻省理工學院合作解決軟體協議的問題,而軟體仍為相當粗略的版本。我們的第一個網站www.proce55ing.net於2001年10月20日上線,包含有一套範例、一份參照,以及下列文字:
Pr()ce55ing是以Java撰寫而成,讓使用者得以在一組精心設計的語法規則下創建Java應用程式與Java Applet。它使用2D/3D Java算繪應用程式介面(API),既有PostScript風格的2D成像,也有OpenGL運算的3D圖像的視覺效果。
在發表這套軟體的1.0版之前,我們是依照順序來命名發表的各版本,而非使用較傳統的軟體版本編號(例如1.0、2.0等)。舉例而言,Processing 0069是第69個版本。我們在改變版本編號方式後,有一段時間是同時沿用兩種命名方式,例如Processing 1.5.1就是第197版本。Revision 0069是最後一個預覽版,Revision 00161是最後一個測試版,release 1.0也稱為第162版本。我們可從GitHub線上平台查詢Processing每個版本的日期與附註。
2007年,我們出版了 Processing的教科書,書名為《Processing:給視覺設計師與藝術家的程式設計指南》(Processing: A Programming Handbook for Visual Designers and Artists)。這本由麻省理工學院出版社出版的教科書,使我們對於Processing如何應用至大學課堂的願景變得明確。它是我們多年來在加州大學洛杉磯分校與卡內基美隆大學授課經驗的結晶。我們是在視覺藝術與科技的實驗史脈絡下討論這套軟體。它包含對動畫、表演,以及平面設計等領域的專業人士訪談。該書的延伸章節則更擴大到聲音、電腦視覺、電子學,以及其他主題。除了Daniel SHIFFMAN的《學習Processing 程式語言》(Learning Processing)與Ira GREENBERG的《Processing:創意程式設計與運算藝術》(Processing: Creative Coding and Computational Art)之外,這本書也是第一批關於Processing的著作,共同擴展了這套軟體在學術界的應用範圍。而在Processing的網站上有一份更完整的書單。隨著時間的推移,我們已將精力從書籍轉移到線上指導與影片教學。
隨著使用這套軟體的人數持續增加,我們與原始社群的直接連結變得相當薄弱,畢竟這種連結只是過渡時期的一部分,而Processing社群已變成一系列圍繞著學校、城市、社群媒體平台,或根據主題所形成、更為分散的團體。起初,這套軟體和它的使用者有著相當密切的連結,但隨著時間過去,它已經變成一種人們即使使用,也未必了解其原始脈絡的軟體。這是艱難而緩慢的轉變,但卻提供了新的機會,讓更多人參與,並將這套軟體本身及其核心理念散播出去。隨著這個社群不斷成長,想要確定人們如何與為何使用這套軟體已變得越來越困難,因此,找尋開發的焦點也變得更不容易。近來,這套軟體已開始頻繁地使用在高中課堂,主要用於數學與科學課程。大學也持續將這套軟體整合到課程中,並被廣泛運用到電腦科學與人文學科。
社群的期待與軟體的複雜度已超越我們維持與改善它的能力,這樣的成長使我們相當傷腦筋。絕大多數的程式碼還是由同樣這一小群人自願花時間撰寫而成――他們並非專職開發人員、也沒有薪酬。科技的變化(例如作業系統從32位元變成64位元)以及高解析度螢幕的出現,以及為了能持續在不斷演化的作業系統與硬體上運作,顯著的更新變得迫切。我們在2012年創立Processing基金會,Daniel SHIFFMAN協助拓展我們的影響範圍,並且支援這套軟體的開發。Lauren MCCARTHY目前是Processing基金會董事會的第四位成員,我們也有其他的協作者與顧問。
Processing的最初使命是創造軟體,提供視覺領域工作者(設計師、藝術家、建築師)學習程式設計的管道,並協助具技術背景的受眾更為流暢地處理圖像。我們期待讓人們習得軟體識讀――學習解讀與撰寫軟體。我們希望改變世界各大學與藝術學院的課程。與其教導學生如何使用軟體,我們認為教導他們如何創建軟體也同等重要。
Processing基金會的下一場遠征是讓更廣大的群眾更容易理解親近程式碼。為了達到這個目標,我們把資源投注於指導與協作,相信藝術與科技的結合,我們知道藝術教育要從小做起。我們不想生活在一個缺乏藝術創意與投入的技術開發世界,以及一個只有少數人能夠學習程式設計的世界。
我們2018年的程式設計夏季課程(Summer of Code 2018)正要開始。1 這個課程是由Google贊助,由我們指導15位學生學習軟體開發。這些學生各自處理Processing基金會軟體當中的不同部分。我們的2018獎學金(2018 Fellowships)正進行到一半。Processing獎學金是一種導師制的補助金,讓個人或團體在基金會宗旨範圍內完成一項計畫。我們今年提供了九筆獎學金。我們與這些獲得獎助者合作,進行廣泛的計畫,比如研擬高中課程、在迦納用智慧型手機教導程式設計、為p5.js開發人員作文件紀錄、改善我們工具的近用性(accessibility),以及為Processing.org創建新的網站建造系統等。
從最初的Processing軟體到現在,基金會目前也支持各種不同的計畫。由Lauren MCCARTHY創立並主持的「p5.js計畫」是一個用JavaScript在當代網路瀏覽器的脈絡下重新想像Processing的計畫。由Jonathan FEINBERG創立的「Processing.py」現在是Processing 3編輯器的一種模式。此外,作為Processing 3的一種模式,Andres COLUBRI正在擴充Processing以供Android系統使用。Gottfried HAIDER也撰寫了相關程式碼,讓Processing 3能夠在樹莓派(Raspberry Pi)與CHIP 硬體上順利運作,他同時也撰寫了一個函式庫,以直接在I/O 的針腳(pin)上讀取與撰寫。這些價格不貴的運算設備與Processing的初衷一致,也就是讓學習程式設計變得輕鬆愉快。
那些曾經和持續對Processing發展有所貢獻的完整人員名單,被放在Processing網站上的「 People」頁面。透過GitHub作出的貢獻則在Processing Foundation repositories當中以圖表方式呈現。
我們從事Processing開發至今已經將近17個年頭。幾乎難以想起2001年當網站首次公開,或是2004年2月2日當預覽版軟體發表之際,當時的我們是何種感受。我們有一個文件檔案庫和待辦事項清單,追蹤了程式碼的所有變動,但是這些資料並無法反映心情或對個人的影響。我們希望這篇簡短的文章能夠銜接2018年的Processing及其過去。最重要的是,Processing涉及的是人。它是關於個體和群體的學習與探索,更是關於想法、知識與技能的共享。