微軟程序員最好的時代來了

每過一段時間就有人跳出來講微軟不行了,.NET不行了,而後就去舔Java, 可是一直讓我以爲比較奇怪的是,幾年之後那些人還在用.NET,並且繼續噴着.NET, 舔着JAVA, 在我看來,這些人和那些每天噴本身的公司,卻依然在那個公司,每天噴中國,卻依然在中國的那些人是同樣的。前端

語言只是工具

由於我不是很是熟習JAVA, 因此我不知道JAVA擅長作什麼,可是我以爲.NET能作的事,基本上JAVA應該都能作,就像我認爲JAVA能作的事.NET基本也都能作同樣。可是奇怪的是我常常看到的是.NET人員噴.NET, 不多聽到JAVA人員噴.NET, 不過我估計不少JAVA人員應該也忙着去噴JAVA吧。這個其實和語言不要緊,只是和人的心理有關係,由於人總以爲「碗裏的沒鍋裏的好」。java

語言之爭已經持續不少年了,其實這個你們都知道沒什麼意義,網上不是流傳一個語言的鄙視鏈嗎?我以爲你們把他當個玩笑罷了,千萬別當真,由於無論怎麼鄙視,咱們畢竟要吃飯的。程序員

原本我也以爲寫這篇文章沒什麼意義,可是看到那些噴.NET文章,基本上句句說的都沒理,可是卻可能對初入行的人帶來很大的誤解,就像騙子很容易騙小孩,由於小孩涉世未深。web

我作開發已經10多年了,學過不少語言,可是真正用來吃飯的最主要的語言實際上是Visual Basic和.NET, 固然還有"漢語". 當初也學過Java, JSP, SSH. 可是最後選擇了.NET,爲何,一是由於.NET技術真的入門很快,當年入門快的好處之一就是你立馬就有必定的生產力,也就是你能很快開始幹活,這樣就有公司願意給你付薪水了,也就意味着你能夠更早從父母那裏斷奶了,另一個緣由就是當時面試的要.NET比要JAVA的多呀。面試

C# 語言

我學習過C, Java,Visual Basic, Ruby,Node.js等,可是我仍是以爲C#是生產力很是高的一門語言,好比一些很是優秀的語言特性,你剛剛纔能從其它語言裏看到一點點,好比自動屬性,LINQ, Lamda表達式,Action等,另外C#對多線程的封裝讓咱們在多線程編程時極其方便,好比TPL. 還有令你們頭疼的異步回調的問題,C#用很是優雅的Async, Await來解決,咱們看到ES7裏面已經開始實現相似的東西,是否是借鑑了C#呢?數據庫

多語言混用

對一個稍微複雜一點的程序來講,咱們爲何必定要只使用一個語言呢?好比咱們前端可使用ASP.NET MVC, 後端可使用Java 甚至是別的任何一個語言,服務咱們可使用WCF, 搜索咱們可使用Solr等等,咱們甚至是WEB層,業務層都是用.NET, 而數據庫可使用MySQL或者MongoDB.編程

.NET或者JAVA只是系統的一部分

咱們知道一個WEB程序,除了後端之外,不少其它的東西好比HTML, CSS,JavaScript,數據庫這些無論你作Java仍是.NET都是同樣須要的。也就是前端技術都是相同,另外HTTP協議,TCP/IP這些也不分語言吧。無論你是JAVA仍是.NET, AngularJS, ReactJS, HTML5, Bootstrap, Bower, Grunt, Gulp這些東西對你都是同樣的吧?後端

微軟技術能作什麼

我沒有作過JAVA程序,可是我使用微軟技術10多年了,我就說一說微軟技術能作什麼。api

桌面程序

Visual Basic

當年我畢業沒多久,就加入一家馬來西亞在中國的軟件公司,這個公司主要是作門票系統,當時咱們選擇了Visual Basic, 作過VB的人都知道VB是多麼的強大,除了極其方便的可見即所得的Form外,並且有幾乎一切你想要的組件,另外咱們都知道Windows是桌面系統中當之無愧的的霸主, 我不知道JAVA在這方面的優點是什麼,若是有些人說要跨平臺,可是我作了這麼多年的企業軟件,沒有幾個企業軟件是須要跨平臺的。當時在這個公司裏作了售票系統,還有閘機系統,POS系統,我估計不少人不知道閘機系統原來用Visual Basic也能夠作。廣州,北京最大的遊樂園都是咱們當年作的,而當年整個樂園的信息系統都是使用的微軟的技術。緩存

WPF

微軟推出的WPF, 我以爲是對桌面開發程序的極大的進步,幾乎全部的桌面程序的展現均可以使用WPF來呈現,而經過WPF可讓咱們很是方便快速的作出很是炫的桌面程序,WPF的XAML方式給了咱們很是方便的寫桌面窗體。 同時模板,動畫等在WPF都是極其容易實現,另外MVVM在WPF的應用裏很是盛行,WPF但是比Angular早出現了不少年。

UWP

不久前,微軟推出了Windows 10, 這使一套系統能夠運行在桌面,平板以及手機上,而咱們可使用XAML,甚至是JavaScript來開發一套程序就能夠運行在多個終端,這個對我的用戶可能沒有什麼,可是對企業用戶過重要了,具體的細節我以爲你們能夠去看一下MSDN或者Channel9

WEB

ASP.NET WEB Forms

我以爲不少人對微軟的誤解可能主要是這一部分,當年的ASP.NET WEB Forms因爲是快速拖控件,致使界面生成不少難以認識的代碼,大量的ViewState等,可是這並不能說ASP.NET WEB Forms很差,第一咱們可使用ASP.NET WEB Forms快速完成一些小型的WEB程序,加上有大量的第三方控件,是開發一些常規的程序快如閃電。第二咱們能夠儘可能使用客戶端的控件好比Repeater等,如今仍然有不少網站都是ASP.NET WEB Forms作的,難道這些網站都沒有用戶?!

ASP.NET WEB MVC

因爲不少人對ASP.NET WEB Forms充滿抱怨,並且WEB開發技術不斷地革新,微軟也順應潮流及時的推出了ASP.NET MVC, 使用MVC能夠寫出很是清爽的代碼,咱們團隊從ASP.NET MVC1.0 beta就開始使用,因爲我也學習過Ruby On Rails,基本上這兩個框架很是類似,極其方便的路由管理,View, Controller, Model的分層,使咱們能夠很好的使用強類型類開發,咱們已經使用ASP.NET MVC成功提交過不少項目,還歷來沒有遇到過問題是出自.NET自己的。

WEB 服務

WCF

使用統一的模型,讓咱們開發WEB服務極其方便,大部分狀況下咱們只須要定義一個接口,配置相關的Binding和EndPoint就能夠了,能夠很方便的使用Http, TCP, Https,能夠很是方便的使用各類安全策略,而這些就只須要簡簡單單的幾行配置而已,WCF極大的簡化了WEB服務的開發。

ASP.NET WEB API

除了WCF, 微軟又推出了ASP.NET WEB API, 使得咱們開發輕量級的WEB 服務極其容易,使用ASP.NET WEB API 咱們能夠很是容易實現服務的Restful. 而使用OWIN咱們能夠以任何方式來部署咱們的API。

Azure 微軟雲

微軟的雲很是的強大,使用過微軟雲的都知道,微軟雲幾乎能夠知足咱們一切對程序的要求,咱們可使用Azure web apps很方便的建立一個WEB, Webjob, 咱們可使用Azure SQL, 使用Azure storage, 能夠極其方便的使用雲的Queue, Bus等等,並且雲集成了不少優秀的第三方程序,好比咱們可使用Redis做爲Cache. 另外微軟的Cloud Services讓咱們能夠極其方便的管理咱們的部署。這讓咱們不少程序員從一個程序員能夠快速成爲能夠運維企業整套系統的人,而你只須要學習一些Azure的管理知識,好比自動擴展等等,而這些在雲裏面均可以快速簡單的配置。咱們幾乎一半客戶的系統都運行在Azure裏面,並且咱們能夠一鍵部署,若是有問題,咱們甚至可使用Visual Studio來直接Debug雲裏面的網站。

移動開發

因爲Mono,如今可使用.NET來開發移動的應用程序,使用Xamarin可使用C#開發出和原生性能如出一轍的iOS和Android程序,我也熟悉Objective-C, 並且用Objective-C開發過程序,雖說Objective-C 在某些方面很優秀,可是開發效率實在不敢恭維,否則Apple也不會推出Swift來革本身的命,另外當你既須要iOS,又須要Android的時候,你至少須要一個熟悉Objective-C的,又須要一個熟悉Java. 而一樣地東西須要作兩遍。而使用Xamarin作企業級APP,大量的業務邏輯能夠共享,更別說能夠直接使用效率很是的C#語言了,咱們已經成功提交了好幾個基於Xamarin的程序。

另外,Xamarin推出的Xamarin.Forms可使用XAML及C#用一套代碼來開發iOS, Android以及Windows Phone的程序,並且性能和原生的如出一轍,咱們也順利開發過基於Xamarin.Forms的程序。

遊戲開發

如今已經有不少程序基於Unity開發,而你能夠選擇C#來做爲基於Unity的遊戲的主要語言。能夠搜索一下,已經有大量的上架遊戲是使用.NET開發的。

小結

固然,以上只是我使用的微軟相關技術,目前來講,除了客戶明確選擇其它語言之外,還真的沒有多少是Java能作而.NET作不了的。

桌面,WEB, 移動開發 均可以使用.NET,簡單點說,就是你均可以使用一門語言,那就是C#來開發

開發工具

Visual Studio

作.NET開發,配套的開發工具是Visual Studio, 我以爲Visual Studio是最好的IDE之一,你幾乎可使用作任何語言的開發,這個使用過的人都很是清楚,雖說Vim是編輯器之神,而Emacs是神的編輯器,可是顯示世界能有多少個神?

Resharper

Resharper是每一個.NET程序員的必備工具之一,基本上可讓咱們的開發效率提升三分之一,設個誰用過誰知道。

領域驅動設計

若是我沒有記錯的話,雖然Eric Evans較早寫了領域驅動設計一書,但真正推進領域驅動設計的是有不少作.NET開發的,好比Greg Young, 咱們能夠看看NServicebus. 能夠看看 NServicebus

咱們已經使用領域驅動設計提交了一個很是大型的項目,這個項目是一個世界500強的主要系統。而這個系統就是使用的.NET C#,使用了CQRS, NServicebus, ASP.NET MVC, ASP.NET WEB API,SQL Server等等,系統已經運行了好幾年了,尚未發現什麼問題。

有興趣的能夠關注一下個人領域驅動系列。

長尾理論

不少人說大型的一些系統都沒有用.NET, 好比BAT, 好比新浪微博,他們是否是一點都沒有用.NET我不知道。我想說的第一那些系統都比較龐大,使用JAVA或者PHP不少時候是基於歷史的選擇,另外這些系統就那麼幾個,並且並非全部的軟件都是電商,都是微博?

我在這裏想說的長尾,就是第一中小企業幾乎佔據全部的企業的80%, 而這些企業須要各類各樣的系統,而這些企業不管是國內仍是國外,都是Windows佔大部分。雖然我也很是喜歡蘋果的產品,可是企業是須要賺錢的。 也就是說80%的企業都不會像BAT那麼大,那麼至少這80%的系統使用.NET開發沒有任何問題,再加上.NET有着很高的開發效率,咱們有什麼理由不選擇呢?

使用.NET應該是企業或者客戶項目的第一選擇

若是隻作WEB系統,或者只作電商之類,那麼使用其它任何語言都沒問題,可是一旦作企業系統,每每.NET是一開始很是安全的選擇,爲何? 由於不少企業使用的系統是Windows, 使用的辦公軟件是Office, 使用的服務器是Windows Server,使用的是AD, 使用的郵件系統是Exchang Server, 我不知道大家使用JAVA和PHP和這些系統集成時是否方便,可是使用.NET是很是方便的。目前來看,.NET幾乎能夠知足企業應用的全部的現有的需求以及潛在的需求。

關於開源,關於免費

如今.NET不少東西都開源了,.NET CORE 和 ASP.NET VNext已經能夠跑在Mac和Linux上了,我相信會愈來愈多的.NET程序未來會跑在Linux服務器上,另外大部分程序根本就用不了那麼多服務器,若是咱們真的須要那麼多服務,證實公司已經頗有錢了,還買不起幾個Windows?並且若是真的須要那麼多服務器,咱們可使用Microsoft Azure, 買幾個Windows總比要請幾個Linux運維工程師要便宜不少吧。

最後,沒有人限制你只會.NET

沒有誰能限制.NET程序員學習其餘的語言,.NET程序員能夠學習Java, Ruby, Node.js, 能夠學習Event Driven, Message Queue, Solr, 學習MongoDB, Redis, 學習分佈式緩存,學習任何其它語言須要學習的東西。

關於薪水

我不相信一我的學兩個月JAVA, 不學習其它東西就能夠立馬成爲一個優秀的程序員,就能夠拿到很高的薪水,由於在我看來,要成爲一個優秀的.NET程序員,須要學習大量的知識,我相信JAVA程序員也是同樣。若是說.NET程序員年薪幾百萬我沒見過,可是把.NET學好能夠拿到相對不錯的薪水仍是沒有問題的。

咱們就是使用.NET的技術,並且目前咱們公司.NET程序員的平均薪水已經在10K以上了(這在西安當地已經算不錯了),若是你以爲你.NET技術還能夠而沒有地方發揮的,歡迎聯繫我 wangdeshui@outlook.com

相關文章
相關標籤/搜索