這世界上沒有什麼比程式工具更牽動程式設計師的心。 VC、DELPHI、JAVA…這些耀眼的名字不僅佔據了程式設計師的生活,而且似乎已經成為了某種信仰。可是,伴隨著新世紀的腳步,這些信仰又遭遇了重大的挑戰。微軟,這頭被法官和駭客們折騰得既疲憊又惱怒的獅子,發誓要保住它頭上的王冠,拼盡全力,拿出了看家的本事——.NET戰略。身為.NET的核心開發語言,C# 順理成章地浮出了水面。程式設計師也不得不做出一個痛苦的選擇,跟在誰的後面?要找出答案就得作一番比較和預測。
如果拋開一切非技術方面的因素,C# 無疑是這個星球上有史以來最好的程式語言,它幾乎集中了所有關於軟體開發和軟體工程研究的最新成果。物件導向、類型、元件技術、自動記憶體管理、跨平台異常處理、版本控制、程式碼安全管理……你不可能在另外的一種語言中找到所有這些特性。儘管像許多人注意到的一樣,當我羅列上述特性時,總是讓人想到JAVA,然而C# 確實走得更遠。但現實的情況是,非技術的因素往往更能決定一個產品的未來,尤其在電腦軟體的歷史上,技術卓越的產品,如OS/2、Mac OS、UNIX等,都敗在了Windows那漂亮的臉蛋兒下。而這次,微軟的角色好像從一個赤手空拳的革命者變成了仗勢欺人的老地主,如果真是要變天,那C# 這孩子豈不是投錯了胎?可能情形並非如此糟糕,畢竟瘦死的駱駝比馬大,而且C# 已經提交給了一個標準化組織,一旦成了國際標準,說不准真有哪個手癢的大俠(也有可能是微軟自己)給移植到和別的平台上。那樣的話,JAVA就慘了。因為JAVA的使用者主要是網路服務的開發者和嵌入式設備軟體的開發者,嵌入式設備軟體不是C# 的用武之地,而在網路服務方面,C# 的即時編譯和本地代碼Cache方案比JAVA虛擬機具有絕對的性能優勢。何況C# 一旦成為一個像C++ 一樣的公共的標準,軟體開發商既可以省去JAVA的許可證費用,也不必擔心成為微軟的奴隸,那些反微軟的人士和主張廠商獨立的人士可能也不會有什麼意見。這可能正是微軟所期待的。
如果把C# 和JAVA 在網路服務領域的爭奪比喻為未來制空權的爭奪的話,那麼C# 和傳統通用快速開發工具——VB、DELPHI等的較量將是地地道道的白刃戰。可能最慘的程式設計師就是VB程式設計師,在微軟,VB就像離任的柯林頓,不但失去了所有的光輝,而且亂事纏身。想想看吧,VB6寫的專案必須用轉換工具轉換成基於.NET的程式碼才能在VB7調入,幾乎面目全非。由於VB7遵循為迎合.NET而建立的通用語言規範(CLS),幾乎把所有原來只在C++、JAVA等語言中可以運用的特性統統加了進來,只是語法和原來兼容。如果你是第一次在VB7看到自己的舊VB6專案轉換之後的程式碼,一定要小心你的心臟!所以,努力吧,別告訴我你將就此退休。 DELPHI的狀況也好不到哪裡去,原來的看家本領是做起應用來又快又好,可現在看看最新的VS.NET Beta 1, 你會感到如此熟悉,眾多的屬性列表、組件…誰讓你窮呢,連總設計師都養不住。
其實在程式語言中真正的霸主多年來一直是C++,所有的作業系統和絕大多數的商品軟體都是用C++作為主要開發語言的。 JAVA的程式設計師絕大多數也是C++的愛好者,PHP的成功裡面也有類似C++的語法的功勞。在作業系統、裝置驅動程式、電玩遊戲等領域,C++在很長的時間內仍將佔據主要地位,而在數量最大的應用軟體的開發上,C# 很可能取代C++的位置。首先,C# 和JAVA一樣,簡直就是照搬了C++的部分語法,因此,對於數量眾多的C++程式設計師學習起來很容易上手,另外,對於新手來說,比C++要簡單一些。其次,Windows是目前佔壟斷地位的平台,而開發Windows應用,當然微軟的聲音是不能忽略的。最重要的是,相對於C++,用C# 開發應用軟體可以大幅縮短開發週期,同時可以利用原來使用者介面程式碼以外的C++程式碼。
但是,C# 也有弱點。首先,在大量的現有Windows平台上,C# 的程式還不能運行,因為C# 程式需要.NET運行庫作為基礎,而.NET運行庫將作為新一代的Windows(Whistler)的一部分發行, 或以Service Pack的形式提交給Windows Me 和Windows 2000用戶。所以在近期,C# 會主要在伺服器上得到應用。其次,C# 能夠使用的元件或函式庫還只有.NET 運作庫等很少的選擇,沒有豐富的第三方軟體庫可用,這需要有一個過程,同時各軟體開發人員的支援也很重要。第三,JAVA的成功因素裡面有一些是反微軟陣營的吹捧,雖然「只寫一次,到處運行」只是一句口號,但畢竟已經是一種成熟的技術。而C# 的鼓吹者目前只有名聲不佳的微軟,只能運行在Windows上。實際上這兩種語言都不是不可取代的,理智的說,對軟體開發商而言,什麼用的最熟什麼就是最好的工具。尤其對C++的使用者,C# 並沒有帶來任何新東西,因為.NET運作函式庫在C++中也可以使用,沒有要換的絕對的理由。
綜上所述,我個人認為,近幾年,C# 將不可避免地崛起,在Windows平台上成為主角,而JAVA將在UNIX、Linux等平台上成為霸主,C++ 將繼續在系統軟體領域大展拳腳。非常有趣的是,這些語言的語法極為接近,因為JAVA和C# 都是由C++發展而來的。其他的開發工具當然還會在相當長的時間內繼續他們的旅程,不過在市場份額上,將不可避免地受到衝擊。