天天看點

2018-02-16 中文代碼示例之冒泡算法, 後感

以前探讨過中文命名在業務部分的優勢大于算法部分. 今天又一次看到了這個以冒泡算法的例子: 劉然:批判易語言的人是否用過這門語言,批判它的原因又是什麼?

有些感觸. 先嘗試對變量命名進行改進, 來看看是否會有不同觀感. 注: 本文不讨論輸入效率問題, 也不讨論易語言

時間太有限, 僅對文章中的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裡隻有摘要. 如果有哪位同學有全文請分享一下, 先謝了.