微軟程式設計師最好的時代來了

敏捷的水發表於2015-12-23

每過一段時間就有人跳出來說微軟不行了,.NET不行了,然後就去舔Java, 但是一直讓我覺得比較奇怪的是,幾年以後那些人還在用.NET,而且繼續噴著.NET, 舔著JAVA, 在我看來,這些人和那些天天噴自己的公司,卻依然在那個公司,天天噴中國,卻依然在中國的那些人是一樣的。

語言只是工具

因為我不是非常熟習JAVA, 所以我不知道JAVA擅長做什麼,但是我覺得.NET能做的事,基本上JAVA應該都能做,就像我認為JAVA能做的事.NET基本也都能做一樣。但是奇怪的是我經常看到的是.NET人員噴.NET, 很少聽到JAVA人員噴.NET, 不過我估計很多JAVA人員應該也忙著去噴JAVA吧。這個其實和語言沒關係,只是和人的心理有關係,因為人總覺得“碗裡的沒鍋裡的好”。

語言之爭已經持續很多年了,其實這個大家都知道沒什麼意義,網上不是流傳一個語言的鄙視鏈嗎?我覺得大家把他當個玩笑罷了,千萬別當真,因為不管怎麼鄙視,我們畢竟要吃飯的。

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

我做開發已經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多年了,我就說一說微軟技術能做什麼。

桌面程式

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學好可以拿到相對不錯的薪水還是沒有問題的。

相關文章