(原文作者為美國軟體公司 MuleSoft 技術副總監兼作家 James Donelan

幾周前我在 MuleSoft 的團隊做了一支影片介紹程式設計師在公司的工作內容。影片裡我提到他們都像藝術家一般,看完影片的人對這個有趣的比喻提出許多問題和意見,希望我能針對這個概念再多所著墨。

 

工作的時候我寫程式,閒暇的時候我畫畫。就我在職場的觀察和個人經驗來說,程式設計師和藝術家有很多相似點。

我不是唯一這麼想的人,Y-Combinator 的創辦人 Paul Graham 幾年前寫過一篇名為「電腦高手與畫家」的文章。文中寫道,有人在得知對電腦有興趣的人竟然也對藝術有興趣後,覺得十分詫異。

他們認為電腦高手做的是冷冰冰、死板板、講究精準和程序的工作;相較於此,畫家需要更多創意的揮灑。Graham 認為這是不正確的描述,他反倒認為在眾多工作中,電腦高手和畫家的工作性質最相近

  • Coder 和藝術家的相似點

編輯器就是空白畫布

藝術家用一塊空白畫布表現創意。他們先在大腦進行抽象思考,再用心和手進行創造。

程式設計師也一樣,他們先找到一個抽象難題,再透過程式碼解決。整合開發環境 (IDE) 或 vim 編輯器的新專案就是他們的空白畫布。

透過調整臻於完美

作畫是一個透過持續調整以臻於完美的創造歷程,畫家由素描開始逐步增加細部描繪,但這不僅是填補的動作,因為畫家腦袋裡最初的想法會不斷改變。

透過 X 光我們看到畫家在作品完成前不斷地更動、調整,有些畫到最後甚至和原來的草稿完全不同。

開發軟體也是先在白板上草擬構想,程式設計師再用程式碼不斷嘗試。路徑錯了就回頭檢視、修改,有時甚至拋棄原有的想法,再從零開始。

他人啟發

畢卡索有句名言:「好的藝術家會抄,偉大的藝術家會偷」。不管是直接影響或是透過旁人和媒體的傳播,許多有名的藝術家深受前人作品啟發。

梵谷敬佩林布蘭和多雷等藝術家,並且研究這些前輩的作品。據說他曾臨摹 21 件米勒的畫作,梵谷的「午睡」(Rest from Work) 即是受米勒的「午睡」(Noonday Rest) 影響。

安迪沃荷「最後的晚餐」是受達芬奇「最後的晚餐」啟發,他有 100 多幅作品是參考達芬奇的名作。

程式設計師也和藝術家一樣受到他人啟發。只要使用 Google 搜尋手邊的難題是否已經有人處理過、並且重複利用前人想出的解決程式,就可以為我們省下數天到數週的工作時間。

許多程式設計師也在 GitHub 上改良程式。也就是說,我們使用開放原始碼的程式並加以改良、我們在 Twitter 上與同業切磋、我們向成功解決程式升級的公司看齊,並從他們公開的進階設計上學習。在軟體開發的社群裡,透過他人的創意和成就思索進步再尋常不過。

戴上耳機就像入定

程式設計師員戴耳機是有原因的,撰寫程式碼需要全神貫注達到入定,而他們進入這種境界時的產出力最高。

此時的他們會有時光轉瞬而逝的錯覺,但絕妙的點子、繁瑣又複雜的程式碼會自然迸發。藝術家也常有類似的入定經驗,他們會花上數小時、數日做同一件作品。

程式碼是程式開發員手中的陶土

影片中我提到,程式碼像程式設計師手中的陶土一般,透過不斷調整程式碼,「捏塑」出完美的軟體。在東修西補後,程式設計師的成就感隨著軟體成形油然而生,這和雕塑家捏陶的過程並無二致。

讓人驚艷的作品往往曠日廢時

要創造讓人驚艷的藝術作品耗時費力。有的藝術家幸運地只需短時間就可以做出好作品,但大部分的藝術家不是如此。達芬奇花了 14 年完成「蒙娜麗莎」,迪妃奧也用了 8 年完成重達 2300 磅的「玫瑰」,這幅畫最後必須動用起重機才能運出狄妃奧的家。

寫出令人驚艷的軟體也需要數月、數年的時間,程式設計師像藝術家一樣,在突破瓶頸前也有腸思枯竭、瀕臨放棄的時候。但是藝術作品最後在藝廊展示,軟體則隨著時間推移逐步發表,它先在使用者介面設計模組 (MVP) 產生,歷經數年的更新改良後,最終完成程式設計師心中的夢幻軟體。

藝術畫作和軟體一樣經不起時間考驗

藝術畫作經年累月後會有腐爛的危機,所以我們需要藝術修復師;軟體則是隨著時間而出現技術債 (technical debt) 的問題,最後變成既有程式碼 (legacy code)。

也就是說程式碼在缺乏維護、修護、更新下導致降級,終至無法運作、難以為原創者以外的人所理解。這也是程式設計師必須重構、更新程式碼,以解決技術債的原因。所以重構之於數位圈就相當於藝術修復工程之於藝術圈。

  • 許多程式設計師都是藝術家

Ruby 社群的程式開發員裡有許多藝術家

例如被稱作「為什麼是這幸運傢伙 (Why the lucky stiff)」的 Jonathan Gillette 是個多產的作家、漫畫家、藝術家和電腦程式人員,在 Ruby 社群裡也被視為重量級人物。

既是 Ruby 程式開發員又是 DJ 的 Giles Bowkett,在這支影片裡介紹 MIDI 生成器編碼並且談論藝術和程式開發員的關係。

許多程式開發員認為程式設計和藝術的界線越來越模糊,現在的網路程式開發員需要有設計技巧、會使用 Photoshop、架構頁面和內容、了解網路美學和適應性網頁設計。

去年我在舊金山現代美術館 (SFMOMA) 看了媒體藝術家 Rafael Lozano-Hemmer 的展覽。這位藝術家崛起於 1990 年代,在這場名為「頻率與體積」的影音裝置展中,觀展者透過投射在牆上影子的大小、位置與影音裝置互動。參與者可以利用身體調頻,收聽商業音樂、警察廣播、空中交通控制等公、私營電台的內容。

這是唯有藝術家具備藝術、工程、程式設計的綜合技能,才有可能創造出的作品。

Coder 也需要靈感、創意

程式設計人員需要具備分析能力、科學能力,以及追求精準。但這些僅是這個工作需要的部分特質而已。

它還需要靈感、創意、深思和技巧,才能將程式碼編寫成經得起時間考驗的藝術作品。所以電腦高手和畫家比我們想像得還要相像許多。

(資料來源:VentureBeat ; 圖片來源:iLikeSpoons , CC Licensed)