owned this note
owned this note
Published
Linked with GitHub
---
tags: Old Version
---
:::info
Preface (https://gitlab.com/aesthetic-programming/book/-/blob/master/source/0-Preface/readme.md)
:::
# 前言 Preface
## 這是一本什麼樣的書?
正如書本副標寫的,這本書希望成為一本手冊,但不像傳統技術手冊一樣教導一套既定的操作模式。[^instuctions] 閱讀這本書的方式不僅是學寫程式語言,也不只是針對寫程式的實踐提供批判性意見,而更是提供了一些混亂但同時我們認為會更「有用」的東西:一本關於寫作、編碼和思考之間,關係如何更為複雜且深層糾纏的書。[^useful]
大多數程式設計書籍的主要目的是教讀者如何成為一名優秀的(或更好的)程式設計師,強調最先進的技術、解釋、設計容易上手的範例,以便應用在與科技或文創相關產業。很少有書籍將程式設計的文化及美學維度做為批判性思考和行動的一種手段。[^guzdial] 新興的軟體研究、平台研究,以及部分數位人文學科所延伸的跨學科領域,都涉及運算技術,並在一定程度上將程式設計的實踐融入了研究的對象,但如何以批判性視角來看程式設計,這方面現有的細節實作則很有限,特別是對那些學習非技術或非科學學科的人。一方面,將「運算式思維」[^ct] 擴展應用到電腦科學或軟體工程之外範疇的興趣日益增長(儘管是數位人文學科最終仍會面臨另一種限制),另外一方面現有文獻又極度匱乏,這本書正試圖彌合這樣的落差。在這方面我們採取與其他書籍迥然不同的方法,也不同於其他理論書籍,在那些書籍中,原始碼成為程式設計師思維的說明或隱藏操作層面過於簡單的類比(如果沒有完全忽略的話)。
這本書廣泛地說,不僅響應了軟體研究的精神[^Fuller] ,更提供一種應用的、注重實踐的方法來理解程式設計的重要性——以軟體來閱讀、寫作和思考——將成為這個時代的關鍵工具,也能進而意識到我們的經驗是如何有愈來愈程式化的趨勢。以最開闊的覺知將這本書做為一種深度學習的「工具」——一本為那些不習慣程式設計的人準備的手冊——它讓你在技術臻於熟練之際,發展出程式設計師的概念思維。
重點重申,我們希望本書能讓讀者獲得關鍵的程式設計技能,以便經由程式碼來閱讀、編寫和思考(稍後將回到讀寫能力的問題)。我們認為進一步探索程式碼技術和概念方面的交集處是重要的,以便深入反思運算文化的普遍性及其對社會和政治影響,例如:人機語言、抽象化物件、數據化,還有自動化機器智能的最新發展。換而言之,這本書包含了程式碼的技術層面和形式特質,並開啟了關於程式碼的想像,包括承認程式設計操作上的物質條件、程式碼本身的非人類能動性,以及它在更廣泛的生態範疇中所固有的內在關係。
除了學習程式設計,我們的目標是銜接運算文化、美學和文化研究理論間的差距。做為這個計畫中的一部分,**我們對未被充分承認的權力關係特別感興趣,例如:階級、性別和性相關的不平等和不公正,以及種族和殖民主義的持續性遺產。[^decolonial] 這不僅關乎我們自己的主體位置和文化背景(有關這方面的資料請參照作者簡介)和替現政治(主體與主體表示之間的競爭空間),也關乎權力差異如何隱含在程式碼中的二元邏輯、層級結構、屬性命名、可近用性,還有更廣泛的社會不平等如何經由非替現式的(non-representational)計算而被強化或延續。簡言之,這本手冊介紹、示範了我們稱之為「美感程式設計」的反思性實踐,此種獨特取徑在我們一邊解釋和執行時,也逐漸形塑構成我們的主體性。**
## 為何而美感程式設計?
本書遵循的論點是,**運算文化不僅僅是用來提高解決問題和分析能力的熱門科目,或者是運算過程究竟發生了什麼事的一種理解方式,而且是一種參與程式設計以便對現有的技術典範提出問題,並進一步改變技術系統的方法。因此,我們認為程式設計是一種動態的文化實踐和現象,一種在世思考和行為的方式,以及一種理解建構、編寫成我們生活現實的一些複雜過程的手段,以便對這些現實採取行動。**
在我們看來「美感程式設計」一詞妥善地描述了這條路徑。我們聲稱在這方面具有一定的獨特性,當然,近年來相關文獻中引入的其他術語如「創造性編碼」和「探索性程式設計」與美感程式設計相近,強調了電腦程式設計超越了實用性和功能性,可從藝術和人文學科的廣闊視角來發展程式設計實踐的文化生產或批判性思維。[^Refs] 事實上,我們應該進一步說明「美感程式設計」來自於一門丹麥奧爾胡斯大學自 2013 年以來一直與軟體研究課程並行教授的數位設計學士學程。依照設計,這些課程綜合提供一種與軟體一同思考的方式,以理解更廣泛的政治和美學現象。[^students] 我們遵循的原則是:軟體日益增長的重要性需要一種新的文化思維及課程,讓演算法過程、數據處理和抽象化的政治和美學能夠從內部更好被理解與解釋。本書的結構主要來自教授這些課程的經驗,我們要感謝所有學生和老師在此過程中所做的寶貴貢獻和重要反饋。[^people]
**延續對美學的討論,應該要澄清我們所指的不是美的概念,就如它通常被誤解的(又名資產階級美學),而是政治性的美學:那些把自己獻給身體感知-製造經驗和覺察的東西(引用賈克・洪席耶[Jacques Rancière]的《美學政治》做為一個關鍵參考)。[^Ranciere] 我們如何在這種政治意義上感知世界不是固定的,而是不斷變化的,就像軟體本身一樣,受更廣泛的條件和生態的牽制。**
政治美學可以追溯到法蘭克福學派的批判理論,特別是西奧多・阿多諾(Theodor Adorno)和華特・本雅明(Walter Benjamin)的思想,這些思想強化了文化生產——現在自然而然包括程式設計——必須在社會脈絡下被看待的概念。在這樣理解下,程式設計就變成了一種理解物質條件和社會矛盾的「力場」(force-field),正如對藝術的詮釋的運作方式曾經是「一種語言的符碼來處理社會中發生的事情。」[^Jay] 本雅明經常被引用的、關於可複制性技術的文章已成為打破一些藝術生產神話的試金石,包括拆除「靈光」(藝術品真實性和原創性的標誌)的審美體驗。[^Benjamin] 同樣值得追溯的是,阿多諾和本雅明對這種靈光破壞的後果保有著名的歧見:本雅明表示這種轉變具有正向的層面,並將靈光的破壞視為一種政治解放,但阿多諾則認為標準化和偽個性化等負面影響也會隨之而來。這兩種趨勢似乎都隨著運算文化而加速,因此需要銳利地持續批判,基於「內在批評」的路線,審視那些固有的、於物件內部運行的,以及軟體內部運作的、支撐它的物質條件。[^Adorno] **然而,這些舊的(白人、男性)參考文獻,在多大程度上能夠用來拆解運算操作複雜性的任務,並針對大多數人使用電腦或思考電腦的方式提出洞見,仍然是個問題。這與美感程式設計正在成為什麼有關,也與它現在或曾經是什麼有關**,以及為什麼我們仍然從這些參考文獻出發,同時也意識到它們本身存在問題、需要替代方案。
如果一切都在變化中,就如現在看起來的樣子,那麼**我們也需對接收的方式保持敏感,因為這些接收方式立基西方的知識生產傳統和進步觀念,根植於歐洲殖民主義和壓榨行為。[^afro] 我們發現安清(Anna Lowenhaupf Tsing)的著作在這方面很有用,因為它提供了一種女性主義的觀點,其中不確定性被更認真地對待以反映生活條件的不穩定。[^Tsing] 我們的歷史和技術理論不僅與此相關,而且這也關乎了批判性實踐和其他非人類的想像。正如安清所說,其他生態開闢了多方向、跨時間和跨尺度、更加開放和不確定的思維方式,這可以被歸結於一種「聚合」(assemblage)的概念。[^Tsing2] 我們不像她那樣從蘑菇中尋找靈感,而是由科技本身的內在和相關性出發。更準確地說,我們一直在研究基本的程式設計概念,例如幾何、物件抽象化;迴圈、時間性;數據、數據化;變數、函數及它們的命名,還有數據採集、處理和自動化,做為進一步反思美感的起點,由此,科技的功能為進一步理解文化現象的構建和運作方式奠定了基礎。**
從這一個層面來說,美感程式設計可以被視為一種構建事物和創造世界的實踐,但也涉及了從內在對於電腦科學、藝術和文化理論的批判生產。從另一個方向來看,這與菲立普・阿格雷(Philip Agre)的「批判性技術實踐」概念很接近,它將形式技術邏輯和話語文化意義結合在一起。[^agre] 換句話說,這種方法需要對程式設計的實際理解和知識,以支持批判性理解技術文化系統,以及兩個領域的專業知識水平為基礎,例如:全喜卿(Wendy Hui Kyong Chun)或許煜(Yuk Hui)所具有跨學科專業知識[^Chun])。這種實際「知識」的取向也指向了「做中思考」的實踐,[^britton] 擁抱程式設計的各種工作形式,來探索寫作、編碼和思考之間的關係,來想像、創造和提出「替代方案」。[^agre1] 以這些方式介入美感程式設計,我們的目標是進一步「酷兒」批判理論和科技實踐的交匯處,並進一步討論在科技主題中相對未被承認的權力關係(請參見「作品列表」以及全書所收錄的孫詠怡創作)。我們希望以這種方式來鼓勵愈來愈多人挑戰各種分化的領域及操作方法。
## 軟體研究?
如前所述,本書仰賴了軟體研究領域,並且在一定程度上也拓及到批判程式碼研究——包含:全喜卿、富勒(Matthew Fuller)、馬克・馬里諾(Mark Marino)及其他人的研究成果,也包括我們早期的作品——透過分析各式軟體的產物和仔細閱讀理論文本及原始碼,來處理及表達軟體知識如何做為一種文化形式。我們所採用的方法有一大部分靈感來自於富勒 2008 年出版的《軟體研究:詞彙》,書本的架構採取詞典的形式,其靈感又源自於雷曼・威廉斯(Raymond Williams)於 1958 年首次出版的《關鍵詞:文化與社會的詞彙》。[^Williams] 簡言之,本書在很多方面採用了類似的方法:近看運算的形式邏輯、遠看軟體蘊涵的文化含義。在這方面認識《軟體研究:詞彙》生成的脈絡也是重要的,它起源自一場前瞻的工作坊,在此它明確的計畫方針值得引述:
> 「這項計畫專注在將科學研究的內在/外在主義問題由裡而外折疊起來,將一個主題和其他主題結合起來的機制如下:由軟體所支撐起來的學術研究、軟體藝術和文學實踐中,對於軟體本身這個媒介有什麼想說的?因此,這種互動的目的不是為了揭示軟體所隱藏的真相,或其深奧世界的面紗,而是看看它是什麼、以及它可以與什麼相結合:一個富含矛盾的相接合處,在此運算式的理性速度與外部延伸不期而遇。」[^ss]
我們相信,**關注程式設計中的基本或關鍵概念有機會能為美學和批判理論提供新見解,幫助運算邏輯所日益綁定的文化現象打開新觀點。這種工作方式對我們來說是重要的,如此一來一方面意識到我們與問題共存,另一方面也能從軟體內部運作及其物質條件來審視。將討論從形式邏輯擴展到外部,我們還強調了藝術實踐對於打開更多思辨性、替代性和混亂想像的實用性。** 本著這種精神,或至少與歐洲軟體研究的發展保持一致,我們從所謂的「軟體藝術」(儘管該類別僅是一種臨時的識別)或「數位藝術」中汲取靈感。[^Readme] 我們將藝術(和批判性設計)實踐中的例子做為論證的一部分,強調了我們的觀點,即程式設計不僅是產生藝術作品的實用工具,而且本身就是一種批判性審美對象[^codestudies]。策展人印克・阿恩斯(Inke Arns)巧妙地說明了這一點:
> 「『軟體藝術』(⋯)是指能夠在軟體的媒介或材料中反映軟體(和其文化意義)的藝術活動。它並不將軟體視為一種會消失在它所創建的產品之後的實用輔助工具,而是專注於它所包含的程式碼——即使程式碼不被明確顯示或強調。根據弗洛里安・克拉默(Florian Cramer)的說法,**軟體藝術使看似中立的技術命令序列的美學和政治潛台詞變得可見**。軟體藝術可以奠定在許多不同層次:原始碼層次、抽象演算法的層次或由給定程式碼所創建的產品的層次。」[^Arns]
本書論點探究類似的東西。此外,為了討論程式碼和運算過程的美學維度,我們將探索軟體物質條件和運算過程的藝術作品做為實踐和理論範例。也可以這麼說:它們是我們論證中不可或缺的一部分,同時也有助於在實踐中展示一些想法並提供意想不到的認知見解。重複補充已經介紹過的,我們不僅對程式設計的批判美學感興趣,而且對程式設計**做為**批判美學感興趣。
## 開放式出版
更重要的是,程式碼中有文字(以人類可讀的方式),文字中有程式碼(使用文字編輯器、界面或我們用來呈現這些想法的線上平台)。關於這一點還有更多可以說的,我們將在本書的各個章節中回到這些問題,每個章節都遵循基本程式設計的邏輯概念。目前點到即可,這本書的起點是為了表達**寫作**和**編碼**是如何彼此深深糾纏,以及兩者都不應該優先於另一個:我們從**它們的關係中**學習。寫程式和為程式寫作兩者被強加在一起,以反映數據實踐和開放式出版計劃中更廣泛的文化和技術轉變,此外,強調寫一本書的工作必然是一項進行式。就像軟體一樣,這是一本可供閱讀、行動、共享和重寫的書。
在軟體生產方面顯然有很多這種開放式協作的先例,而且免費和開源很顯然是我們所強調的想法。值得強調的是,自由及開放原始碼軟體(Free and Open source software,縮寫為 FOSS)的開發是一種集體實踐,它挑戰了與商業開發相關的規範性生產關係,如作者和版權的狹隘定義以及固定的分工,可以擴展到書籍的生產和學術出版相關的聲譽經濟。然而,我們也意識到開放原始碼和開放取用書籍涉及了共享經濟、自由市場資本主義和利用免費勞動力來獲利等模糊地帶。我們希望這些堅持與努力能夠挑戰過度簡化的邏輯,我們的出版商 Open Humanities Press 廣泛反映了 FOSS 原則中的透明度和可拷貝,並致力於學術研究的開放使用。[^OHP] 因此,讀者可以免費下載這本書或購買合理價格的紙本書。
這沒有什麼特別或原創之處。我們承認有許多其他實驗性出版計劃,甚至還有去中心文章出版的「反平台」。[^dok] 和許多其他例子針對市面上大量寫程式書籍,反倒要求讀者輸入範例才可展開閱讀,另外還有即時程式碼的編寫平台做為替代方案(例如 Jupyter Notebook 或 DevDocs[^devdocs])。我們處理這個問題的方式是使用印刷以及相關的軟體存儲庫。這也成為我們選擇本書設計者的參考指引:開源出版小組 (Open Source Publishing collective) 的設計僅採用免費和開源的軟體——正如他們所說的「這些軟體邀請用戶們參與設計」[^OSP]——並且使用 Git 版本控制系統免費提供所有文件,包含根據 GNU General Public Licence 第二版的條款來散佈計畫使用的所有文件。下一章將會更詳細介紹這點。
簡言之,使用 Git 存儲庫進行寫作進一步強調了 FOSS 的工作原則,並且通過將寫作視為軟體,或者實際上將軟體視為寫作,使我們能夠將本書的製作正式化為一個迭代過程,需要即時更新,允許分叉和無止盡的版本變化。藉由允許其他人製作新版本,我們希望適度挑戰商業出版慣例,並透過將想法化為編碼並在網絡上出版的方式闡明一些我們對基礎設施的理解與能耐。我們相信,這種工作方式標誌著集體參與程式設計並在社會技術系統(內部和外部)中創造變革的起點。我們的目標和阿德里安・麥肯齊(Adrian Mackenzie)所辨識出的「自動考古學」有所共鳴,他示範研究對像能夠如何完全地整合到分析之中,2017 年出版的《機器學習者》以 GitHub 相關網站做到這一點。[^Mackenzie] 有助於我們做為讀者來理解編寫一本關於程式碼的書的迭代過程,能夠如何本著軟體開發人員協作、主持、編審、合併程式碼以及一起構建軟體的精神。[^Git]
## 內容的次序:流程圖
在整本書中,我們使用 JavaScript 做為主要的程式設計語言,並且以網頁為基礎的開源函式庫 p5.js 做為主要的關注對象,它為程式語言初學者準備了完整、方便的學習資源(第一章「準備開始吧」將會詳細說明)。我們的資源結合了獲取科技知識做為關鍵(批判)工作進行的必要組成部分、學習程式設計最廣義來說的所有部分,把寫程式做為實踐、思考、創造世界的過程。
本書的每一章都以流程圖[^graphviz]開頭,以「圖表」示意這些內容在形式/技術、美感/概念方面之間的糾纏關係。每張圖表都捕捉了動態(學習)的過程,尤其是如何「設置()」建構一個舞台、「開始()」的起點、「原始碼」展示的文本與範例、「課堂練習和討論」程式碼和語法的形式和辯證,以及「當()」延伸擴展的討論,呈現、思考這些元素之間的關聯性,無論具體或抽象。如果流程圖通常被當作一種輔助工具,用來設計運算的過程,增進技術層面的理解和交流[^diagram] 那麼我們也認為批判性反思是該過程不可或缺的一個部分。事實上,以流程圖做為起點說明了我們將概念「由內而外」反轉的取徑,還有需要以邏輯和辯證的形式來理解運算和程式設計中的物件、關係及過程。
從第一章「準備開始吧」導覽使用本書所需的工具和環境。你將在本章編寫第一個程式,藉此反思識讀能力為何,從兩方面來說包括編寫(RunMe)和解讀程式碼(ReadMe)。第二章「變數幾何」探討了變數的使用,以及幾何形狀、大小、位置、空間等的繪製,以連接到表情符號的討論及其所調用的替現政治。第三章,「無窮迴圈」,從靜態物件移到動態物件,使用不同語法的轉換。使用下載中的圖形旋轉圖標示意,我們將學習條件語句、迴圈與時間相關的語法,以反思科技在我們的時間感知上如何扮演重要角色。第四章「數據採集」介紹了程式如何採集和處理輸入的數據(經由聲音和網路攝影機、滑鼠和鍵盤按鍵,以及可自行設定和點擊的按鈕),並進一步討論數據採集和數據化的影響。第五章,「自動生成器」,專注在規則和指令是如何運行的, 以及它們如何在生成系統中產生意想不到的和/或複雜的結果,並產生突現/酷兒生命形式。在這一點上,本書在技術上變得更加複雜,第六章「抽象化物件」介紹了物件導向的程式設計, 其中介紹了物件的可定制屬性和行為,同時討論了抽象現實和具體現實之間的移動。第七章「語音程式碼」密切關注標註和運算的架構,探索程式碼與自然語言之間的詩意關係。藉由特別關注聲音,我們反思編碼實踐如何涉及了人類主體,以及編碼本身如何表達更廣泛的政治問題。運用了應用程式設計接口(API)的即時查詢,第八章,「查詢(酷兒)數據」,仔細觀察如何請求和獲取數據,探索資訊的處理如何與數據篩選、標準化、提取、傳送和呈現相結合。因此,我們獲得的洞見包括:以查詢而驅動的社會政治,以及搜索引擎如何以妥協的形式生產知識的方式。在本書的最後,第九章「演算法過程」並不關注程式碼的語法,而是關注我們如何將演算法的過程運作拆解為一種邏輯的形式。它引入了流程圖做為展示演算法的實踐和概念層面的一種手段,並探索流程化運作的政治效應(流程圖也是為本書每個章節制定地圖而採用的策略,如前所述)。最後一章「機器反學習」介紹機器學習演算法進而探索培訓、教學和學習的普遍含義,將各章提到的許多問題匯總在一起,並進一步反思這本書做為一個學習工具的目的。但我們不希望這僅是訓誡式的,所以提供了一個額外的章節「後記:反復出現的想像」,這是一個基於本書內容、以機器生成的章節,關於已經學了什麼,還有哪些所學或許可被忘卻。總之,前六章為理解程式設計的基本要素奠定了基礎,後四章在此基礎上構建了更具推測的形式和想像。
創作實踐是我們手法的最前沿。每章都帶有一個不同的語法使用技巧示範,以便促成在形式方面討論程式碼。但除此之外,我們在教學中也經歷過學生、尤其是初學者,難以將不同的函式結合在同一個草圖中。儘管每一章都建立在其他章節的基礎上,但我們發現重複使用語法,以及如何以多種方式組合和使用不同的函式、語法也很重要。可以從 p5.js 參考頁面中,和其他線上教學影片[^shiffman] 找到個別函式,但我們強調如何將製作和思考結合在一起的重要性。我們的範例是在考慮到這一點的情況下開發的,並增加各章複雜性,每個草圖大約一百行程式碼,以便於理解。應該說,我們在這裡並沒有優先考慮高效的程式碼,有時也會相對應地更改預期的語法使用方式。事實上,我們的目標並不像許多程式設計書籍一樣提供核心 p5.js 函式的完整列表,而是根據我們選擇的範例來提供解釋語法的方式,以及這些範例是否具有提供進一步討論的能力。我們的範例受到其他藝術家、設計師、科學家和理論家的啟發,是根據學習的感知速度和它們的批判潛力,並結合各章節與所研究的語法和特色而客制化的。這些範例因此希望能激發課堂內外的技術和概念討論,包括我們為每章制定的迷你習作(又名「miniX」)。
使用「RunMe」(編寫)和「ReadMe」(解讀)的雙重元素[^dual]來培養如何編寫程式碼、書寫關於程式碼的反思,鼓勵學生質疑他們所學知識是如何應用在人造物的製作上。使用「低地板、高天花板」的教學原則,[^papert] 學生可以使用本書材料輕鬆開始,但每個迷你習作也鼓勵學生獨立學習公開討論開放處理這些主題,不依循既定的結果。我們在各個章節中引入了不同的、開放的任務及問題,以測試該時間點已知內容的極限。在實踐和迭代學習方面,我們還為每個迷你習作加入了同儕反饋,以鼓勵相互閱讀彼此的程式碼來進行學習,[^readcode] 並進一步強調方法的多樣性以及在公共場合分享想法的價值,**就像一個共享的食譜。** 我們在書中採用烹飪的比喻,例如變數和廚房中的容器、演算法和調理步驟等之間進行概念上的比較。我們從本書設計團隊 Open Source Publishing 那裡獲得靈感,他們在為初學者舉辦研討會方面擁有豐富的經驗,並採用他們使用的廚房比喻:**將編碼和烹飪、品嚐和測試的實踐結合起來,邀請對各種成分進行進一步實驗:「在 OSP 廚房中,原始檔案 = 成分。」**[^kitchen]
「情境知識」的原則引導了我們所試圖概述的內容,因為我們提供的內容反映了它特定的生產條件,以及知識生產者的情境(我們和一起工作過的學生)。 [^situatedness] 具體而言,這本書在過去五年透過實際的課堂教學和作業,在非常特定的文化和教育脈絡下發展、處於人文學科的教育學位課程中、以軟體研究做為一個焦點。學生大多沒有程式設計經驗。該課程總共有十四堂,每周有八小時和三小時為一個單位的連續學習時間——分別用於美感程式設計和軟體研究。雖然我們在這裡提供了十個主要章節,但在實踐中[^teaching],我們提供了一個「休息週」讓課程步調減緩,不介紹新的函式和語法,而是重新審視以前的函式和語法、討論什麼構成了美感程式設計,以及這如何與他們的每週練習和學習聯繫起來。我們還有工作週來為最終的成果發表做準備。如果你依照本書安排課程教案,則建議你具有一定的靈活性,因為此書目的顯然的是為了讓讀者適應、修改和重新安排內容,以適應他們的目的和工作環境的特殊性。我們提供開放資源的內容,開闢不同的可能性讓讀者在各種材料和想法之間進行「剪輯」,[^barad] 並鼓勵讀者分叉、複製、制定自己的版本,例如:引用不同的參考資料、範例、反思和創造新的章節[^fork] 因此,採用珍尼弗・加布里斯(Jennifer Gabrys)的話,我們的計畫是「邀請去製作、組織、策動、維持和結合人、科技與世界走向開放,而不是依循已知的結果。」[^gabrys]
## 本書對象
最後,我們希望強調這本書不僅是你目前可能握在手中、正在閱讀其文字的實體物,而是一個運算和網絡連結的物件,分佈在各種其他空間和時間中,可供讀者和書寫者使用。在提及這點的同時,值得我們回顧本雅明在「作者做為生產者」的文章中寫道:「讀者總是準備成為一位作者,就如何成為一位描述者或是倡議者的意義上來說。(⋯)而寫有關於工作的文章因此成為了完成執行工作的必要技能的一部分。寫作的權威不再建立在專業訓練中,而是建立在綜合技術訓練中,因此成為共同財產。」[^Benjamin2] 有趣的是,對本雅明來說,就像這本書一樣,文化生產需要一種教學功能。
這正是我們的觀點。這本書將自身表現為一個動態的物件,沒有固定的屬性、商業形式、或特別一定要如何的確切之處。依循這樣的路徑,雖然前言標示了這本書的開始,但不會有一個終點:這本書有意地陷入了它自身生成的無窮迴圈中。
## 註釋
[^instuctions]: 就像許多電腦教學書籍經常使用「傻瓜書」(for dummies)這個輕鬆的稱呼,但這個詞帶有一點學習障礙的哀傷。
[^useful]: 這本書希望提供的「有用知識」是非標準式的識讀能力,請參考:Marilyn M. Cooper,「真正有用的知識:寫作中心的文化研究議程」,*《寫作中心期刊》(The Writing Center Journal)* 14,N°2(1994 年春季):97-111,https://jstor.org/stable/43441948 。
[^guzdial]: Mark Guzdial 認為程式設計除了主流關注的經濟效益以及為軟體產業培育專業人才外,還有其他的目的,這為學習和教授程式設計開闢了各種可能性。參見 Mark Guzdial,「運算於其他領域」,在《劍橋運算教育研究手冊》(*The Cambridge Handbook of Computing Education Research*),Sally A. Fincher and Anthony V. Robins,eds。(Cambridge:Cambridge University Press, 2019),584,https://doi.org/10.1017/9781108654555.020 。
[^ct]: Seymour Papert 在 1980 年出版的 *《心智激盪》( Mindstorms)* 頗具影響力,他將運算導入兒童學習。創造了「運算式思維」一詞,強調流程的建構,用早期的程式設計語言Logo(軟體不只是用做工具),來企圖彌合數學、科學與教育文化以及社會批判的鴻溝。 Donald Knuth 在 *《識讀程式設計》(Literate Programming)* 一書中更明確釐清了識讀的概念,並納入一種程式設計的文獻,其中涉及了將程式語言視為人類讀者的自然語言。近年來,運算式思維的概念也被軟體研究領域的學者所承襲,如 David Berry、Matthew Fuller、Nick Montfort 和 Annette Vee。參見 Seymour Papert,*《心智激盪:兒童、電腦和強大的想法》(Mindstorms: Children, Computers and Powerful Ideas)*(New York: Basic Books,1980); Donald Ervin Knuth,*《識讀程式設計》(Literate Programming)* CSLI Lecture Notes, N°27(Standford, CA: Center for the Study of Language and Information, 1992);Jeannette M. Wing,「運算式思維」,*《Commun, ACM》* 49, N°3(2006 年 3 月):33–35; Michael, Mateas,「流程識讀:教育新媒體工作者」(Procedural Literacy: Educating the New Media Practitioner),*《Horizon》* 13,N°2(2005 年 6 月 1 日),101–11; David M. Berry and Anders Fagerjord,*《數位人文:數位時代的知識與批判》(Digital Humanities: Knowledge and Critique in a Digital Age)*(Hoboken, NJ: John Wiley & Sons, 2017); Matthew Fuller,*《如何成為Geek:軟體文化論文集》(How to be a Geek: Essays on the Culture of Software)*(Cambridge:Polity Press,2017 ); Nick Montfort,*《藝術與人文探索性程式設計》(Exploratory Programming for the Arts and Humanities)*(Cambridge, MA: MIT Press, 2016); Annette Vee,*《編碼素養:電腦程式設計如何改變寫作》(Coding Literacy: How Computer Programming Is Changing Writing)*(Cambridge, MA: MIT Press, 2017); Ole Sejer Iversen、Rachel Charlotte Smith and Christian Dindler,「從運算式思維到運算賦權:一份二十一的世紀 PD 議程」(From computational thinking to computational empowerment: a 21st century PD agenda),*《第 15 屆參與式設計會議論文集全文 - 第 1 卷》(Proceedings of the 15th Participatory Design Conference Full Papers - Volume 1)* 第 7 期(2018 年 8 月):1-11。
[^Fuller]: 軟體研究是一個跨學科的研究領域,研究軟體及其社會和文化影響,參見 Matthew Fuller 編輯。*《軟體研究:詞彙》(Software Studies: A Lexicon)*(Cambridge, MA: MIT Press, 2008)。
[^decolonial]: 例如,請參閱 Syed Mustafa Ali 的「概述解殖民化的運算」(A Brief Introduction to Decolonial Computing),*《XRDS: Crossroads, The ACM Magazine for Students》* 22, N°4(2016): 16-21。
[^Refs]: 這裡我們指的是 John Maeda,*《創意編碼:美感+運算》(Creative Code: Aesthetics + Computation)*(London: Thames & Hudson, 2004); Kylie A. Peppler and Yasmin B. Kafai,「創意編碼:個人表達的程式設計」(Creative coding: Programming for personal expression),*《第八屆電腦支持學習協作國際會議》(The 8th International Conference on Computer Supported Collaborative Learning (CSCL)* 2(2009):76-78;Montfort,*《探索性藝術與人文程式設計》(Exploratory Programming for the Arts and Humanities*); Noah Wardrip-Fruin,*《表達式處理:數位小說、電腦遊戲和軟體研究》(Expressive Processing: Digital Fictions, Computer Games, and Software Studies*)(Cambridge, MA: MIT Press, 2012)。
[^students]: 我們將形式化邏輯和概念式思維融合在一起的方式,意圖打開進一步反思的空間。就像我們的學生在 2018 年所說的,「美感程式設計不僅是程式設計 101,而是一門更具反思和批判的課程。」根據 2019 年學生課程反饋,課程結構提供了「將編碼做為實作和理論方法的務實經驗。(⋯)能夠看到程式碼的背後並嘗試在數位文化脈絡下更宏觀地進行解構是一件很棒的事。」
[^people]: 特別感謝為這些課程教學做出貢獻的 Magda Tyżlik-Carver 和 Christian Ulrik Andersen,以及包括 Frederik Westergaard、Nils Rungholm Jensen、Tobias Stenberg、Malthe Stavning Erslev、Ann Karring、Simone Morrison、 Nynne Lucca Christianen、Ester Marie Aagaard 和 Noah Aamund。
[^Ranciere]: 雅克・洪席耶的 *《美學政治》(The Politics of Aesthetics)*(London: Continuum, 2006)探討了美學和政治的共同點:根據洪席耶的說法界定了可思考與不可思考、可能與不可能。
[^Jay]: 引文繼續,「必須通過批判性分析來破譯」,Martin Jay, *《美學理論》(Aesthetic Theory)* (Minneapolis, MN: University of Minnesota Press, 1996), 177。
[^Benjamin]: 引用本雅明的話:「當本真性的標準不再適用於藝術生產時,藝術的全部功能就反轉了。它不再以儀式為基礎,而是開始基於另一種實踐——政治。」 Walter Benjamin,「機械複製時代的藝術作品」[1936],*《作品選集,第三卷,1935-1938》(Selected Writings, Volume 3, 1935–1938)*,Howard Eiland 和 Michael W. Jennings 編輯。 (Cambridge, MA: Belknap Press of Harvard University Press, 2002)。
[^Adorno]: 阿多諾說得更好:「一件成功的藝術作品,根據內在批評,是能夠在非法的和諧中解決客觀的矛盾,如能以相反的方式在其最內在結構中體現矛盾,純粹且不妥協地表達和諧的想法」(Adorno, *《陵鏡集》(Prisms)* (1967),32;引自 Jay,*《美學理論》(Aesthetic Theory)*,179)。
[^afro]: 黑人和原住民美學將在這裡成為重要的補充,例如在 Ron Eglash 的 *《非洲分形》(African Fractals)* ,以及對非洲未來主義(Afrofuturism)的引用,不僅僅是將黑人的聲音重新置入種族歧視的歷史敘述中,而是設想新的、富有想像力的形式。請參見 Ron Eglash 的 *《非洲分形:現代電子運算和原住民設計》(African Fractals: Modern Computing and Indigenous Design)*(New Brunswick, NJ: Rutgers University Press, 1999),也請參見 Kodwo Eshun 的「對非洲未來主義的進一步思考」,*《CR:新百年回顧 3》(CR: The New Centennial Review 3)*, no.2 (2003): 287-302。
[^Tsing]: 安清(Anna Lowenhaupf Tsing),*《末日松茸:資本主義廢墟世界中的生活可能》*(Princeton: Princeton University Press, 2015)。
[^Tsing2]: 安清,*《末日松茸》*,p.23。
[^agre]: 菲立普・阿格雷(Philip E. Agre),「邁向批判性技術實踐:從改革人工智慧學到的經驗課題」(Toward a critical technical practice: Lessons learned in trying to reform AI),刊載於 Geoffrey Bowker、Susan Leigh Star、William A Turner、William Turner、Les George Gasser 編輯,*《銜接落差之橋:社會科學、科技系統和協同合作》(Bridging the Great Divide: Social Science, Technical Systems, and Cooperative Work)*(ACM Digital Library,1997)。 https://dl.acm.org/doi/book/10.5555/549261 。
[^Chun]: 全喜卿(Wendy Chun)的研究背景包含了系統工程設計和英文文學,她的近期研究結合和轉化了這兩個領域,請參閱 https://en.wikipedia.org/wiki/Wendy_Hui_Kyong_Chun 。 許煜的研究領域則結合了計算機工程和哲學,請參閱 http://digitalmilieu.net/yuk/ 。
[^britton]: 「做思考」的概念暗示了非標準式的認知方式,它藉鑑了運算領域的藝術研究和科技女性主義(technofeminism)。請參見 Loren Britton、Goda Klumbyte 和 Claude Draude的「做思考:重遊藝術研究和科技女性主義的運算」(Doing Thinking: Revisiting Computing with Artistic Research and Technofeminism),*《數位創意 30》(Digital Creativity)*,N°4(2019 年 10 月 2 日):313–28頁,https://doi.org/10.1080/14626268.2019.1684322 。
[^agre1]: 阿格雷,「邁向批判性技術實踐」。
[^Williams]: 富勒(Fuller)編輯的 *《軟體研究》(Software Studies)*; 雷蒙・威廉斯(Raymond Williams),*《關鍵詞:文化與社會詞彙》(Keywords: A Vocabulary of Culture and Society)*(London: Fontano, 1983); Blackwell 於 2005 年更新為 *《新關鍵詞:修訂後的文化與社會詞彙》(New Keywords: A Revised Vocabulary of Culture and Society)*。
[^ss]: 研討會的計畫描述可在以下庫存頁面中找到 https://web.archive.org/web/20100327185154/http://pzwart.wdka.hro.nl/mdr/Seminars2/softstudworkshop 。
[^Readme]: 我們深受「Readme」(解讀)系列藝術節影響,這些活動在莫斯科的 Marcros 中心(2002 年)、赫爾辛基的 Lume 媒體中心(2003 年)、奧胡斯大學和奧胡斯的 Rum46( 2004) 和多特蒙德的 HMKV (2005)舉辦。相關的軟體藝術庫 Runme.org 成立於 2003 年,許多參與者和提交作品的人不一定稱自己為藝術家。事實上,藝術這項類別本身已不足以涵蓋該領域發展起來的各種創造性實踐。一年一度的數位文化藝術節 transmediale 從2001-2004年開始使用「藝術軟體」(artistic software)或「軟體藝術」(software art)一詞來形容這些作品。許多藝術家及研究者也書寫、整理了軟體藝術的發展脈絡,請參見 Florian Cramer 和 Ulrike Gabriel,「軟體藝術」(Software Art),American Book Review, Issue "Codeworks"(Alan Sondheim 編輯)(2001 年);Goriunova, Olga, and Alexei Shulgin *《read_me:軟體藝術與文化》(Aarhus: Aarhus Universitetsforlag,2004 )*;Andreas Broeckmann,「軟體藝術美學」(Software Art Aesthetics),*《Mono 1》*(2007):158-167。
[^codestudies]: 批判程式碼研究(Critical Code Studies, 簡稱CCS) 讓這一點變得明確,此領域促進了將原始碼的剖析做為一種批判的文化對象。正如 Mark Marino 所述,CCS 將程式碼做為文本的材料,其主要論點是程式碼本身可以被視為「值得分析的、具有豐富解釋可能性的文化文本」,此外,程式碼允許人們反思「程式碼本身、它所建造的體系結構、它的功能和特定的程式設計選擇或表達之間,以及它所作用的、輸出的、處理的和所替現的關係」。參見 Mark C. Marino,「批判程式碼研究」,*《電子書評》(Electronic Book Review)*(2006 年 12 月 4 日);「關鍵程式碼研究現場報告」,*《運算文化 4》(Computational Culture 4)*(2014 年 11 月 9 日),http://computationalculture.net/field-report-for-critical-code-studies-2014%e2%80%a8/ ; Mark C. Marino,*《關鍵程式碼研究》(Critical Code Studies)*(Cambridge, MA: MIT Press, 2020)。
[^Arns]: Inke Arns, 「解讀_我、編寫_我、執行_我:程式碼做為可執行的文字:軟體藝術及聚焦程式設計做為一種文字展演」(Read_me, run_me, execute_me: Code as Executable Text: Software Art and its Focus on Program Code as Performative Text)Donald Kiraly翻譯,*《媒體藝術網》(MediaArtNet)* (2004),http://www.mediaartnet.org/themes/generative-tools/read_me/1/ 。
[^OHP]: 有關開放人文出版社的更多資訊,請參閱 https://openhumanitiespress.org/ 。
[^dok]: 例如,dokieli 是一個用於去中心化文章發布、註釋和社交互動的客戶端編輯器,請參見 https://dokie.li/ 。
[^devdocs]: 請參閱 https://jupyter.org/ 和 https://devdocs.io/javascript/ 。
[^OSP]: 有關開源出版(OSP)的更多資料,請參閱 http://osp.kitchen/about 。我們對這種方法很感興趣,因為它在某種程度上打破了與傳統出版相關的分工,在傳統出版中,寫作、編輯和設計以及執行這些任務的人彼此有段距離。
[^Mackenzie]: 參見 Adrian Mackenzie 的 *《機器學習者:數據實踐的考古學》(Machine Learners: Archaeology of a Data Practice)* 前言(Cambridge, MA: MIT Press, 2017);以及 GitHub https://github.com/datapractice/machinelearners 。
[^Git]: 做為動態存儲庫,Git 消除了存放與生產之間的分野。有關 Git 的更多資訊,請參閱 Matthew Fuller、Andrew Goffey、Adrian Mackenzie、Richard Mills 和 Stuart Sharples 的共同著作「Github 軟體存儲庫中的大差異、粒度、不連貫性和生產」,於 Matthew Fuller,*《如何成為Geek:軟體文化論文集》*(Cambridge: Polity Press, 2017 )。
[^graphviz]: 每章的流程圖都是用 Graphviz 程式生成的,Graphviz 是用於圖像視覺化的開源軟體。所有原始碼都在 GitLab 存儲庫的「graphviz」文件夾中。請參閱 https://graphviz.org/ 。
[^diagram]: Stephen Morris 和 Orlena Gotel,「流程圖在應用數學早期自動化中的作用」,*《BSHM 公報:英國數學史學會雜誌》(BSHM Bulletin: Journal of the British Society for the History of Mathematics)* 26,N°1(2011 年 3 月):44-52, https://doi.org/10.1080/17498430903449207 。
[^shiffman]: 我們感謝許多教育工作者以各種方式呈現本書所依據的程式碼。我們要特別感謝 Daniel Shiffman 的 The Coding Train YouTube 頻道,該頻道提供了出色的創意編碼教學,讓我們以一種易於理解的方式學習程式設計。由於教學影片中清楚地涵蓋了基礎知識,學生也發現更容易消化本書中的內容,進而提供空間讓替代形式能夠發生。
[^dual]: 我們在此(再度)參考了 ReadMe 藝術節系列,以及 Runme.org 軟體藝術庫,http://runme.org/ 。
[^papert]: 由身兼數學家、電腦科學家、教育家的麻省理工學院教授 Seymour Papert 首先提出的一個概念,他為一種名為 Logo 的程式設計語言創立了一個設計原則。參見 Seymour Papert,*《心智激盪:兒童、電腦和強大的想法》*(New York: Basic Books, 1980)。
[^readcode]: 批判性程式碼研究領域將原始碼視為一種文化文本,用於批判性閱讀和解釋,超出了對程式碼在技術和功能上工作方式的理解。請參見 Marino,*《批判程式碼研究》(Critical Code Studies)* 。
[^kitchen]: 開源出版(OSP)的頁面及筆記請參照 URL:http://osp.kitchen/ 。
[^situatedness]: 所謂的「情境知識」,我們參照了唐娜・哈洛威(Donna Haraway)和其他更廣泛的新物質女性主義領域著作,他們從虛假的萬用性和客觀的知識形式之外進行思考。 參見 Donna Haraway,「情境知識:女性主義中的科學問題和部分視角的特權」(Situated Knowledges: The Science Question in Feminism and the Privilege of Partial Perspective)。*《女性主義研究》(Feminist Studies)* 14,第 3 期(1988 年):575-599。
[^teaching]: 你可以在這裡找到近年來美感程式設計的課程課綱和雜亂筆記: https://gitlab.com/siusoon/aesthetic-programming/-/tree/master/ 。
[^barad]: 我們在此引用了新物質女性主義,尤其是凱倫・巴拉德(Karen Barad)的思想,「一起/分開」剪輯(cutting "together/apart")提供了橫跨電腦科學、藝術、文化研究、批判理論和軟體研究等領域的啟示。請參見 Karen Barad,*《在中途遇見宇宙:量子物理學和物質與意義的糾纏》(Meeting the Universe Halfway: Quantum Physics and the Entanglement of Matter and Meaning)* (Durham, NC: Duke University Press, 2007)。
[^fork]: 整個存儲庫,包括所有程式碼範例的文本、原始碼和流程圖,目前做為具有知識共享許可的開源計畫存放在 GitLab 上。如果您有 GitLab 帳戶,我們鼓勵您分叉、複製副本或下載整個存儲庫(按下載圖標)。請參閱 https://gitlab.com/siusoon/Aesthetic_Programming_Book。
[^gabrys]: Jennifer Gabrys 在 *《如何使用感應器做東西》(How to Do Things with Sensors )* 的介紹中概述了她的「如何做」方法(Minneapolis, MN: University of Minnesota Press, 2019)。我們也想沿著這方向做一些事情。
[^Benjamin2]: Walter Benjamin,「作者做為生產者」(The Author as Producer)[1935],引自 Geoff Cox 和 Joasia Krysa,編輯的 *《工程的文化:作者做為(數位)生產者》(Engineering Culture: On the Author as (Digital) Producer)*(New York, Autonomedia, 2005), 22。