我們最近在EEWeb在網站上發佈了Thomas (Tommy) Gartlan的一篇文章「以狀態機方法去除按鍵彈跳」(Debouncing Push-Buttons Using a State Machine Approach);文章一上線我就很開心地寫email通知作者,他卻回覆我文章內容看起來有點問題:某處程式碼的縮排(indentation)不見了,影響了可讀性。

他在回信中寫道:「這有點諷刺,因為我那些可憐的學生們總是被我唸說寫程式碼要注意縮排,才能讓可讀性更好。」

說真的我有點驚訝,因為在編輯文章時這段程式碼看起來很好;於是我回頭檢查,發現確實有問題:

EDNT180925_code_NT01P1

這段程式碼本來是有縮排的,現在沒了!
(來源:Max Maxfield)

我一邊捶胸頓足,一邊手動重新縮排所有內容;但在網站後台管理系統(CMS)儲存好之後,我打開瀏覽器檢查修改好的版本,發現縮排又不見了。

然後我去檢查另一篇文章的程式碼,結果是一樣的;這讓我很失望:

EDNT180925_code_NT01P2

該縮排的都沒有縮排,讓人欲哭無淚
(來源:Max Maxfield)

接下來只能在CMS檔案中尋找原因了;這次我查看原始HTML程式碼,希望只是漏了<pre>和</pre>標籤,它是用來保留多餘Space的,但是標籤並沒有漏掉;那到底是什麼原因讓Space不見了?此時此刻,我的IT同事還在查看這個問題。上面顯示的那段程式碼原本是這樣的:

EDNT180925_code_NT01P3

這段程式碼本來縮排了4個Space
(來源:Max Maxfield)

好吧…這些都不是我想說的重點;在調查問題的過程中,我得知Tommy是用Tab鍵來實現縮排的;輸入程式碼時使用Tab鍵確實比較省事,但是30年來,我一直被告知要「慎用」Tab鍵,因為不同的系統可能用不同的方式詮釋它們。

某個系統可能認為Tab代表四個Space,另一個系統則可能被設置為代表8個Space。但如果總是使用Space鍵來縮排就不會有歧義。我把這些話告訴Tommy,他的回覆是:

「我得承認以前從沒聽過不要使用Tab鍵這種說法;使用Tab鍵縮排很容易,但我們確實可能會遇到麻煩。某些IDE工具會自動執行縮排,因此檢查它們是使用Tab鍵還是Space鍵應該會很有趣。」

不久之前,嵌入式軟體開發業者Barr Group向我介紹了嵌入式C語言編碼規範(The Embedded C Coding Standard);Michael Barr跟他的同事們建立此規範的最主要原因,是為了減少嵌入式軟體(即韌體)中的錯誤(bug)數量,包括由維護人員添加或修改的程式碼。

該標準有兩點讓我印象深刻: a. 縮排時始終使用Space鍵,不要用Tab鍵; b. 最佳縮排是四個Space。

當然,我向Tommy介紹了Barr Group的編碼規範之後,他的回答是:

「我現在絕對只用Space鍵,因為使用Space鍵的人會賺更多錢...我可不是開玩笑!」

什麼!真的嗎?這我倒是前所未聞;Tommy為了證明他沒有瞎說,叫我到StackOverflow.blog上看一個調查報告…這真是非常有趣:在Stack Overflow的2017年開發者調查中,共有6萬4,000多名受訪者,其中有28,657位「職業程式設計師」回答了這個「Space或Tab」問題,又有1萬2,426位受訪者回答了他們的薪資水準。

調查結果顯示,有40.7%的受訪者使用Tab鍵,41.8%使用Space鍵,而剩下有17.5%受訪者是兩種都用。偏好Space與偏愛Tab的人數幾乎完全相同,這很有意思;但如果你看一看他們的薪資水準就更有趣了──結果顯示「使用Space進行縮排的程式設計師比使用Tab的人賺得多,即使他們的工作年資相同。」

更具體來說,使用Space鍵的程式設計師比使用Tab鍵的程式設計師薪資高8.6%,這相當於一個工作年資多2.4年的程式設計師多出的薪水。

EDNT180925_code_NT01P4

下圖表明,無論是在美國、印度、英國、德國、加拿大或其他國家和地區,都是如此。

EDNT180925_code_NT01P5

針對這一調查結果,美國的程式設計師們反應熱烈,紛紛發表了自己的觀點。

@ Rick Curl 哇!這個以前誰知道?以後我不要求加薪了,只要在程式碼中多插入Space就行了!

@ Elizabeth Simon 但是用Tab鍵更方便...因為在增加和刪除縮排時按鍵次數少。

必須承認,我來自從前的老學校,那時Tab鍵統領天下(我開始學的是組合語言),但是如果使用Space更賺錢的話,我準備改了,哈哈…

當然,我最喜歡的編輯器(Notepad ++)是使用Tab進行自動縮排的,所以要改可能有點難...

@ Sean Ellis 要麼使用Tab鍵,要麼使用Space鍵,想透過按Tab鍵來得到4個Space可不太好。如果輸入錯誤並按「backspace」鍵來刪除,你確定所有4個Space都刪除了?而大多數自動完成機制比這還糟。

編譯:Jenny Liao, EDN China

(參考原文:Spaces vs. Tabs? Coders Who Use Spaces Make More Money!, by Max Maxfield;本文原刊於EDN姊妹刊,ASPENCORE旗下EEWeb網站)