跳到主要內容

寫 code 與寫作的相似處

                            


時常覺得,這世界上所有的事物都是一脈相承的。同一個道理,放到很多不同的地方都有異曲同工之處。我以前是一位 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. 後天努力)

備註:本文授權轉載自【工程師作家的轉職人生】部落格臉書粉絲頁





留言

  1. "最厲害的工程師,能將 100 行的 code 用 10 行寫出來,而且程式還跑得更快、更有效率" -- 我覺得也要這10行是 "maintainable"。
    e.g. for loop 從 int i... 的基本款改用 for iterator 來處理,更簡潔漂亮,也一定程度上讓 boundary check 更安全,最重要的是易讀性完全不影響。
    反之看過有些 code 真的很炫技,但讓接手的人不好維護,反而造成痛苦 orz

    回覆刪除
    回覆
    1. 同意!這是很重要的一點。寫文章也是,也不能為了刪字而刪字,最重要是要別人看得懂!

      刪除
    2. 如何平衡取捨也是門藝術啊(還有變數命名XDD)

      刪除

張貼留言

這個網誌中的熱門文章

什麼是 Assertiveness? 你容易被情感勒索嗎?

來到美國後我才第一次聽到 assertive 這個單字。美國人將 assertiveness 視為很高的美德,因為那代表一個人具備足夠的自信、溝通技巧、人際成熟度,以至於能夠堅定、清楚地表達自己想要的與不想要的,卻不會因此傷害他人或顯得傲慢、無禮或威脅他人。 Psychology Today  是這樣定義 assertiveness 的: “Assertiveness is a social skill that relies heavily on effective communication while simultaneously respecting the thoughts and wishes of others. People who are assertive clearly and respectfully communicate their wants, needs, positions, and boundaries to others.  Individuals who are high in assertiveness don't shy away from defending their points of view or goals, or from trying to influence others to see their side. They are open to both compliments and constructive criticism. ” (「Assertiveness 是一種社交技能,依靠的是在有效溝通的同時尊重他人的想法及需求。Assertive 的人能清楚且尊重他人地說明自己的需求、渴望、處境以及社交界線。擁有 assertive 特質的人會積極地說服他人了解自己的觀點,也積極地爭取、辯護自己的想法。他們對於讚美及有建設性地批評同樣地歡迎。」) 美國人如此看重、欣賞的 assertiveness 這個單字在中文卻似乎沒有相對應的翻譯。Google translate 將 assertive 翻成「斷言的、斷定的、過分自信的」;我覺得這些翻譯充滿負面含義且非常不正確。 生長在台灣的我,認為台灣確實沒有 assertiveness 的文化。我觀察到的台灣人,普遍很少直接說出自己想要什麼;如果說出來,

花九個月,靠自學轉行軟體工程師 -- 我所用的網路資源

by Vanessa Wang       歡迎支持我的臉書專頁:【 工程師作家的轉行人生 】 因為身邊有許多半路出家的軟體工程師,包含我老公,我一直抱持著或許某天我也要轉行當軟體工程師的想法。但我到了成為媽媽、小孩快一歲的時候,我才開始自學寫程式。 從 2018年底開始,我花了九個月的時間自學寫程式,並於 2019年七月成功轉行、找到了在加州矽谷全職軟體工程師(front-end web development)的工作。我沒有參加 bootcamp,就是在網路上找資源、自修。我是台大土木工程碩士畢業,後來到美國讀創意寫作碩士。成為軟體工程師之前,我沒有在職場上當過工程師,以前主要的工作以當 technical writer 寫技術文件為主。( 更多關於我轉職的動機、轉職前的履歷 ) 這篇想整理一下我自學期間用過的教材、工具,但這些都僅供參考,畢竟每個人的狀況、目標都不一樣。我始終相信「盡信書不如無書」。我這九個月中學到最重要的一件事就是凡事要有自己的想法、相信自己。像我這樣的文章網路上有很多,每個人用的方法都不太一樣。參考別人走過的道路很好,但更重要的是規劃最適合自己的一條路,然後自信地走下去。 以下就是轉行的路上,對我最有用的網路資源、工具: 一篇 Medium 上的文章 by Andrei Neagoie  這篇文章叫做  Learn to code in less than 5 months, get hired, and have fun along the way 這是我還在當 technical writer 時,某天上班無聊隨便 google 找到的。那時候還不太確定自己要不要轉行軟體工程,所以常常在網路上參考他人的經驗。我不時地都會回來看這篇文章,這篇文章可以說是貫徹我自學期間的一個中心思想。我很欣賞他的理念,尤其是以下這段話: “I spent the first month avoiding any tutorials or books. Instead, I spent this month looking at the best way for me to learn and get hired. I studied other people’s experiences, looke

是不是要「很聰明」、「數學很好」才能寫 code?

在我去年開始自學寫程式之前,我常常問是軟體工程師的朋友:「寫 code 很難吧?感覺超難懂。」在我心目中,寫 code 跟「數學能力」最有關係。 有趣的是,凡軟體工程師給我的回答,幾乎都一樣:「不會呀。學寫 code 就像學英文、日文那樣,就是一個語言。」 但我不是很能夠被這個答案說服,因為我以往跟程式語言的歷史告訴我,寫 code 是很困難的。我從高一第一次接觸 C++,到後來大一上土木工程系的必修課也是修 C++,經驗都蠻慘的,因此我就宣判自己沒有寫程式語言的天份。直到去年我從零開始再次透過線上課程自學寫 code,我才終於體會朋友們說的「學 code 就像學任何一個異國語言一樣」這句話的意思。 就從我高一的時候,第一次接觸程式語言的故事說起吧!那時是我學校的物理老師鼓勵我學程式語言的。他以完全免費的方式輔導我在假日期間學 C++,大概也是看到我對理工科有興趣,想說我可以自學寫一些小程式、搞不好還能參加什麼比賽之類的。於是他給我開了書單,讓我買了兩大本比字典還厚的 C、C++ 教學工具書(這種書現在還存在嗎?)來看,並且給我出功課,要我自己研究怎麼做出一些程式。 但朽木如我,一直碰壁,步步都感到挫折。那時的我,還不知道怎麼「自己找答案」,因此我心中一直期待老師可以好好示範他到底要我做什麼,因為我連他出的功課的題目、他到底想要我做些什麼我都不了解,也不知道從何問起。現在回想起來,老師心中一定是想:「這有什麼難的?自己看書,看不懂去找答案,不就這樣嗎?實際做做看、做不出來用力想直到做出來為止,難道還要手把手教學嗎?」但要知道那時候的我,雖然很喜歡數學、物理,理工能力不差,但「電腦」對我而言,就是一個玩接龍和踩地雷的工具,因此我連怎麼按照書上的說明去設定寫程式的環境都搞不清楚。 總之,第一次學寫程式的經驗,就在我心中無限多個黑人問號中無疾而終。直到上了大一又再次遇到 C++。 這次我以為我可以學得比較好,畢竟這是我第二次跟 C++ 碰面了。我們用的課本,再次是那種厚得令我第一天就把它切割成三分的工具書。但豈知第一堂課老師也就講完差不多三分之一本課本,一下就上完一、兩百頁的進度。 「等等啊!」我心中吶喊。第一堂課我們就從 Hello World 上到 for loop,而且是雙層的 for loop, 因為要用程式語言畫出這個形狀: