這是 2014-04-27 在 TEDxTaipei 與 Linda Liukas 座談前的演講內容。
中文投影片 & English Transcript.
感謝琳達分享引人入勝的故事。有幸獲邀來到這裡談談「程式語言與 RailsGirls.tw」,我想先從一些程式語言的故事開始說起。
我們都知道,Rails 構建在 Ruby 語言上。松本行弘創造 Ruby 語言時,混合了他最喜愛的五種程式語言: Ada、Eiffel、Lisp、Perl、Smalltalk。
因為演講只有 20 分鐘,沒辦法五種都涵蓋,所以讓我們先從 Ada 開始說起。Ada 位列名單之首,不僅是因為它的名字以「A」開頭,更因為它是根據世界第一位程式人愛達‧勒芙蕾絲(Ada Lovelace)而命名的。
1842 年,愛達為分析引擎(Analytical Engine,第一部通用電腦,設計一個世紀後才製造出來)寫了程式。不只如此,愛達也是首位意識到電腦不僅限於處理數字的人,也預言了未來人們可以在電腦上創作音樂和藝術。
愛達的母親安娜貝拉,是一位早慧的數學研究者。愛達的父親是偉大的浪漫主義詩人拜倫,他為妻子取了個綽號叫「平行四邊形公主」,因為安娜貝拉具有嚴格的道德觀,嚴謹的程度有如數學公式。
程式設計這門藝術,正是融合了數學和詩詞。好的程式就像數學公式,既嚴謹又正確。程式設計者的工作,卻和詩人相似——我們運用語言來創造,以簡潔的方式陳述使命,而且我們會互相激發靈感,來繼續彼此的工作。
正如迪科斯徹教授所說: 「除了熱愛數學之外,專業程式人最重要的,就是精通自己的母語。」
數學家和詩人都需要一致的願景,來引導自己的工作,這原則也適用於專業程式設計:如果沒有一致的願景和完整的設計概念,馬馬虎虎的程式很快便會變得難以維護,以致當你試圖修復一個錯誤時,會導致更多錯誤產生。
然而,專業程式設計並不是唯一的一種程式設計,甚至不是最流行的一種。近二十年來,全球資訊網上最知名的語言是 JavaScript。它是一種「腳本語言」,雖然很容易上手,但亦因此很容易編寫出馬虎而且充滿錯誤的程式。
腳本語言(Scripting Language)和編程語言(Programming Language)的區別,可以追溯到 20 世紀 70 年代。當時跨平台的 C 語言出現,幾乎能在所有電腦上運行。貝爾實驗室的電腦科學家用 C 寫下幾百個程式,它們串接成一個複雜的作業系統,也就是 Unix。
Unix 系統的一般用戶通常不會寫 C 語言,他們寫的是「shell 腳本」,寫法簡單(通常只是一系列的指令),但一旦複雜起來,就變得很難維護。
在 80 年代當中,複雜強大的編程語言繼續出現,如 Objective-C 和 C++;也出現了簡單但能力有限的語言,如 sed 和 AWK。
這是一個線性光譜,中間是一片荒蕪。如果腳本變得過於複雜、無法維護,人們會用「真正」的編程語言(如 C++)重新編寫。
1987 年,拉里·沃爾說:「我們可以打破這道光譜,把它想成一個二維空間。」他看到 C 善於「Manipulexity」,也就是操縱複雜性的能力,而 shell 則善於「Whipuptitude」,也就是信手捻來、一揮而就的能力。
Perl 誕生在這個新發現的空間當中,它可以兩者兼顧,也可通過重新定義自己的詞彙,來進行演化。隨著時間推移,Perl 的「信手捻來力」已經變得比任何 shell 腳本都要更好,至於其「複雜操作力」,除了規模最大的程式之外,也與 C++ 和 Java 在伯仲之間。
因此,Perl 程式員可以先寫出簡單的腳本作為開端,然後通過「重構」技巧,逐漸使之變得更加嚴謹和正確,而毋需切換到不同的語言。
90 年代,受 Perl 影響的新一代語言出現,如 Python、PHP 和 Ruby。它們向著各自的領域比 Perl 更進一步;我認為 Ruby 是三者中最靈活的一個。
2005 年, Rails 專案把伺服器端的 Ruby 和客戶端的 JavaScript 結合成全端的網站服務框架。對於很多使用 C++ 或 Java 工作的人來說,Rails 首次展現出所謂的「腳本」語言,也可以構建比當代「編程」語言更宏大、更複雜的網站程式。
Rails 之所以成功,部分原因是它使用 Ruby 的「元編程」特性,將語言本身改編為適合特定領域的一家之言,例如 ActiveRecord。
此後盛行的框架,例如 jQuery 和 AngularJS,也對 JavaScript 採取了同樣的方式,把它改編成更嚴謹、更安全的語彙,來表達我們的願景和設計概念。
來到 2010 年代,Rails 採用了 CoffeeScript 這套程式語言,來搭配內建的 jQuery 框架。CoffeeScript 將與 Ruby 類似的語法,編譯到 JavaScript 的「優良部份」。這是元編程概念的一個延伸——改造一套語言,保留它最好的部分。
Perl 社群的朋友接力將 CoffeeScript 改造成 Coco 語言,Haskell 社群的朋友再將 Coco 接力打造成 LiveScript。如今,我大部分的程式都是以 LiveScript 撰寫,它讓我用像 Ruby、像 Perl,或是像 Haskell 的方式,來表達相同的願景,端視哪種方式最適合當下的詩意,噢,應該說是語意才對。
以上就是關於 Rails 和程式語言的故事。接下來的部分,我想談談 Rails Girls 中的「Girls」(女孩)部分。
20 世紀上半葉,致力爭取婦女權益的運動者,已經在法律上取得不少勝利,為世界上許多人在投票權、教育權、個體經濟、結婚和離婚等事宜上,帶來平等待遇。
然而,這種法律上的平等並不代表實質的平等。正如西蒙·波娃在 1949 年所觀察到的,許多社會並不是用法律來貶低女人,而是靠語言和行為上的「他者化」(Othering)。因為男人被認定為預設主體,社會對待女人的方式經常將其視為「他者」,也就是異於預設。
70 年代,社會工作者和思想家應用此想法,觀察出各種社會構建的期望,統稱為「性別角色」。比方說,某個社會可能將婦女限制為兩種主要角色:「女孩」角色——可愛、欲望的對象,與人無害,但處於弱勢地位;或者作為「母親」角色——照顧者、提供情感支持,以及生殖媒介。
這裡缺少的是什麼?當然就是每個人對自己命運的期望。每當我們與加諸於己身的社會角色發生衝突時,就會感受到社會壓力。
要解決這個問題,需要採取一個願景: 人的命運不應受生理構造的支配。從實務上來說,我們可以再次引入「Script」和「Program」這兩個概念,從社會研究的角度來定義它們。
拉里‧沃爾在 2007 年的講座裡這樣說:「如果我們回到過去,問愛達‧勒芙蕾絲說 Script 和 Program 之間有什麼區別,愛達可能會笑著說:嗯,劇本(Script)是給演員看的,而程序(Program)是給觀眾看的。愛達的確是位聰明的女士……」
在這裡我們可以看到,所謂的社會「劇本」就是身處某個角色中的人,被要求採取的行動。相反的,社會「程序」則設定了參與者對「正常狀態」的期望,但並沒有像劇本那樣,規定人們的行動方式。
舉個具體的例子,1994 年當我剛剛開始進入資訊領域時,是一間小出版社「資訊人」的網站管理員,透過 BBS 在線上工作,有時也會到辦公室。出版社的工作者們,要不自己就是同志,不然就是支持 LGBTQ 族群的人。那是一個安全的空間,讓我能探索自己的性別表現。
出版社在 1995 年改組成「資迅人」軟體公司,我擔任技術總監時,開始參與全球自由軟體社群的工作。當時台灣本地的軟體業的性別還算平衡,但當我發現線上的自由軟體社群全是以男性劇本為主導時,不免大喫一驚。
不久之後,我發現許多女性朋友在自由軟體社群的論壇和聊天室中,都使用男性化的網名。這並不是因為他們喜歡這種性別表達方式,而是作為一種防止騷擾的自保策略。這顯然是個問題。
1998 年,開源運動(Open Source)方興未艾,我在矽谷、中國和臺灣幫忙新創公司,也開始參加實體的開源聚會、四處演講。此時我不禁注意到,這些聚會的成員無論在性別表現,或是族裔組合上,都非常單調。
舉例來說,我在這些聚會裡,好幾次聽到這樣的詰問:「你是跟男朋友來的嗎?」,但從來沒聽過「你是跟女朋友來的嗎?」或是「你是跟伴侶一起來的嗎?」——這顯然是個社會劇本,讓聽者感到自己是「他者」、局外人,而不是會議的參與者。
之後,我回臺灣參與開放文化社群的工作時,即開始有意識地在我所有的中文網路著作中使用女性代名詞,試著扭轉語言「他者化」的局面。
2003 年,我們開始組織自己的聚會時,我費心邀請了最友善、最有同理心的國外講者群,來幫助我們建立更放鬆的氛圍,讓參與者得以享受安全的空間。
然而,隨著開源運動在商業領域盛行, 資訊界的「商展」文化也逐漸開始影響會議的文化。一方面是攤位的走秀模特,由廠商聘來吸引目光;另一方面是演講內容中使用性意象的問題,甚至出現在自由軟體和開源社群的某些知名講者上。
2009 年,長時間活躍於 Perl 社群的朋友 Skud 開始巡迴演講,在各大會議上指出這個文化問題。Skud 創立了「Geek Feminism(技客女性主義)」的共筆與部落格平台,讓我們可以紀錄問題,並共同努力加以改進。
經過一年的努力,參與共筆的朋友們推出「行為守則」模板,也就是設定聚會上行為規範的社會「程序」。2011 年,兩名來自 Linux 社群的 Geek Feminism 貢獻者瓦萊麗‧奧羅拉和瑪麗‧加德納共同創立了「Ada Initiative」,全職投入支持女人參與各式開放科技與文化社群的志業。
在許多貢獻者的幫助下,Ada Initiative 與超過 100 個組織單位合作,幫助他們為會議的行為守則做出承諾。我很高興能看到即將舉行的「Rails Girls Summer of Code」活動也名列其中。
行為守則由三個要素組成:
- 常見,但不能接受的行為之具體描述(如性別歧視的笑話等)
- 如何回報此類事件
- 對處理此類事件的承諾
有了這些,人們才能在安全的空間裡,意識到自己習以為常的社會劇本對彼此的影響,進而重構出一個更能持續發展、以開放性和多樣性作為長遠願景的社群。
Ada Initiative 持續舉辦活動,我們在 Geek Feminism 共筆上也有各地的資源與社群,希望各位有空時可以來網站上看看。
對我來說,最具啟發性的也許不是「守則」本身,而是「一起編製程序」,也就是將它調整成最適合地區文化的過程。
當我們為社群參與者創造出安全空間,來觀察和決定我們自己的社會劇本,我們就可以編製出共同的社會規範,既嚴謹又創新——就像是最好的公式、詩詞和程式那樣。
最後,我想與大家分享一下我的兩段詩詞節錄:
I would like to know you
not by your types,
classes or roles —
— but by your values.我想認識你的
不是型別、
類別或角色 —
— 而是心中的價值。Saying "Life is what we make it to be",
is like saying "Language is what we make it to be" —
True, but not at once;
— just one bit at a time.說「生命的意義要自己創造」
就像「語言的定義自己創造」:
對,但不能一蹴而及,
只有篳路藍縷。
謝謝大家。