時常覺得,這世界上所有的事物都是一脈相承的。同一個道理,放到很多不同的地方都有異曲同工之處。我以前是一位 technical writer,現在是軟體工程師兼業餘作家,最近便發現寫文章和寫 code,真的有很多相通的道理。
曾經在美國馬里蘭大學當講師,教一門大三必修課:technical writing。我叫學生看一本在我心目中是關於「寫作」最棒的一本書,叫做 On Writing Well。
這本書的一個重點,就是寫作時要用力地砍掉贅字。舉個例子來說 "a tall skyscraper" 這個片語中,"tall" 就是多餘的,因為高樓大廈不可能是矮的。同理,電視上常聽到諸如「進行確認的動作」這種中文,其實用「確認」二字表示就可以了,其他都是贅字。
我跟學生說,寫作要盡可能達到 "simple",不要寫又臭又長的句子。我讓學生們在課堂上分組練習把一段冗長、囉嗦的文字改到最簡潔有力。
有學生反駁我的說法。「為什麼要寫 "simple" 的句子?是設定讀者是白癡,所以故意用很簡單的詞彙、句型,怕他們看不懂嗎?」
想了一下,我發現我用 "simple" 這個字確實容易引起誤會。
「我指的 simple,是指 elegant。寫作要盡可能達到優雅,而優雅的文字,常常就是最讀起來最簡潔、清爽的句子。」
透過課堂練習,學生們發現,十個句子的段落其實用六句話就能表達相同的意思。有二十個單字的句子,又能再砍掉五、六個贅字,使得句子更好懂、更有力。當然刪贅字並不是畫掉多餘的字詞那麼簡單的一件事,而是認真地去思考:整段話想要表達的到底是什麼?從而重新架構思路,以更優雅的方式呈現文字。這個「砍字」過程包含了尋找更精準的詞彙、使用更生動的動詞、將一些被動句型改成主動句等等。當然也要適可而止;如果只是「為了刪字而刪字」,把原本的文章改到沒有人看得懂,自然也是不行的。
這幾天在工作上我開始使用 React Hooks。這個 2018 年推出的 React 新語法,讓原本需要用 class 來寫的程式都變成 pure functions。同時,set state 及 React life cycles 的寫法,都變得更優雅、簡潔、並且架構扁平好閱讀。
常聽人說,最厲害的工程師,能將 100 行的 code 用 10 行寫出來,而且程式還跑得更快、更有效率。寫 code 追求的簡潔、有效率,自然讓我聯想到寫作時我追求的 elegance。這種簡潔、素雅的境界是我非常喜歡的,因為即使在生活中,我也是個崇尚化繁為簡的人,例如說,書本如果能在圖書館借到我就儘量不買,這樣看完把書還回去後,家裡也不會多一樣東西。
寫 code 與寫作有許多相通的道理,但有一個地方很不同,是我仍然在習慣、學習的。寫作時,我是唯一的作者,我只要考慮我的讀者能否看得懂、喜歡我寫的就好了。相對的,寫 code 時,我一方面是寫給電腦看的、要用電腦看得懂、容易執行的方式呈現;另一方面,我也是寫給別的工程師看的,而且這些工程師還是我的「共同作者」,我必須顧慮到如何寫 code 才能讓他人容易懂也方便共同創作。
最後來說一下我觀察到的「程式語言」與「人類語言」之間的差異:
身為軟體工程師比較辛苦的一件事就是必須終身學習,因為技術分分秒秒都在改變,不跟上潮流就會被淘汰。但最近使用 React Hooks 讓我發現,程式語言不斷演化是一件美妙的事情,我應當用欣賞的角度來看待科技的日新月異,畢竟這新的語法幫助我達到更為優雅、簡潔的 code。身為一位作家,我自然是很喜歡「語言」的一個人,但跟電腦程式語言相比,人類語言的演化就沒有辦法那麼有「目的性」地朝著更簡潔、有效率的方向前進。好比說英文這個語言,有許多單字的拼法非常不直覺(試想 island 這個字),也有許多人提議把所有單字的拼法一起改一改變成怎麼發音就怎麼寫吧!但人類的語言要重新定義就沒那麼簡單了,許多單字的拼法、句型、口頭用語也就積非成是,只能繼續沿用下去。
當然,人類語言的有趣之處,就在於它有它自己的生命,是「不受控」、也沒有所謂的「對錯」;只要一群人用約定成俗的方式互相溝通,久了那就發展成一套有自己的邏輯和規則的語言。這和人工定義的程式語言,既有相似之處、卻又截然不同。
想要聽我完整的轉行故事嗎?
我的自傳《文藝少女的矽谷進擊》博客來連結:https://reurl.cc/GdgLNW
延伸閱讀:
是不是要「很聰明」、「數學很好」才能寫 code?
猶豫「我適合當工程師嘛?」
女生當工程師比較難嘛?
想學寫程式的我,是否太笨了?(探討先天條件 v.s. 後天努力)
"最厲害的工程師,能將 100 行的 code 用 10 行寫出來,而且程式還跑得更快、更有效率" -- 我覺得也要這10行是 "maintainable"。
回覆刪除e.g. for loop 從 int i... 的基本款改用 for iterator 來處理,更簡潔漂亮,也一定程度上讓 boundary check 更安全,最重要的是易讀性完全不影響。
反之看過有些 code 真的很炫技,但讓接手的人不好維護,反而造成痛苦 orz
同意!這是很重要的一點。寫文章也是,也不能為了刪字而刪字,最重要是要別人看得懂!
刪除如何平衡取捨也是門藝術啊(還有變數命名XDD)
刪除