寫作和寫程式的共同點:從鍵盤開始的創作過程
寫作跟寫程式,大概是最能讓我進入心流狀態的兩件事。
對我來說,敲打著鍵盤,讓手指打字的速度去替腦迴路配速,把本來凌亂、只存在於自己腦袋裡的想像力與邏輯,轉化成有脈絡的實體文字,是一件非常有滿足感的事情。
有點像玩樂高那樣吧?
把自己想像出來,該長怎樣的東西拼出來的感覺。
寫作與寫程式在這方面簡直太像了。
事實上,過去幾個禮拜,類似的想法或者事情也一直出現在我的生活裡面:
最近在 Penana 寫作,也參加平台上舉辦的創作挑戰,要每週記錄自己的寫作進度。因此也認識了一些其他作家,意外發現工程師在其中是有一定比例,甚至也有也住在灣區這邊的XD
另外,在聽 Ali Abdaal 邀請我最喜歡的作家 Brandon Sanderson 來討論寫作與寫作生涯的一集 Podcast 裡面,在談到他對於新人作家的生涯建議時,Brandon Sanderson 直接就說了他自己以前在大學也修過程式語言,覺得寫作跟寫程式非常類似 (所以如果你喜歡寫作,你大概率也會喜歡寫程式,可以考慮當個工程師)。
也突然想到以前國高中時期很喜歡的作家 Div 也是個工程師。
所以,寫作與寫程式為什麼這麼像?
工具很像,坐姿很像。就像我前面說的,這兩件事都是在鍵盤上敲打著某種語言,只不過寫程式用的是機器語言,而寫作需要用到更為複雜與精細的人類語言。
流程很像。在寫程式前,我一般會先寫一個架構,把複雜的系統拆分到更小的功能與節點來實現。寫作時,我也會先寫個大綱,確保接下來的故事,或者話題的脈絡是能達到我規劃好的目的。
目的很像。寫作與寫程式的成品,都有可預測的輸入與輸出。做為一個產品工程師,我的寫程式 (Functions) 通常都有明確的 inputs & outputs。打個比方,輸入可以是使用者點擊我的一個按鈕,輸出則是那個按鈕得做它該做的事情,也許是幫使用者打開另一個頁面,又或者是付款買東西。
對於寫作而言,這個輸入就是讀者們願意給我的時間,輸出則是讀者預期的沈浸體驗。我寫小說時的時候也許是一則有趣的、包含角色成長的奇幻故事。寫部落格時則是⋯⋯希望我沒有浪費你的時間,讓讀者(包含我自己)更了解我自己的一些想法。
所以呢?
最後,做為一個職業的軟體工程師,與希望有天能到達職業水平寫作能力的作家,我就想到這個問題——既然這兩個技能這麼像,我要怎麼利用已經爬過寫程式這座山的經驗,幫助我去爬下一座寫作的山峰呢?
簡化,簡化,簡化!所有人都知道,能夠用 100 行寫出來的程式,就不要用 1000 行去寫。精簡幫助讀我的程式碼的人容易理解,也減少了 bugs 出現的可能性。但是,這點其實在寫作上並不明顯。舉個例子,我就發現自己有時候也會「因為這個設定很酷」而硬要塞一千字的段落確保我的讀者理解某個設定,卻忽略了這一千字不只沒有推進劇情的作用,反而拖慢劇情,讓讀者感到無聊。
寫完,然後記得回頭優化程式碼 (Refactoring)。就像寫程式時,我不會期待第一輪寫出來的程式就是完美的,而是會先把一段程式碼寫完,確保輸入輸出是對的,然後再回頭更迭、優化它。可以的話,我希望自己這次重新開始寫小說,也先確保自己寫得完我規劃好的主線劇情,然後完成後,回頭檢視每一段故事節點的意義是什麼,有沒有推進劇情的功用?有沒有像是前一點說到的可以簡化的部分?
回饋與程式碼審查 (Code Review)。在公司寫程式的每一次 commit 前,一定都有同事得審查我的程式碼,在 PR 裡面幫忙偵錯與寫寫回饋,有嚴重錯誤時直接退回來給我。在寫作上,我也有幾個朋友,還有 Penana & Discord 寫作會裡少數的讀者幫忙作為 alpha readers,在我這次第一輪寫作的時候幫忙給予一些回饋。這些都應該在我第二輪回頭優化故事的時候,成為讓故事變得更好的養分。