[如何學習寫程式] #8 - 在刮別人的鬍子前,先把自己的刮乾淨

其實是不只是學習寫程式應有的態度,也是平時面對許多生活大小事的基本態度。

其實是不只是學習寫程式應有的態度,也是平時面對許多生活大小事的基本態度。

近來在論壇上出現一些文章,而且挑明了說那是某某產品或平台的 bug,但是深入進去他的程式碼看,問題其實不是出在某某產品,而是使用它的人自己的問題。

舉個比較極端的例子,有人寫了一支想把輸入的參數列出的程式,然後他這麼寫:

public static void Main(string[] args)
{
    Console.WriteLine("args: {0}", args);
}

但是它卻只是輸出這樣:

image

沒有如預期的輸出 1 2 3 4 5 6 7 8 9 這些資料。

然後寫這支程式的人就開始說這是 C# 和 .NET Framework 的 bug,但真實的狀況是?其實要這樣寫:


public static void Main(string[] args) {
    Console.Write("args: ");

    foreach (string arg in args)

       Console.Write"{0} ", arg);

    Console.Write(Environment.NewLine);
}

 

image

 

另外一個更實際的例子,可以看看這篇討論串

會把自己的錯誤說成是產品的 bug 的人,通常是對產品不了解,以學習寫程式這件事來說,就是觀念不正確,邏輯上的不正確,或是類別物件的使用不當,因此無法得到預期的結果,其中有一種人是 "認為應該" 會達到的功能卻沒有達到,然後把錯轉嫁給產品,其實這對產品是不公平的,而初學程式的人也不應養成這種事事怪別人的負面態度,這對學習寫程式是絕對沒有任何幫助的。

那,什麼才可以被稱為產品的 bug? 請記住,如果一個問題具有下列特性,才可合理表示那是產品的 bug:

  • 問題不只有你遇過,有其他人也遇過(除非你是產品測試員,為尚未上市的產品測試)。
  • 經過嚴謹的驗證。
  • 具有可以在任何或大多數的電腦上重現問題的標準步驟。
  • 可以排除人為錯誤的問題(例如寫錯,邏輯錯誤,操作程序不對,資料不正確等)。

 

如果你的問題沒有上述的特性,那請勿一開始就說問題是某產品的 bug,否則很容易落到自打嘴巴的下場。以 .NET Framework 為例好了,全球數百萬個程式開發人員都用過 .NET Framework,但為何只有少數人會碰到特定問題?只要深入去研討,不難發現問題是出在寫程式的人身上,而不是在 .NET Framework 上。

所以,如果碰到問題,請先把你的鬍子刮乾淨後,再來刮別人的鬍子。