神級 Coder 絕不犯的錯誤:為炫耀編出超短碼

本篇原文來自《Medium》,原文作者為 Allan Reyes 一名退伍軍人兼工程師。本文以第一人稱編譯。

我常逛像是 Exercism等網站,我在那裏編寫或重溫一些習題來精進我的編碼技巧。現在有個危險的流行正在蔓延,我注意到大家很推崇僅用短短幾行的代碼,認為這樣很優雅、有創意,認為這超棒。

但這完全是鬼扯。Brian Kernighan 說得很對:「想幫短碼除錯比你重寫程式還要難兩倍。如果你真的覺得自己超會寫短碼,那麼就等到你幫短碼除錯的時候再來看看是不是真的那麼厲害吧。」

當你把編碼的行數減少到令人費解時,這還會是個容易維護或可長久使用的代碼嗎?替編碼抓錯會變得更簡單還是更有難度?更重要的是,如果原來的編碼跟短碼功能一樣,那你是不是有點浪費時間呢?

較短的編碼不見得代表是更好、更清楚的編碼。當你不小心做的超過了,讓編碼變的難解,或用了模糊且不必要的模組,你可能會得對你的同事一邊裝可愛,一邊說:「我浪費超多時間在完美化與複雜化這個簡單模組,所以你現在才可以花超多時間來了解它。你不覺得這超棒的嗎?❤揪咪,編碼忍者敬上。」

這不但毫無意義而且很自私,而且完全只是種自負的表現。不必要而多餘的代碼的確不好,但短碼也不總是就是比較好。縮短編碼與簡化編碼有很大的不同,因為縮短編碼僅僅只是讓編碼變短

我們用兩種簡單 Python 計算程式來找兩個字串間的「漢明距離,又稱信號距離(hamming distance)」。漢明距離在獨立字元的計算中為不可或缺的角色。

● abcde 與 abcde 之間的漢明距離為 0
● abcdeedcba之間的漢明距離為 4
● abc 與 abcde之間的漢明距離為 2

以下是 Exercism 上被高度推崇的編碼:

這是個超棒的編碼 … … 如果你的目的是寫出混淆代碼(code obfucation)的話。

 以下是網站上很不起眼的編碼:

它用了超過 15 行以上的編碼,以及 517 個漢明距離,但讓我來解釋為什麼這個比第一個範例來的好的原因:

● 偽代碼與文檔字符串的註解都很清楚。你可以很容易去辨讀每個部分與字串的用意,所以任何語言的初級程式員都能理解。有幾個「高級程式員(Pythonist)」能第一眼就理解那個比較短的編碼?

● 每行都只執行 1 到 2 個方法(method)或操作(operation)。現在你在回頭看看第一則裡有多少個 sum method、a != comparison、 forloop 與神奇的 map method 在同一行裡。你可以比較一下,兩則之間,哪個比較容易讀呢?

● 有邏輯的幫變數命名,有「i」的代表單一字元的變數。你可以試著把第一個範例丟到一個更大型的程式碼中,然後試著找找看「x、y、a 或 b」。

綜合以上,我們可以清楚了解到每個作者的意圖:

 ● 寫短碼的人是為他 /她自己而寫的。
● 第二則範例的作者是為大家而寫的。

我想說的是:拜託你,別當個笨蛋。

無論是前端的 HTML/CSS 或後端的 Python 與 Ruby on Rail,都請你寫一個大家都可以讀得懂的程式碼。

(資料與圖片來源:Medium

AD