# 四十四、我們的.NET對策
以下是我目前對Fog Creek內漸進移到.NET開發工具的想法。
現狀:CityDesk大部份是用Visual Basic 6.0寫的,小部份則是用Visual C++6.0。 FogBUGZ大多是用VBScript for ASP寫,小部份是用C++。幾乎我們所有的內部工 具和我們的web呈現(Fog Shop,討論區等等)都是用VBScript for ASP。
為什么要要操心移完全到.NET囑?簡單說是因為.NET是目前為止最出色而且生產 力最高的開發環境。ASP.NET真的讓web應用程序寫起來容易得不可思議;過去 這幾天我已經以出奇的高速寫出幾個內部用的應用程序。各種苦工雜事(如表格 驗證及錯誤報告)在用ASP寫web應用程序時會耗去75%的時間,在ASP.NET卻變成 輕松的小事。ASP.NET的生產力遠遠超越ASP,其間的差別就像Java和C一樣。了 不起。
C#有很多Java的優點,還有一些小的改進如自動的boxing。雖然我們過去用ASP 和VB6時總是盡量寫出相當面向對象的程序,不過移到C#還是不錯的。
最后是.NET所附的類別鏈接庫真的很好。事實上由數據存取到web開發再到GUI開 發,每祥東西都重新設計過,所以由上到下到難以置信的協調。舉例來說,當 你檢視原本的Win32 API,就會驚訝由函數呼叫取得字符串竟然有那么多種方法。 每隔兩年他們就會改變主意認為另一種方法比較好。.NET把這些問題全部清掉了。 我很高興現在有一個ASP.NET日歷構件(widget)可以用,它會產生由月歷選一個 日期的HTML碼,而且可以放心那個東西傳回的日期類別(我相信是 System.DateTime)和SQL Serve「類別所用的日期類別一樣。你大概不會相信,以 前我們浪費了多少時間去針對SQL敘述調整日期格式,或是把COleDateTimes轉成 其他日期時間格式。再來終于出現了!一個到處都可以用的字符串類別!我上 星期才在寫一段ATL程序在BSTR、OLECHAR、char *、LPSTR還有其他亂七八糟的 型別間轉來轉去。真是大解脫啊。
好吧,我承認,.NET違反了絕不要從頭重寫的規則。微軟有兩個條件可以這樣做。首先他們有全 世界最好的程序語言設計者,過去20年間軟件開發的生產力提升,有九成都是這個男人貢獻的。 他是Anders Hejlsberg,賜予我們Turbo Pascal (謝謝你!)、Delphi (謝謝你!)、WFC(好嘗試!) 和現在的.NET(把球打出場啰!)。其次是他們有本錢投入了無數工程師在這上面做三年,這期間 他們的競爭力或多或少都會被延誤到。記住,微軟可以做并不表示你也能做。微軟創造他們自己 的重力。正常的規則是對他們無效的。
有些人現在會開始寫些氣憤的信贊揚其他環境,或是質問我為什么不用可以寫一 次到處用(竊笑)的Java,或者用Del phi (天才已經離開那里了。.NET’就是Del phi 7.0, 8.0, 9.0)或Lisp或其他東西。他們會說我已經被鎖在微軟的卡車上了!可 惜我現在沒時間來討論宗教,而且我也覺得討論這東西很無聊。我才不在意就語 言來說日文是否比英文更好。這根本就無關緊要。讓我們繼續談完我們的策略。
第一個問題:我對.NET還沒有懂到能寫出好的程序代碼。在任何開發環境中,要 做某件事時通常都會有很多方法,而我們連第一種方法都還沒學會,更別提第二 種方法了。所以我們寫出的.NET程序代碼質量還沒有好的能當產品推出。Bill Vaughn第一本談ADO的書出來之前,我們連基本SQL查詢的最佳作法都不知道呢。 所以我們最優先的事是教育,方法是用.NET來制作往后所有內部用的軟件和web程序(基本上就是沒有人會付錢的軟件)。我們可以把部份的Fog Shop移到.NET, 各種內部的東西一定會用.NET。(今天我用ASP.NET寫了一個FogShop優待卷產生 器。寫得一團亂不過會動!)
第二個問題:肥大的20 MB CLR (runtime)。8 MB的CityDesk下載文件里有6 MB
來自執行時期鏈接庫和數據存取鏈接庫,已經是夠慘了;我們絕不可能期望每個 CityDesk Starter Edition使用者另外再下載20 MB的東西。只能希望一年或兩 三年后很多人由其他地方拿到CLR了 (Windows XP沒有附真是太慘了)。我們會注 意狀況;它以往都會改掉你的user agent;希望現在還是一樣,這樣我們就能拿 到統計資料。
底線是現在不能把C ityDesk或是FogBUGZ移植到.NET。當CLR普及率到75%時我們 就會移植CityDesk的未來版本。計劃如下:
1. 用微軟的轉換工具移植現有的程序代碼和窗體
2. 先用暴力法修正問題,直到能動為止
3. 用C#建立新窗體及類別
4. 以漸進方法,在舊的窗體及類別一定得大改時移植到C#
5. 很多舊窗體和類別只要還正常動作,就會永遠維持在VB.NET(使用 丑陋的向后兼容字符串函數等等)
FogBUGZ也需要等CLR在服務器計算機的普及率變得更高;我們必須對我們的客戶 進行調查,看看如果FogBUGZ要用CLR時狀況會有多糟。
我們有另一個正在開發但還不能公開討論的產品;這個產品和FogBUGZ共享了很 大量的程序代碼(一個我們稱之為”Dispatcho”的子集合),所以在我們移植 FogBUGZ 之前都還是用 VBScr i pt/ASP。
至于FogBUGZ/D ispatcho/秘密新產品,計劃如下:
1. 等到需要CLR也不會出問題的時候,
2. 把現有的「商業邏輯」類別移植到C#
3. 現有的web窗體還是維持用ASP,
4. 用ASP.NET建立新的web窗體。
- 第一部分 位與字節:編程實踐點滴
- 一、語言的選擇
- 二、深入底層
- 三、joel測試:改進代碼的12個步驟
- 四、每一位軟件開發人員必須、絕對要至少具備UNICODE 與字符集知識(沒有任何例外!)
- 五、輕松寫就功能規格說明書 - 第1節:為什么煩心?
- 六、輕松寫就功能規格說明書 - 第2節:什么是規格說明書?
- 七、輕松寫就功能規格說明書 - 第3節:但是……如何?
- 八、輕松寫就功能規格說明書 - 第4節:技巧
- 九、輕松制訂軟件進度表
- 十、每日連編是朋友
- 十一、難伺候的故障修復
- 十二、軟件開發中的5個世界
- 十三、稿紙原型開發
- 十四、不要被太空架構師所嚇倒
- 十五、開火與運動
- 十六、人員技能
- 十七、源于計算機學科的三個錯誤思想
- 十八、二元文化
- 十九、自動獲取用戶故障報表
- 第二部分 開發人員的管理
- 二十、面試游擊指南
- 二十一、重金激勵害多利少
- 二十、二不配備測試人員的五個首要(錯誤)原因
- 二十三、任務換人有害無益
- 二十四、絕不去做的事情,第一部
- 二十五、冰川下的秘密
- 二十六、漏洞抽象定律
- 二十七、程序設計界的LordPalmerston
- 二十八、評測
- 第三部分 Joel對常態問題的遐想
- 二十九、RickChapman解讀愚昧
- 三十、在這個國家狗是干什么的? 我們有多么天真?
- 三十一、作為哼哈二將,只管去做事
- 三十二、兩個故事
- 三十三、巨無霸麥當勞與天才廚師JamieOliver
- 三十四、沒有什么像IT看起來那么簡單
- 三十五、提防非自主開發綜合癥
- 三十六、策略I:BEN&JERRY公司與AMAZON
- 三十七、策略II:雞與蛋問題
- 三十八、策略III:讓我回去!
- 三十九、策略IV:大件與80/20神話
- 四十、策略V:公開源代碼的經濟因素
- 四十一、墨菲法則肆掠的禮拜
- 四十二、微軟公司是如何敗北API之戰的
- 第四部分 對.NET稍多的評說
- 四十三、微軟精神失常了
- 四十四、我們的.NET對策
- 四十五、請問,我可以使用連接程序嗎