C#對(duì)陣Java:告訴你該如何選擇
51CTO-.NET頻道之前也報(bào)道過《C#與C++誰更強(qiáng)?還是關(guān)公戰(zhàn)秦瓊》,開發(fā)技術(shù)的爭(zhēng)論還是主要以工作環(huán)境需要和個(gè)人喜好為主,希望能有更多客觀的評(píng)價(jià)誕生。
1. C#的語法糖
在之前,每當(dāng)別人問起我,某個(gè)C#的新語言特性的時(shí)候,我總會(huì)說,其實(shí)就是這么一回事,他不過是一個(gè)語法糖,沒什么稀奇的,你可以看一下Reflector反編譯出來的代碼。
可是現(xiàn)在當(dāng)我仔細(xì)思考之后,發(fā)現(xiàn)其實(shí)語法糖更多地不僅僅是為了我們使用上的方便,而且是代表了一種編程模式以及思維模式的轉(zhuǎn)變。
從最簡(jiǎn)單地說起,我在之前的文章說過一點(diǎn),面向過程的語言的核心不在于函數(shù),而在于處理事情的過程,而函數(shù)則完全是為了代碼的規(guī)范,以及可維護(hù)性才出現(xiàn)的。但是當(dāng)我們把若干個(gè)函數(shù)整理成了我們的類庫之后,我們除了使用上方便之外,更意味著我們需要提高我們的邏輯層次,將原本的細(xì)粒度邏輯粗化。
我看到了在winter-cn的文章中舉了這樣一個(gè)例子,把大象放入冰箱分成幾步,第一第二第三,Ivovy老大回復(fù)了這樣一句話,語言的發(fā)展是讓這些都變成一步:把大象裝入冰箱。我非常贊同,我認(rèn)為這就是未來語言的發(fā)展方向。
在我之前的文章《基于自然語言的軟件工程與程序設(shè)計(jì)》中,我談到未來語言的發(fā)展方向是基于自然語言的編程,還談到了一種理想的狀況,就是會(huì)說話的人就會(huì)寫程序。即使我們不把眼光放得這么遠(yuǎn),我認(rèn)為,只要了解業(yè)務(wù)邏輯的人就會(huì)編程,這個(gè)是完全不過分的。
接下來,我們看一個(gè)在C# 3.0 中的關(guān)鍵字:var。在之前,很多人說var最大的作用是為了讓懶的人可以不必去打字打出類型。其實(shí)我個(gè)人更認(rèn)為當(dāng)var關(guān)鍵字和我們強(qiáng)大的Visual Studio工具結(jié)合起來的時(shí)候,就在倡導(dǎo)我們用一種團(tuán)隊(duì)思維的角度去看待問題。
當(dāng)我們調(diào)用底層提供給我們的接口,或者使用其他類庫返回給我們的方法時(shí),我們不需要了解他的具體類型,我們只需要用var來得到該類型,然后用強(qiáng)大的VS開發(fā)工具的智能感知去得到我們需要的屬性(或方法)即可。
至于像Lambda表達(dá)式所提倡的FP思維,我就更不多說了。
總之,F(xiàn)irelong眼中說,C#語言越來越臃腫的語言特性,然后應(yīng)該越來越從簡(jiǎn),我個(gè)人認(rèn)為,這不是在抹殺C#的進(jìn)步,更關(guān)鍵的是在抹殺一種編程思維的進(jìn)步。
2. 語言,還是語言
在語言產(chǎn)生之初,語言之爭(zhēng)似乎就從未停止。無論是C和C++。還是Java與C#。從來都是各執(zhí)一詞,然后難分勝負(fù)。
我不是一個(gè)牛人,無法像Jeffery Zhao一樣來舉出各種各樣的理由來反對(duì)Java,或者反對(duì)其他語言。至少在我目前的階段來看,我不是一個(gè)語言方面的攻擊者。
我只能從經(jīng)濟(jì)學(xué)的角度去分析:每門語言,每門流行的語言,在市場(chǎng)上占有一定份額的語言,必定有著他的優(yōu)勢(shì)所在,否則他必定會(huì)被市場(chǎng)所淘汰。而每門語言也必然有著他的劣勢(shì),和不適用性,正是這樣才催生了其他語言的發(fā)展,從而產(chǎn)生一種平衡的關(guān)系。
在這里,我只說托管語言。從某種程度上,至少從我目前的程度上,我認(rèn)為,托管語言來開發(fā)桌面程序的確是不大合適的,相對(duì)于C++。(在此強(qiáng)調(diào),我并沒有過太多桌面程序開發(fā)的經(jīng)驗(yàn))針對(duì)當(dāng)前大多數(shù)的商業(yè)商品來說,無論是舊版的飛信,還是概念版的QQ,采用托管語言無疑都是失敗的,而我們看大部分成熟的桌面程序,還是采用C++來開發(fā),這確實(shí)也能說明一定道理。
而著名的《鬼泣4》采用C++和C#做交互來共同開發(fā),也在一定程序上說明了C#在UI上的薄弱性。(只是看新聞傳說,未經(jīng)證實(shí))
總之,我個(gè)人認(rèn)為:不要輕易地去抨擊某一門語言,每門語言都有著他的適用性,你的項(xiàng)目因?yàn)镃#而失敗,只能說是你項(xiàng)目不該選擇C#,而不能說C#無法滿足你的項(xiàng)目,就說C#是失敗的。這樣的邏輯明顯就是不對(duì)的。
3. 語言與設(shè)計(jì)模式
在之前的文章中,我拋出過這樣的一個(gè)觀點(diǎn):設(shè)計(jì)模式實(shí)際上是犧牲了語義的自然性,來換取軟件的可重用性和可維護(hù)性。
對(duì)于C#這樣一門面向?qū)ο蟮恼Z言而言,根本還是要從面向?qū)ο髞沓霭l(fā),那么面向?qū)ο蟮暮诵氖鞘裁??每個(gè)類都有章可循。
但是,在很多的時(shí)候,我們?yōu)榱藬U(kuò)展性,重用性,可維護(hù)性,不得不求助于GOF或者其他的設(shè)計(jì)模式,我個(gè)人認(rèn)為,設(shè)計(jì)模式是凸顯了“語言”的無助。
因而,在語言的層面上融入設(shè)計(jì)模式,我個(gè)人認(rèn)為,這不是一種錯(cuò)誤,相反,這卻是語言發(fā)展的必然,至少是基于面向?qū)ο笳Z言發(fā)展的必然。到面向?qū)ο笳Z言發(fā)展到極致的時(shí)候,應(yīng)該是一種我們不需要借助設(shè)計(jì)模式,只要依靠語言提供給我們的語法(或者是”語法糖“)就足夠完成我們用其他的設(shè)計(jì)模式可以完成的工作,這才是面向?qū)ο笳Z言發(fā)展的大成。
再進(jìn)一步地說,沒有任何一門編程模式是銀彈,可以解決我們的所有問題,無論是面向?qū)ο?,面向過程,還是FP,一種發(fā)展逐漸完善的語言應(yīng)該是將各種編程模式于一體,提供給程序員一種極高的思維抽象,這才是未來語言的方向。
原文標(biāo)題:輕松簡(jiǎn)單搭建Linux下的C#開發(fā)環(huán)境
鏈接:http://www.cnblogs.com/domslab/archive/2010/07/08/1774005.html
【編輯推薦】