程式碼維護上的難題(The Challenges and Difficulties of Code Maintenance)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

在看完軟體建構之道無暇的程式碼後,在下要以這篇文章簡短說明程式碼在維護上的難題,首先以最簡單的例子:在文字模式下輸出 Hello World 文字。


請先看此網頁 The Hello World Collection,光是語言的選擇就有好多種了,且同一種語言也可以不同的寫法,例如 C 語言也可以像下面:

#include <stdio.h>
/*
 * 這是印出 Hello World 的程式嗎?
 */

int main(void) {

 printf("%c%c%c%c%c%c%c%c%c%c%c%c", 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100);
 return 0;
}

而Java更可以這樣子寫:

\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020\u0020
\u0063\u006c\u0061\u0073\u0073\u0020\u0055\u0067\u006c\u0079
\u007b\u0070\u0075\u0062\u006c\u0069\u0063\u0020\u0020\u0020
\u0020\u0020\u0020\u0020\u0073\u0074\u0061\u0074\u0069\u0063
\u0076\u006f\u0069\u0064\u0020\u006d\u0061\u0069\u006e\u0028
\u0053\u0074\u0072\u0069\u006e\u0067\u005b\u005d\u0020\u0020
\u0020\u0020\u0020\u0020\u0061\u0072\u0067\u0073\u0029\u007b
\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074
\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0020
\u0022\u0048\u0065\u006c\u006c\u006f\u0020\u0077\u0022\u002b
\u0022\u006f\u0072\u006c\u0064\u0022\u0029\u003b\u007d\u007d


變數命名與註解的例子
若在看到類似下面的程式碼時,看的人會如何想?

#include <stdio.h>

/*
 * 底下程式碼我也不知道在做什麼,因為我是接手的人,並非原作者
 * 而原作者也已經往生了,更糟的還在後頭,
 * 關於此部分的程式碼也沒有任何文件。
 */
int main(void) {

 int guessWhatIsIt;
 /*
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
   ...這不是程式碼
 */

 char charCanNotBeA_VariableName;
 short shortCanNotBeA_VariableName;
 int intCanNotBeA_VariableName;
 long longCanNotBeA_VariableName;
 float floatCanNotBeA_VariableName;
 double doubleCanNotBeA_VariableName;

 for(int i = 0; i < 100; i++) {
  /*
   * Under construction....
   */
 }


 /*
  * The following code has a bug that needed to fixed quickly.
  */

 a_bug_in_some_function(param1, param2, param3);
 return 0;
}
條件式寫法的例子(由FB wayne.chang 網友所提供)
有的人喜歡把 if 包很多層,但一般比較接受的是用 && 連接條件。另外,遇到 enumeration 用 switch 也比多個 if 來的讓人接受。


真可謂程式語言裡的火星文,以上只是問題的幾點,還有可移植性、容不容易擴充、排版、整體架構等問題。

讀書筆記:比爾蓋茲如是說,引爆人生成功的活力

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

比爾蓋茲如是說,引爆人生成功的活力
人的生命是一場正在焚燒的「火災」,一個人所能去做也必須去做的,就是竭盡全力在這場「火災」中去搶救點什麼東西出來。

一個人也許一生中只有一次或兩次重大機會,而抓住這一次機會可能就會改變你的命運。

沒有辛苦的付出,就沒有大的回報;沒有忘我的工作態度,便沒有傑出的工作成績。

我們的成功,大部分是靠競爭對手沒把事情做對而來的---那是運氣,你不能總依靠別人犯錯的策略來經營自己的事業。

世界的快速變化正是微軟競爭優勢的基礎,要嘛反應夠快,要嘛死路一條……要永遠保持領先的激情和懼怕落後的憂慮。

要多想想我們的競爭對手,知己知彼百戰不殆,不要認為我們已經占了上風,因此我們就會永遠立於不敗之地。不,這必將導致落伍,因而被淘汰。

我們有許多年輕姑娘和小伙子,他們需要交朋友、玩耍,還可能招惹是非,這些都是難免的。但是他們也要工作,我需要他們做得更好……我希望他們有一種歸屬感,讓他們明白,這一切都屬於他們。

英國維珍集團的五條管理規則:
  1. 讓員工玩樂有好處。
  2. 別老在意他們有沒有做好本職工作。
  3. 不要拘泥禮教,公司內外都直呼其名。
  4. 多給員工讚揚而不是批評。
  5. 讓他們體會商業冒險的激情。

達爾文世界的教訓之一是,有機體神經系統的表現優異,可協助決定它察覺變化和快速反應的能力,因此能活下來,或甚至更強盛。

任何東西都是有價的,而優秀的職員卻是無價的。

對人才的運用,僅僅限於蒐羅是永遠都不夠的。重要的是對人才不僅要善於辨識其長處,而且要敢於大膽地使用,以讓其充分顯示自己才能。

我們應該接受迅速的失敗,而不是緩慢的失敗,最不該接受的是沒有失敗:如果有人從不犯錯,那麼只說明他們沒有努力。失敗的結果是試圖去嘗試其他可能。

微軟不會是永遠不朽的。所有的公司都面臨著失敗,只是遲早的問題。我的目標是使我的公司盡可能地保持戰鬥力,不論在任何環境中都勇往直前。

我明白,微軟的前景部份因素取決於我們是否能把握全球電腦通信網路所帶來的新的競爭機會。適應新環境絕非易事,但絕對有此必要。

Win32 螢幕保護程式設計

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

在專案裡加入ScrnSave.lib ComCtl32.lib 及引入ScrnSave.h

只要撰寫ScreenSaverProc 函式,而WinMain函式會由程式庫提供

ScreenSaverConfigureDialog函式和RegisterDialogClasses函式。

Build出來的執行檔的副檔名(*.exe)改為(*.scr)

底下是個最陽春的範例:

// FuzzyScrnSaver.cpp

#include<windows.h>
#include<scrnsave.h>

LRESULT WINAPI ScreenSaverProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg) {
caseWM_DESTROY:
PostQuitMessage(0);
break;
default:
break;
}
returnDefScreenSaverProc(hWnd, msg, wParam, lParam);
}

BOOL WINAPI ScreenSaverConfigureDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
returnTRUE;
}

BOOL WINAPI RegisterDialogClasses(HANDLE hInst)
{
returnTRUE;
}


作有設定功能的螢幕保護程式,通常會將設定的資料存在「系統登錄檔」。