2012年9月17日

轉貼文章-關於如何選擇VB和C#

本文來自.Net Walker ,我最近在學寫VB.net,但是又聽到同事說C#甚麼的,另外看其他書,也有作者提到C#更適合物件導向,所以我再網上爬文。

這篇文章不是我自己寫的,是我轉來的,所以如果作者你覺得不適當,請告訴我,我會把這篇文章移除。

 

 

關於如何選擇VB和C#

有一位讀者在幾周前來信詢問到這個問題,我答應他要在BLOG上好好討論這個部分。

我 相信很多初學者最近特別碰到這個問題,面對在.NET上要採用哪一種開發語言而困擾。在回答這個問題之前,有一個前提是要先確定的,關於效能的問題在這兩 個語言之間的選擇是幾乎不存在的,特別是由於硬體設備的關係,因此效能問題很容易補強,若要說效能,到目前為止中高階語言當中C++依舊是效能最好 的,Assembly依舊是效能冠軍,但是你會不會用這兩種語言來開發資料庫應用程式,答案是你絕對不會,因為這樣太辛苦了,好,我們的討論就從這一個 point開始。

正如同你不會用C++來開發資料庫應用程式一般,除非沒得選擇(某些平台上只能選擇C++),否則有太多更適合用來開發資料庫的語言,C#, VB, Java, delphi...幹嘛選C++?

但是有沒有人會說C++語言不好?不會的...因為大家心裡都明白,不是好不好的問題,而是適不適合的問題!!!
那問題來了,如果答案這麼明確,為何還會有人討論C#和VB到底要選哪一個呢?不是就是適合部適合的問題嗎? 對,但是有一個小麻煩,是C#和VB都是.NET的官方語言,而兩種語言能做的事情幾乎一樣,花的工也差不多,那就讓人困擾了,到底要VB和是C#?

好, 探索這個問題之前,我們要明白語言的背景和特色,C#是C Like語言,從C, C++之後,出現了很多C Like語言,C#和Java都是其中之一,他本質上是C的語法,但是沒有C++那麼難,C++當中有很多古時候C語言保留下來的特殊語法,這些語法相當 簡約,例如A++,這代表A=A+1,除了A++之外,還有++A這種語法(難倒你了吧,很多人不知道兩者之間的差異...)。C語言又加上物件導向的觀 念之後,難度瞬間提升幾十倍吧,很多專家腦袋裡想出來的許多天馬行空的可能,都在 C++上實現了,像是多重繼承這類的觀念,導致原本已經很簡約的C語法,變的進入障礙更高。

PS.你知道C語言為何要那麼簡約嗎? 因為在C發展的那個年代,很多時候無法用鍵盤直接輸入程式執行的,是透過讀卡機把程式輸入電腦裡,而字寫得越多,讀卡紙片就越厚,所以大家盡量把語法搞得越簡單越好...

而 Java的出現,簡化了C/C++複雜的語法和架構,有那麼一點去蕪存菁的意味,更貼近商用(注意,是商用)領域,加上那一年internet盛行,所以 謂為潮流,Java一直改變,MS卻只有VB和C/C++的開發環境,當年還沒有所謂的Visual Studio,就只有簡簡單單的VB 5,不過話說回來,那時候VB已經有一點點OO的觀念,加上還支援控件等re-use技術,支援事件驅動,支援視覺開發,已經是了不起的成就,那幾年的 VB Programmer爆增,全美數幾百萬人跑不掉,幾乎有一半的商用程式是用VB開發的,但是VB卻有著過去的包袱...

說包袱可能不公平,因為VB本來就是設計給初學者用的,進入障礙低,簡單好用,可以快速的開發出一套應用程式,因為這樣,所以VB的語法很簡單,舉例來說,用VB開檔,可能就是簡簡單單的一行程式:
Open "filename" for Output as #1 <--天啊,我居然沒翻手冊還記得這個語法....可見有多簡單好用
任誰都知道上面那行程式是用來開檔的,而且檔案還是用來輸出
如果是C,我記得是...
FILE *f;
f=fopen("xxxx","w+");
不是我在講,當年光那個*f的指標,就搞得我七暈八素,總是忘了加上*導致成是錯誤。你沒有辦法從人類的邏輯搞懂為何開檔的回傳值是一個指標,而運算式的回傳值卻是一個變數,這純粹是為了配合Compile而設計的語法,這不是為人類設計的。

那 個年代後期微軟推出了 Visual Studio 97,其中上得了檯面的開發工具包含了Visual Basic 5.0、Visual C++ 5.0及Visual FoxPro,著時謂為風尚了好一陣子。當年同時間還有一個Delphi也很風光, 走的是Fortran路線,我還認真的學過一兩年,Delphi把Fortran發揚光大,但畢竟不是MS這種大公司的敵手,風光了一陣子之後,慢慢就開 始有走下坡的趨勢。

而Java則慢慢開始一飛衝天,這時候讓MS陣營很多人發現了Java的好處,比C/C++簡單,能力強,可以跨平台,學習曲線有沒那麼高,豐富的類別函式庫...說不完的優點和前衛的設計,讓MS陣營的開發人員心動,java紅了好一陣子...

MS 面對internet痛定思痛,決定來個絕地大反攻,在2002年推出內建.Net Framework 1.0的Visual Studio .NET,這是一個釜底抽薪的改變,一舉把MS開發工具帶向了整合interner、OO以及新的開發框架上,這個改變很重要,但是卻...帶來一場災 難。

很多VB開發人員水土不服,改變太大了,ASP開發人員也不買單,ASP.NET被接受的程度不高,產品有一些待解決的問題,這些造成MS很大的壓力,那一年的改變是一個關鍵,他帶領MS的開發人員走向新的世界。那一年,也才是C#剛推出的時候...很多人還在觀望...

到 2003年,微軟推出支援.Net Framework 1.1的Visual Studio .NET 2003,狀況才開始慢慢好轉,C#開始被大家接受,VB當中一些死硬派還停留在VB 6.0,也有一部份慢慢移轉到VB.NET上(主要的問題是VB 6.0的程式碼和觀念,幾乎和VB.NET不同)。

而2005年推出.NET Framework 2.0以及Visual Studio 2005(有沒有注意到MS把.NET兩個字拿掉了),則開始奠定如今的基礎,ASP.NET開始大紅(在台灣比較紅),ASP開發人員無可避免的選擇了 升級到ASP.NET上,與Java分庭抗禮的時代開始出現,C#開始爭取到不少C/C++/Java/Delphi開發人員,而部分VB 6.0的developer也發現勢不可檔,所以跳入 VB.NET(後來就不叫VB.NET了)的懷抱中。

好,故事是這樣的,真的好長...打字都累了...
那,到底你要選C#還至VB?

這關乎你的目的,從上面的背景你可以發現,VB有悠久的歷史,但式設計VB的專家也一直盡力維護一個分寸,就是VB要符合底下幾個原則:
1.容易上手、學習曲線低。
2.與舊版VB語法大致相容。(現在越來越難了)
3.可以輕易的開發出一套程式。

所 以你會發現,依照上面這樣的邏輯,VB具有C#沒有的My Class,這不奇怪,因為My Class很沒道理,不符合OO架構也濫用了靜態型別,有可能導致一些程式設計上的風險。VB的語法似乎比較鬆散,變數的型別轉換比較不嚴謹,但是這些聽 起來是缺點,其實換另一個角度想也是優點。

如果我要很快的開發出一套程式,我不是程式設計師背景,不是所謂的科班出身,我也沒打算寫架構 很大或很偉大的系統,我可能是數學系的、電機系的、念財務管理的、念工程的...我用VB寫一個小程式是非常非常理想的。沒道理要我用C#,變數的型別對 我來說幾乎沒意義,只要程式能跑,算出我要算的東西,或是記錄我要記錄的資料,以後可以查詢,就好了,寫程式幹嘛那麼龜毛?

但,如果你是 業界的程式開發人員,這是你吃飯的工具,你倚賴這個謀生,你寫的程式必須可長可久,比較有架構和嚴謹的C#會是比較好的選擇,(不過我要在這邊補一句,在 台灣這種需求真的不多,因為沒什麼系統可以活過3年,reuse這個夢坦白說也很難實現,架構很漂亮,但是每次程式幾乎還是重寫,這樣架構再漂亮也沒用, 這不是程式設計師的問題,也不是語言的問題,這些問題出在人身上...以後有機會再談),因為設計出的程式比較安全,發生exception的機會比較 低,程式比較有架構未來交接維護也方便。(重點在交接,因為developer流動率真的很高)

如果你是MIS,沒有需要開發很大的系 統,程式只是你的 "工具" (例如寫個程式進行佈署、建立AD Account,撈資料做報表,算出老闆要的資訊...等),我覺得用VB是比較好的選擇,因為老闆幾乎都要求快,希望很快看到結果,沒人管你架構,不需 要為了簡單的一個小程式畫UML、一個下午或是一兩週就可以完成的小程式,靈活和快速是最重要的。

如果你是賣方(軟體廠商、SI、會把你寫的程式當作產品賣出去的),你可能就需要考慮以C#來開發,因為程式設計師的流動率很高、程式的效能要計較(因為客戶會計較)、未來的維護要持久...因為種種原因,讓程式設計師辛苦一點也沒啥不好,所以C#是一個比較好的選擇。

所以如何選? 我認為看需要...
要學哪個? 我覺得都要會一點...

我 常跟學員說,在這個時代,我認為你必須要具備雙語(或多語)能力,一法通萬法通,所以VB和C#是開發人員的左右手,沒什麼道理只學其中一種,標準是,你 不需要全部會,但是你至少需要看得懂別人寫的Code,如果你習慣用其中一種語言(例如我習慣VB),我覺得那沒什麼關係,每個人都會有自己的習慣,但是 若你害怕用任何一種語言或是denial任何一種語言,那就不可以了,你必須對C#和VB都無所懼怕,依照你當時的需要選擇你要開發的語言。

沒有留言: