個(gè)人認(rèn)為Java生態(tài)過(guò)于松散是Oracle缺乏戰(zhàn)略掌控的錯(cuò)。
Java生態(tài)中大量的開(kāi)源框架無(wú)序競(jìng)爭(zhēng),讓開(kāi)發(fā)人員無(wú)所是從,經(jīng)常為了尋找一個(gè)技術(shù)解決方案不得不在一大堆類似的框架中比選;Oracle并沒(méi)有主導(dǎo)生態(tài)中強(qiáng)勢(shì)的技術(shù),而是聽(tīng)之仍之,自生自滅——一門(mén)語(yǔ)言被生態(tài)所累是可悲的!
Java語(yǔ)言自身的面條式風(fēng)格越來(lái)越嚴(yán)重,匪夷所思的各種代碼范式讓程序員疲于記憶大量的跟具體框架相關(guān)的書(shū)寫(xiě)規(guī)則例如:Object.GetValue().ConfigThis().ConfigThat().ConfigOther() ...這樣的拉面語(yǔ)法被各種框架過(guò)度使用——一門(mén)語(yǔ)言被第三方框架綁架也是可悲的!(類似的其他語(yǔ)言的例子諸如Angular.js對(duì)于Javascript)
Java的開(kāi)發(fā)環(huán)境并沒(méi)有做到極致,主要依賴Eclipse作為IDE,開(kāi)發(fā)效率受到開(kāi)發(fā)環(huán)境的制約太嚴(yán)重,例如Eclipse就有Maven,Gradle,Ant等編譯環(huán)境的配置管理,導(dǎo)致不同的開(kāi)源工程使用不同的配置體系,每個(gè)程序員需要花大量的時(shí)間來(lái)了解這些配置的差異和修改方法,今天要學(xué)點(diǎn)Maven的XML配置,明天又要搞定Gradle的Groove語(yǔ)法……——一門(mén)語(yǔ)言被開(kāi)發(fā)環(huán)境綁架更是可悲的。
Java程序員最佳去處——轉(zhuǎn)型為C#程序員,原因如下:
Java和C#語(yǔ)法非常類似,轉(zhuǎn)到C#非常順當(dāng);例如:包引用改import 為using ,類繼承改extends 為“:”,多寫(xiě)一點(diǎn)代碼就搞定了,大部分知識(shí)都可以共享,而且未來(lái)需要的時(shí)候要返回java也是容易的;C#有Linq——一種Java沒(méi)有的語(yǔ)法特性,這是C#官方定義的一種極為便捷的非傳統(tǒng)語(yǔ)法特性,它主導(dǎo)了對(duì)集合的全面操作,把程序開(kāi)發(fā)中最乏味的部分解決了。雖然Linq也會(huì)導(dǎo)致類似Java那種面條式語(yǔ)句,但是這是一套放之四海而皆準(zhǔn)的面條,在所有程序中都可以用。例如:Collection.ToEnumerable().OfType<ObjectA>().Select(i=> i.a=conditionA).ToList(),這些方法來(lái)自官方框架,在所有程序中都是通用的,長(zhǎng)一點(diǎn)問(wèn)題不大,反而作為一種固定的通用范式。Java有一點(diǎn)理想主義的傾向,導(dǎo)致有時(shí)候語(yǔ)法就是一種形式上的桎梏;而C#則要實(shí)用主義許多,Linq就是這種突破的表現(xiàn),為了開(kāi)發(fā)習(xí)慣上的實(shí)用,不一定要延續(xù)一致性的語(yǔ)法原則。除此之外的例子還有擴(kuò)展方法(向現(xiàn)有類型追加任何方法)等等。使用C#則可以利用所有.net的生態(tài),而且.net生態(tài)幾乎由微軟主導(dǎo),尤其在微軟收購(gòu)了Github之后,在開(kāi)源界C#的生態(tài)也將受到微軟的管理(有時(shí)候選擇太多不是好事)。
C#擁有目前世界上最好的代碼開(kāi)發(fā)環(huán)境Visual Studio。VS的各方面功能都是極佳的,對(duì)于程序員開(kāi)發(fā)調(diào)試都是一大福音,用了VS你會(huì)恨死Eclipse。
隨著.net core的流行,C#同樣具備了跨平臺(tái)的能力,而且微軟還在積極開(kāi)發(fā).net native編譯器,今后用C#開(kāi)發(fā)本地代碼程序或許會(huì)非常便捷。
總結(jié)一下,C#既沒(méi)有被語(yǔ)法、也沒(méi)有被第三方框架或者開(kāi)發(fā)環(huán)境所綁架,解決方案出來(lái)的時(shí)候你非常清晰你的路徑,而不會(huì)被猶豫的選擇、晦澀的語(yǔ)法和經(jīng)常崩潰而且還找不到統(tǒng)一支持的開(kāi)發(fā)環(huán)境所困擾。