業餘與專業之間

7/30/2008
看書時的一點聯想,順手抄上來。

在《Object-Oriented Analysis and Design with Applications 3rd Edition》的第六章〈Process〉一開始提到:

業餘的軟體工程師總是在尋找神奇、萬能的方法或工具,冀望它們能把軟體開發工作變得極為簡單。專業的軟體工程師就不同了,他們知道那種東西並不存在。業餘人士經常只想要像煮菜那樣照著食譜一步一步做,專家則知道這種開發方法會設計出呆板的產品,並導致開發人員用一連串的謊言來掩蓋一開始就做了錯誤決策的事實。業餘的軟體工程師往往毫不重視文件,要不然就是太過以文件為中心,只擔心客戶不滿意這些文件,對於文件真正應該呈現的重點反而不那麼在意。專家了解文件的重要性,但是他們絕不會為了寫文件而犧牲掉改進軟體架構的時間。

這是業餘和專業開發人員的差別。

我又想到薩依德在《知識分子論》當中的論述:

....所謂的業餘性就是,不為利益或獎賞所動,只是為了喜愛和不可抹煞的興趣....今天在教育體系中爬得愈高,愈受限於相當狹隘的知識領域。當然,沒有人會反對專業能力,但如果它使人昧於個人直接領域--比方說,早期維多利亞時代的情詩--之外的事情,並為了一套權威和經典的觀念而犧牲一己廣泛的文化時,那種能力就得不償失。....專業化也戕害了興奮感和發現感....陷入專業化就是怠惰,到頭來照別人的吩咐行事。因為聽命於人終究成為你的專長。

以上摘錄的兩段內容都提到了專業和業餘的不同,看起來兩邊的觀點是彼此衝突,不過,由於取自完全不同領域的書籍,直接拿來比較會有點奇怪。

第一段的業餘和專業,講的是對自己吃飯謀生的東西熟不熟,厲不厲害的程度差別。第二段的層次則高一些,談的是忠於自己還是服從他人、是否願意犧牲自由的心靈和廣泛的興趣,以換取特定領域的專業形象(訓練有素的狗?)。

我想,專業的軟體工程師也可以有業餘人士的生活態度和價值觀。而不那麼專業(業餘)的軟體工程師當然也可以透過取得高學歷、考證照等方式,為自己塑造出專業的形象(但能維持多久還是得看後面的努力了)。

我好像喜歡業餘多一些 :)

[.NET Code] 如何在指定的逾時時間內偵測伺服器能否連接

7/06/2008
問題

應用程式使用 .NET WebClient 類別執行偵測新版本以及線上自動更新的功能,可是如果伺服器因為某些原因無法連線(如網路斷線、伺服器關機等),應用程式在檢查是否有更新版時,就得等 20 秒左右才會發生連線失敗。
想要使用 Socket 或 TcpClient 類別事先偵測伺服器的 80 port 能否連線,可是結果還是一樣,因為它們並沒有提供連線逾時的屬性。

解決方法

可使用非同步的方式解決。以下是利用 TcpClient 類別偵測伺服器 80 port 能否連接的工具函式:

/// <summary>

/// 偵測指定的伺服器的特定 port 是否可以連接。

/// </summary>

/// <param name="host">伺服器名稱或 IP 位址。</param>

/// <param name="port">Port 號。</param>

/// <param name="timeOut">連線逾時時間,單位:秒。</param>

/// <returns></returns>

private bool IsServerConnectable(string host, int port, double timeOut)

{

  TcpClient tcp = new TcpClient();

  DateTime t = DateTime.Now;

 

  try

  {

    IAsyncResult ar = tcp.BeginConnect(host, port, null, null);

    while (!ar.IsCompleted)

    {

      if (DateTime.Now > t.AddSeconds(timeOut))

      {

        throw new Exception("Connection timeout!");

      }

      System.Threading.Thread.Sleep(100);

    }

 

    tcp.EndConnect(ar);

    tcp.Close();

    return true;

  }

  catch

  {

    return false;

  }

}


呼叫 IsServerConnectable 時,可將參數 timeOutSeconds 指定為 1,如此一來,函式最多只等待 1 秒便會立即傳回結果。

2008-11-22 增加:偵測某個網頁是否能正常回應

    private void PingWebPage(string url, int timeout)

    {

      HttpWebRequest req = (HttpWebRequest) WebRequest.Create(url);

      req.Method = "GET";

      req.Credentials = CredentialCache.DefaultCredentials;

      req.ContentType = "text/xml";

      req.Timeout = timeout;

      WebResponse rsp = req.GetResponse();

      StreamReader sr = new StreamReader(rsp.GetResponseStream(), Encoding.UTF8);

      try

      {

        sr.ReadLine();

      }

      finally

      {

        sr.Close();

        rsp.Close();       

      }

    }


p.s. 以上程式碼是由 CopySourceAsHtml 產生。選項:Wrap words + Embed styles + Overwrite tab size + Overwrite font list (Fixedsys) + Strip line breaks。
技術提供:Blogger.
回頂端⬆️