2023/08/21

柯林漢定律 (Kernighan's Law)

Brian Kernighan 在其著作 "The Elements of Programming Style" 提出一個經驗法則,稱為 Kernighan's Law。

Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, 
you are, by definition, 
not smart enough to debug it.

除錯要比寫程式困難兩倍,
因此,如果程式寫得很精巧,
那你就沒有足夠的智慧能夠除錯。

對這句話的理解,我認為是跟程式的簡潔度及可讀性有關。

越複雜冗長的程式碼,因為程式碼太長,在 debug 時,就越不容易找到問題點。但有些人會在寫程式時,追求到極致,希望能用非常短的程式碼完成。One-liner program 的目標是,用一行程式碼完成一項功能,追求簡潔的程式碼。

這種做法沒有對錯,在高階程式語言,用很短的程式碼完成很多事情,比較容易發生,但在中低階語言,像是 C 語言,刻意追求 one-liner,會產生反效果,因為程式碼太短,而讓人難以理解在寫什麼。

因此良好的程式,應該要具有相當程度的可讀性,可讀性並不代表程式碼很多或很少,而是程式碼以大家都能理解的方式撰寫,程式的結構良好,一個可讀性高的程式,程式碼的長度可長可短。

原文中的精巧,可能是針對 C 語言的說法,因為 C 語言是中低階程式語言,精巧的程式,是聰明的寫法,也代表能用比較短的程式完成工作,在 CPU 及記憶體貧乏的時代,這種做法是有必要的,但這也代表這些程式碼會讓人難以理解,也就更難除錯。

Brian Kernighan 跟 Dennis Ritchie 是 "The C Programming Language" 這本經典書籍的作者,這本書是所有寫 C 語言要閱讀的經典書籍,也因為這本書,建立了一個規則,所有程式語言的第一個測試程式,都是要列印 "Hello, World!" 這個字串到螢幕上。另外這本書的 C 語言 coding style 也被稱為 K & R style。

Kernighan 還是 Unix 作業系統的命名者,原本被稱為 UNICS (Uniplexed Information and Computing System),另外還是 awk 這個工具的作者。

References

80歲了還在改程式碼的大神:他是Unix命名人、寫下所有程式新手的「Hello World」起手式 | T客邦

沒有留言:

張貼留言