中文程式碼示例之冒泡演算法, 後感
以前探討過中文命名在業務部分的優勢大於演算法部分. 今天又一次看到了這個以冒泡演算法的例子: 劉然:批判易語言的人是否用過這門語言,批判它的原因又是什麼?有些感觸. 先嚐試對變數命名進行改進, 來看看是否會有不同觀感. 注: 本文不討論輸入效率問題, 也不討論易語言
時間太有限, 僅對帖子中的Python程式作粗淺探討. 另一個易語言語法的例程也有不同方面的改進空間, 就不展開了. 有興趣/質疑的歡迎提其他例程一同探討.
for i in xrange(len(a)):
for j in xrange(i + 1, len(a)):
if a[i] > a[j]:
a[i], a[j] = a[j], a[i]
首先, 在巢狀迴圈中使用i和j的一個問題是, 兩者看起來有點像. 下面的視覺區分度更大:
for 甲 in xrange(len(a)):
for 乙 in xrange(甲 + 1, len(a)):
if a[甲] > a[乙]:
a[甲], a[乙] = a[乙], a[甲]
也可以賦予變數名以更多語義, 來凸顯變數的某些性質, 如下. 而英文命名想要表達類似語義就要長一些了:
for 前 in xrange(len(a)):
for 後 in xrange(前 + 1, len(a)):
if a[前] > a[後]:
a[前], a[後] = a[後], a[前]
後感
中文命名很自然是個考驗中文修養的活. 用中文命名的程式碼可以像天書一樣"僅僅是符號", 也可以像好文章一樣用詞考究恰如其分, 當然更多的(包括在下寫的)限於功力或者開發時間限制也許只能達到流水賬的水平.
哪裡用中文最有效果(對可讀性增強最大), 哪裡是雞肋(比如上面的a, 可以改名為"陣列", 但效果遜一些, 也許更合適放在註釋中), 也與程式的目的/設計/理解非常相關.
相比數理能力, 更大量的程式設計任務更需要的是邏輯與思辨能力, 這種任務的比重只會越來越大. 而邏輯思辨能力是文理相通的. 與程式設計相配套的文件編寫和閱讀也更偏文, 團隊建設/客戶交流之類軟實力更不用說. 相信隨著IT產業的逐漸成熟, 文科背景的開發者將會越來越多, 長遠看這肯定是好事.
論文Concise and Consistent Naming: Ten Years Later提到:
Approximately 70% of the source code of a software system consists of identifiers. Hence, the names chosen as identifiers are of paramount importance for the readability of computer programs and therewith their comprehensibility. However, virtually every programming language allows programmers to use almost arbitrary sequences of characters as identifiers which far too often results in more or less meaningless or even misleading naming.
很想看全文(尤其是那個輔助命名工具的十年實踐的總結)但下載的pdf裡只有摘要. 如果有哪位同學有全文請分享一下, 先謝了.