微軟程序員最好的時代來了
每過一段時間就有人跳出來說微軟不行了,.NET不行了,然后就去舔Java, 但是一直讓我覺得比較奇怪的是,幾年以后那些人還在用.NET,而且繼續(xù)噴著.NET, 舔著JAVA, 在我看來,這些人和那些天天噴自己的公司,卻依然在那個公司,天天噴中國,卻依然在中國的那些人是一樣的。
語言只是工具因為我不是非常熟習JAVA, 所以我不知道JAVA擅長做什么,但是我覺得.NET能做的事,基本上JAVA應該都能做,就像我認為JAVA能做的事.NET基本也都能做一樣。但是奇怪的是我經(jīng)常看到的是.NET人員噴.NET, 很少聽到JAVA人員噴.NET, 不過我估計很多JAVA人員應該也忙著去噴JAVA吧。這個其實和語言沒關(guān)系,只是和人的心理有關(guān)系,因為人總覺得“碗里的沒鍋里的好”。
語言之爭已經(jīng)持續(xù)很多年了,其實這個大家都知道沒什么意義,網(wǎng)上不是流傳一個語言的鄙視鏈嗎?我覺得大家把他當個玩笑罷了,千萬別當真,因為不管怎么鄙視,我們畢竟要吃飯的。
本來我也覺得寫這篇文章沒什么意義,但是看到那些噴.NET文章,基本上句句說的都沒理,但是卻可能對初入行的人帶來很大的誤解,就像騙子很容易騙小孩,因為小孩涉世未深。
我做開發(fā)已經(jīng)10多年了,學過很多語言,但是真正用來吃飯的最主要的語言其實是Visual Basic和.NET, 當然還有'漢語'. 當初也學過Java, JSP, SSH. 但是最后選擇了.NET,為什么,一是因為.NET技術(shù)真的入門很快,當年入門快的好處之一就是你立馬就有一定的生產(chǎn)力,也就是你能很快開始干活,這樣就有公司愿意給你付薪水了,也就意味著你可以更早從父母那里斷奶了,另外一個原因就是當時面試的要.NET比要JAVA的多呀。
C# 語言我學習過C, Java,Visual Basic, Ruby,Node.js等,但是我還是覺得C#是生產(chǎn)力非常高的一門語言,比如一些非常優(yōu)秀的語言特性,你剛剛才能從其它語言里看到一點點,比如自動屬性,LINQ, Lamda表達式,Action等,另外C#對多線程的封裝讓我們在多線程編程時極其方便,比如TPL. 還有令大家頭疼的異步回調(diào)的問題,C#用非常優(yōu)雅的Async, Await來解決,我們看到ES7里面已經(jīng)開始實現(xiàn)類似的東西,是不是借鑒了C#呢?
多語言混用對一個稍微復雜一點的程序來說,我們?yōu)槭裁匆欢ㄒ皇褂靡粋€語言呢?比如我們前端可以使用ASP.NET MVC, 后端可以使用Java 甚至是別的任何一個語言,服務我們可以使用WCF, 搜索我們可以使用Solr等等,我們甚至是WEB層,業(yè)務層都是用.NET, 而數(shù)據(jù)庫可以使用MySQL或者MongoDB.
.NET或者JAVA只是系統(tǒng)的一部分我們知道一個WEB程序,除了后端以外,很多其它的東西比如HTML, CSS,JavaScript,數(shù)據(jù)庫這些不管你做Java還是.NET都是一樣需要的。也就是前端技術(shù)都是相同,另外HTTP協(xié)議,TCP/IP這些也不分語言吧。不管你是JAVA還是.NET, AngularJS, ReactJS, HTML5, Bootstrap, Bower, Grunt, Gulp這些東西對你都是一樣的吧?
微軟技術(shù)能做什么我沒有做過JAVA程序,但是我使用微軟技術(shù)10多年了,我就說一說微軟技術(shù)能做什么。
桌面程序Visual Basic當年我畢業(yè)沒多久,就加入一家馬來西亞在中國的軟件公司,這個公司主要是做門票系統(tǒng),當時我們選擇了Visual Basic, 做過VB的人都知道VB是多么的強大,除了極其方便的可見即所得的Form外,而且有幾乎一切你想要的組件,另外我們都知道Windows是桌面系統(tǒng)中當之無愧的的霸主, 我不知道JAVA在這方面的優(yōu)勢是什么,如果有些人說要跨平臺,但是我做了這么多年的企業(yè)軟件,沒有幾個企業(yè)軟件是需要跨平臺的。當時在這個公司里做了售票系統(tǒng),還有閘機系統(tǒng),POS系統(tǒng),我估計很多人不知道閘機系統(tǒng)原來用Visual Basic也可以做。廣州,北京最大的游樂園都是我們當年做的,而當年整個樂園的信息系統(tǒng)都是使用的微軟的技術(shù)。
WPF微軟推出的WPF, 我覺得是對桌面開發(fā)程序的極大的進步,幾乎所有的桌面程序的展示都可以使用WPF來呈現(xiàn),而通過WPF可以讓我們非常方便快速的做出非常炫的桌面程序,WPF的XAML方式給了我們非常方便的寫桌面窗體。 同時模板,動畫等在WPF都是極其容易實現(xiàn),另外MVVM在WPF的應用里非常盛行,WPF可是比Angular早出現(xiàn)了很多年。
UWP不久前,微軟推出了Windows 10, 這使一套系統(tǒng)可以運行在桌面,平板以及手機上,而我們可以使用XAML,甚至是JavaScript來開發(fā)一套程序就可以運行在多個終端,這個對個人用戶可能沒有什么,但是對企業(yè)用戶太重要了,具體的細節(jié)我覺得大家可以去看一下MSDN或者Channel9
WEBASP.NET WEB Forms我覺得很多人對微軟的誤解可能主要是這一部分,當年的ASP.NET WEB Forms由于是快速拖控件,導致界面生成很多難以認識的代碼,大量的ViewState等,但是這并不能說ASP.NET WEB Forms不好,第一我們可以使用ASP.NET WEB Forms快速完成一些小型的WEB程序,加上有大量的第三方控件,是開發(fā)一些常規(guī)的程序快如閃電。第二我們可以盡量使用客戶端的控件比如Repeater等,現(xiàn)在仍然有很多網(wǎng)站都是ASP.NET WEB Forms做的,難道這些網(wǎng)站都沒有用戶?!
ASP.NET WEB MVC由于很多人對ASP.NET WEB Forms充滿抱怨,而且WEB開發(fā)技術(shù)不斷地革新,微軟也順應潮流及時的推出了ASP.NET MVC, 使用MVC可以寫出非常清爽的代碼,我們團隊從ASP.NET MVC1.0 beta就開始使用,由于我也學習過Ruby On Rails,基本上這兩個框架非常相似,極其方便的路由管理,View, Controller, Model的分層,使我們可以很好的使用強類型類開發(fā),我們已經(jīng)使用ASP.NET MVC成功提交過很多項目,還從來沒有遇到過問題是出自.NET本身的。
WEB 服務WCF使用統(tǒng)一的模型,讓我們開發(fā)WEB服務極其方便,大部分情況下我們只需要定義一個接口,配置相關(guān)的Binding和EndPoint就可以了,可以很方便的使用Http, TCP, Https,可以非常方便的使用各種安全策略,而這些就只需要簡簡單單的幾行配置而已,WCF極大的簡化了WEB服務的開發(fā)。
ASP.NET WEB API除了WCF, 微軟又推出了ASP.NET WEB API, 使得我們開發(fā)輕量級的WEB 服務極其容易,使用ASP.NET WEB API 我們可以非常容易實現(xiàn)服務的Restful. 而使用OWIN我們可以以任何方式來部署我們的API。
Azure 微軟云微軟的云非常的強大,使用過微軟云的都知道,微軟云幾乎可以滿足我們一切對程序的要求,我們可以使用Azure web apps很方便的創(chuàng)建一個WEB, Webjob, 我們可以使用Azure SQL, 使用Azure storage, 可以極其方便的使用云的Queue, Bus等等,而且云集成了很多優(yōu)秀的第三方程序,比如我們可以使用Redis作為Cache. 另外微軟的Cloud Services讓我們可以極其方便的管理我們的部署。這讓我們很多程序員從一個程序員可以快速成為可以運維企業(yè)整套系統(tǒng)的人,而你只需要學習一些Azure的管理知識,比如自動擴展等等,而這些在云里面都可以快速簡單的配置。我們幾乎一半客戶的系統(tǒng)都運行在Azure里面,而且我們可以一鍵部署,如果有問題,我們甚至可以使用Visual Studio來直接Debug云里面的網(wǎng)站。
移動開發(fā)由于Mono,現(xiàn)在可以使用.NET來開發(fā)移動的應用程序,使用Xamarin可以使用C#開發(fā)出和原生性能一模一樣的iOS和Android程序,我也熟悉Objective-C, 而且用Objective-C開發(fā)過程序,雖然說Objective-C 在某些方面很優(yōu)秀,但是開發(fā)效率實在不敢恭維,不然Apple也不會推出Swift來革自己的命,另外當你既需要iOS,又需要Android的時候,你至少需要一個熟悉Objective-C的,又需???一個熟悉Java. 而同樣地東西需要做兩遍。而使用Xamarin做企業(yè)級APP,大量的業(yè)務邏輯可以共享,更別說可以直接使用效率非常的C#語言了,我們已經(jīng)成功提交了好幾個基于Xamarin的程序。
另外,Xamarin推出的Xamarin.Forms可以使用XAML及C#用一套代碼來開發(fā)iOS, Android以及Windows Phone的程序,而且性能和原生的一模一樣,我們也順利開發(fā)過基于Xamarin.Forms的程序。
游戲開發(fā)現(xiàn)在已經(jīng)有很多程序基于Unity開發(fā),而你可以選擇C#來作為基于Unity的游戲的主要語言。可以搜索一下,已經(jīng)有大量的上架游戲是使用.NET開發(fā)的。
小結(jié)當然,以上只是我使用的微軟相關(guān)技術(shù),目前來說,除了客戶明確選擇其它語言以外,還真的沒有多少是Java能做而.NET做不了的。
桌面,WEB, 移動開發(fā) 都可以使用.NET,簡單點說,就是你都可以使用一門語言,那就是C#來開發(fā)
開發(fā)工具Visual Studio做.NET開發(fā),配套的開發(fā)工具是Visual Studio, 我覺得Visual Studio是最好的IDE之一,你幾乎可以使用做任何語言的開發(fā),這個使用過的人都非常清楚,雖然說Vim是編輯器之神,而Emacs是神的編輯器,但是顯示世界能有多少個神?
ResharperResharper是每個.NET程序員的必備工具之一,基本上可以讓我們的開發(fā)效率提高三分之一,設(shè)個誰用過誰知道。
領(lǐng)域驅(qū)動設(shè)計如果我沒有記錯的話,雖然Eric Evans較早寫了領(lǐng)域驅(qū)動設(shè)計一書,但真正推動領(lǐng)域驅(qū)動設(shè)計的是有很多做.NET開發(fā)的,比如Greg Young, 我們可以看看NServicebus. 可以看看 NServicebus
我們已經(jīng)使用領(lǐng)域驅(qū)動設(shè)計提交了一個非常大型的項目,這個項目是一個世界500強的主要系統(tǒng)。而這個系統(tǒng)就是使用的.NET C#,使用了CQRS, NServicebus, ASP.NET MVC, ASP.NET WEB API,SQL Server等等,系統(tǒng)已經(jīng)運行了好幾年了,還沒有發(fā)現(xiàn)什么問題。
有興趣的可以關(guān)注一下我的領(lǐng)域驅(qū)動系列。
長尾理論很多人說大型的一些系統(tǒng)都沒有用.NET, 比如BAT, 比如新浪微博,他們是不是一點都沒有用.NET我不知道。我想說的第一那些系統(tǒng)都比較龐大,使用JAVA或者PHP很多時候是基于歷史的選擇,另外這些系統(tǒng)就那么幾個,而且并不是所有的軟件都是電商,都是微博?
我在這里想說的長尾,就是第一中小企業(yè)幾乎占據(jù)所有的企業(yè)的80%, 而這些企業(yè)需要各種各樣的系統(tǒng),而這些企業(yè)不論是國內(nèi)還是國外,都是Windows占大部分。雖然我也非常喜歡蘋果的產(chǎn)品,但是企業(yè)是需要賺錢的。 也就是說80%的企業(yè)都不會像BAT那么大,那么至少這80%的系統(tǒng)使用.NET開發(fā)沒有任何問題,再加上.NET有著很高的開發(fā)效率,我們有什么理由不選擇呢?
使用.NET應該是企業(yè)或者客戶項目的第一選擇如果只做WEB系統(tǒng),或者只做電商之類,那么使用其它任何語言都沒問題,但是一旦做企業(yè)系統(tǒng),往往.NET是一開始非常安全的選擇,為什么? 因為很多企業(yè)使用的系統(tǒng)是Windows, 使用的辦公軟件是Office, 使用的服務器是Windows Server,使用的是AD, 使用的郵件系統(tǒng)是Exchang Server, 我不知道你們使用JAVA和PHP和這些系統(tǒng)集成時是否方便,但是使用.NET是非常方便的。目前來看,.NET幾乎可以滿足企業(yè)應用的所有的現(xiàn)有的需求以及潛在的需求。
關(guān)于開源,關(guān)于免費現(xiàn)在.NET很多東西都開源了,.NET CORE 和 ASP.NET VNext已經(jīng)可以跑在Mac和Linux上了,我相信會越來越多的.NET程序?qū)頃茉贚inux服務器上,另外大部分程序根本就用不了那么多服務器,如果我們真的需要那么多服務,證明公司已經(jīng)很有錢了,還買不起幾個Windows?而且如果真的需要那么多服務器,我們可以使用Microsoft Azure, 買幾個Windows總比要請幾個Linux運維工程師要便宜很多吧。
最后,沒有人限制你只會.NET沒有誰能限制.NET程序員學習其他的語言,.NET程序員可以學習Java, Ruby, Node.js, 可以學習Event Driven, Message Queue, Solr, 學習MongoDB, Redis, 學習分布式緩存,學習任何其它語言需要學習的東西。
關(guān)于薪水我不相信一個人學兩個月JAVA, 不學習其它東西就可以立馬成為一個優(yōu)秀的程序員,就可以拿到很高的薪水,因為在我看來,要成為一個優(yōu)秀的.NET程序員,需要學習大量的知識,我相信JAVA程序員也是一樣。如果說.NET程序員年薪幾百萬我沒見過,但是把.NET學好可以拿到相對不錯的薪水還是沒有問題的。
相關(guān)文章:
1. Google Adsense西聯(lián)匯款領(lǐng)取方式與流程,親身實踐2. Hello World 程序的起源與歷史3. 做好微信公眾號運營怎么能缺少這些幫手4. SEO優(yōu)化反向鏈接(Back-Links)的四大原則5. Papi醬首次直播的八大平臺是哪些 打賞90萬服不服6. 百度、360、搜狗、神馬搜索份額多少?2018中國搜索引擎排行7. 程序員保值的五個關(guān)鍵點8. 網(wǎng)站里的圖片怎么優(yōu)化?淺談網(wǎng)站優(yōu)化之圖片優(yōu)化三步驟9. 網(wǎng)站優(yōu)化中搜索框如何設(shè)計?網(wǎng)站建設(shè)搜索框設(shè)計技巧和功能10. 門戶網(wǎng)站頁面設(shè)計要避免的五大誤區(qū)