l

2012年5月10日 星期四

還少一本書:The Art of Readable Code

May 10 11:10~12:16

最近一次寫這一系列的文章已經是快10個月前的事情了。想想也挺可怕的,這幾個月來Teddy看的書越來越少,每天卻越來越忙(瞎忙)。前幾天無意中看到這本書:

The Art of Readable Code

這種書名開頭為「The Art of xxx」的書籍,讀者的評價通常不是大好就是大壞。大好的例子裡面,最有名的例子應該是Donald E. Knuth所寫的「The Art of Computer Programming」系列叢書。這幾本書念資工的人就算是沒看過,也應該要聽過書名…XD。至於大壞的例子…算了,就不提了。

看到「The Art of Readable Code」這本書,Teddy倒不是被「The Art 」給吸引,而是對「Readable Code」這個主體很有興趣。如何寫出readable code(容易閱讀的程式碼)對於程式設計師而言是一件很重要的技能,但是卻不容易做到。為什麼?因為學校沒教,出社會之後工作上也不容易學到,再加上關於這方面的好的參考資料不多,所以有很多程式設計師寫了好幾年的程式,但是程式的可讀性並沒有顯著的提升。

「The Art of Readable Code」這本書Teddy目前只看了前三章,但是幾乎每一頁都想要畫重點…XD,所以迫不及待的在沒看完之前就先推薦給鄉民一下,讓大家有時間去搶購。這本書好的地方在於使用大量淺顯易懂的範例來解釋作者所提出如何寫出容易閱讀程式碼的每項原則,所以很容易理解並且看完之後可以馬上應用到程式開發中。舉個例子,作者在第二章提到的主題是「把名稱視為一個微小的註解(Think of a name as a tiny comment)」,因此建議了幾點關於取名子的方法。以下舉三個例子:

  • Choosing specific words:假設鄉民們開發了一個Thread物件,而這個物件有一個stop()方法來停止thread執行。這個stop()方法是有可能造成使用者的誤解。到底一個thread被stop之後,是從停止執行並且從記憶體中被移除了,還是只是暫時停止執行而已?如果是前者,把stop()改成kill()會比較清楚。如果是後者,則可以用pause()來取代,必且應該要再加上相對的resume()方法讓被暫時停止 呼吸 執行的thread可以繼續執行。
  • Avoiding generic names:寫程式經常會使用一些「無腦變數(太一般化的菜市場名子…XD)」,例如tmp用來表示某種暫存變數,或是i,j,k用來表示迴圈變數。看一個書上的例子:

          String tmp = user.name();

          tmp += “ “ + user.phone_number();

          tmp += “ “ + user.email();

          …

          template.set(“user_info”, tmp);

         作者建議,在這裡把tmp改成user_info會比較清楚一點。

  • Attaching extra information to a name, by using a suffix or prefix:一樣是書上的例子,假設鄉民們想測量某個網頁花了多久的時間才被載入完成

var start = (new Date()).getTime(); // 放在網頁的開頭的地方

var elapsed = (new Date()).getTime() – start; // 放在網頁最下方

document.writeln(“Load time was:” + elapsed + “ seconds“);

      上面這段程式看起來沒什麼錯誤,但是getTime()傳回的值是微秒(millisecond)而不是秒(second),所以印出來的單位錯了。作者建議把程式改成下面這個樣子。

var start_ms = (new Date()).getTime(); // 放在網頁的開頭的地方

var elapsed_ms = (new Date()).getTime() – start_ms; // 放在網頁最下方

document.writeln(“Load time was:” + elapsed_ms / 1000 + “ seconds“);

***

關於變數,方法,物件如何取名子的建議,之前在讀Kent Beck或是Martin Fowler所寫的書中也有提到一些,但是並沒有像這本「The Art of Readable Code」整本書的主題就是在教導讀者如何寫出容易閱讀的程式碼。談論這方面主題的書不多,真本書算是滿值得一看的書。

***

友藏內心獨白:天瓏有賣,網路上也可以…買的到…XD。

1 則留言:

  1. 其實這方面的好書不少呀~the practice of programming, code complete, clean code...

    回覆刪除