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