當前位置:
首頁 > 最新 > 為什麼好多公司的開發語言從C#變成了JAVA?

為什麼好多公司的開發語言從C#變成了JAVA?

從我之前的一些博客文章看,大家也能知道之前是一個微軟技術棧的程序員,也就是主要C#,.net MVC的東東,後來換了工作,算是國內的一二線的一些互聯網公司,所以在技術方向和儲備上都有一些調整,開發語言也慢慢跳出微軟技術棧,工作中使用了其他的開源開發語言,新項目基本是開源語言,框架也使用了不少,所以就.net 和 類java一樣的開源語言框架都有一定的了解,今天有時間就談談為什麼好多公司的開發語言慢慢從C#變成了JAVA了。

其實也是希望大家能夠討論一下,如果是討論的話我們就會建立一個基本的討論標準,所以這篇我主要討論的標準有兩個:

公司定義:我們定義的是互聯網公司,TO-C的那種,不是to-B的,也不是軟體公司,因為軟體公司這種並發和QPS一個請求走9次IO也是正常的,儘管我們不應該這麼做,但是還是有人這麼做,因為他們主要關注點是能完成一些複雜業務;

項目定義:有的同學說微軟,百度,騰訊也在用C#啊,這個就沒有討論的意義,隔壁廣場舞大媽也可以去google做保潔,但是做產品和研發肯定不行,所以這個項目的定義還是建立在一套核心系統之上,這套核心系統的主要任務是為公司創造收入,而不是起職能作用,只有面對互聯網的產品才有可能去解決ddos攻擊,要做反扒系統,要做反垃圾系統,要做用戶增長系統,要做分散式事務控制,要做a/b test系統,要做大數據日誌收集系統,要做支付系統,項目多了,伺服器多了我們才要建立自動發布/運維繫統。

所以希望園子裡面的同學能基於上面兩點進行討論,光是語言之爭我也沒有必要寫這篇文章了,如有光就語言本身進行無意義的爭論,這篇文章就沒有價值,我會刪掉的。

基於上面兩點可以讓大家真正認識到不同語言在不同領域的作用,也希望挖掘出國內用.net比較好的團隊在用.net做什麼東西,如果有好的經驗的話可以在這裡分享,讓更多的人和團隊可以將.net放在一些核心和商業系統之上,促進.net在國內偏技術而不是業務領域的發展。

好的程序員不會簡單的把自己仍在簡單的語言之爭的,因為好的程序員應該知道君子性非異也,善假於物也,我們系統中也會用多種語言,java主要做api和支付,兩方面原因,java有成熟的開發框架包括日誌,大數據,全文檢索,成熟的mq堆棧等等,這樣我們有更多的時間去做核心功能,而不是花大量時間做基礎集成和搭建。我們會用node做長連接,還有h5的後端api分發,也有團隊用go做底層通信的封裝,我還是習慣用C#寫一些批處理的控制台命令,python寫一些map/reduce的東西,主要是因為可以網上找到最好的例子,如果純用一張語言干這些事情,肯定相當頭疼,效率不會太高。

架構師 and CTO

這個因素其實會佔很大的比重,小的公司初始的技術框架選擇都是由架構師確定的,後來就很少改變了,公司大了之後,引入CTO,CTO肯定不會就具體的框架和模塊發號施令,更多的是在一個全局的角度去看公司現有的一些核心系統,比如商城系統的訂單及數據中心的日誌數據系統這些宏達的模塊。

在公司架構來看,每一個項目都是部門級別的,最後不太可能每個公司每個部門有不同的開發語言,自設鴻溝,核心系統之間語言和通信肯定是相同相似的。

當然我們的職能部門,如OA系統,運營系統,更多的是給公司內部人員或者職能人員使用,可以使用另一種語言,因為這兩套系統基本在核心系統之外,不太需要和其他系統聯繫起來,最簡單的我們想不到公司數據平台接入OA系統有什麼戰略意義。

於是問題來了為什麼架構師和CTO會選JAVA作為第一語言呢?

其實選擇.net的語言的架構師和CTO也不少。

混到架構師和CTO的基本都是工作多年,而混到多年的基本大浪淘沙就剩大部分JAVA少部分C#(歷史原因)。

由於這部分架構師和CTO過去的經歷是使用JAVA開發語言所以熟悉,這個就用了。

比較有影響力公司的CTO或者架構師參加一些QCon大會,為了有面子,基本傾向於公司使用JAVA等架構,這也是我們很少能見到國內一些技術大會有人分享.net架構的,除了stackoverflow。

總結而來就是 CTO架構師過去的技術經驗基本決定了公司技術的選型,在架構師CTO這個圈子,大家都在用JAVA順勢而為。

框架及生態

首先一個發展的比較好的公司或者成長經歷了擴張的公司,都會衍生出好幾個核心系統,而不是簡單的一套三層架構搞定的。

多個系統在之後會經歷SOA等服務化的分割,然後需要通信,需要事務管理,需要日誌監控,需要非同步處理,然後在網上一搜,發現基本每個方向的優秀解決方案都是有java的影子,或多或少會影響我們的選型,單就RPC框架來說開源生態就有好幾種,並且背後的推手都是雅虎,google,facebook這樣的一等一的互聯網公司,但是.net背後基本也就是互聯網能力不夠的微軟和算不上2線的stackoverflow了吧。

生態大家也都知道就是mysql+linux+tomcat 對抗 sqlserver+windows+iis,微軟收費大家知道,跨平台這件事java完勝,最後發現搭建一套虛擬機集群linux是多麼的順手,一套win的虛擬機集群即傷財又傷神。

總結:框架開源語言豐富,並且好多框架背後都有facebook,google這樣的巨頭做推手,.net的後盾就少很多。linux在虛擬化這件事基本完勝win,高昂的授權費如果有上千台伺服器的話,這將是一大比費用。

技術的激進性

就是說不同圈子社區對於新技術的敏感性,由於開源社區受眾眾多,一個新概念的出現,開源社區就會如雨後春筍般出現文章及概念或者框架DEMO了,微軟社區除了官方的推進,其餘都屬於打醬油,而且微軟主要精力基本在他的AZure上了。

以炒了一年多的微服務,兩年多的大數據為例,我們已經將大數據用在了生產環境中,docker也在測試中,這些激進的想法和實踐在.net方向上肯定很難這麼快推進吧。

微服務有spring boot等概念,先不說效果怎麼樣,起碼社區在推進,但是基本沒有聽過微軟針對於微服務有什麼新框架出來。

總結來說,不黑不吹,過去兩年公司和項目的需要,自己學習了java web,spring這一套,研究了hadoop,hive的大數據框架,正在學docker,正式環境嘗試前後端分離快速開發h5界面,這些嘗試在之前的經歷中都是沒有的,可能是隨著工作經驗增長,能力有所提高就比較自信敢在生產環境嘗試,之前也是受限於.net的系統本身業務方向原因,更多的經歷耗費在了業務上,而不是處理技術問題吧。

相信微軟在解決跨平台這件事,社區積累出現優秀框架,整個微軟技術將會更加優秀。

有同學批評我對於.net的觀察還停留在5年前,確實最近兩年很少寫.net了,但是這個5年確實也不影響,node出來也就5年吧,objectC也是最近5年比較火,包括hadoop,docker最近兩年才火起來的,我也用react,angular這些前端框架,我會追新技術的,新事物的誕生是為了解決老事物的問題而來,而且我們用的架構在市面上應該是最通用的,其實架構這件事5年真不算老,記得之前看這本書,提到了facebook工程部門2010年做的工具和框架,就有a/btest框架,增長框架,結果我們去年才做,也就是說比facebook延遲了5年,只能說他們太優秀了。知道自己的不足,才能快速前行。

像54樓,筍乾說的一樣,我們是為了找到問題,然後解決問題,好多人習慣性的上來就吵,這個肯定不是一個適合進步的思維,程序員也不會被一種語言弔死,勇於去嘗試不同,勇於接收挑戰,特別是工作多年之後會發現同樣工作年限的人能力差距是很大的,經常聽到走出舒適區,卻鮮有人做到,可以先從思維開始,看看有有什麼不同,踏實是說出自己的觀點,共同討論共同進步,還是基於兩個前提:

互聯網公司:因為他們會面對更多的問題,更大的並發量,每次修改都是在奔跑的火車上換輪子,每一次異常,每一次停頓都會損失大量的金錢的;

核心商業系統:因為這樣的系統是直接在公司產生價值的系統,這樣的系統要像寶寶一樣呵護,肯定是由公司最優秀的人和團隊,以及最好的架構資金支持的;

轉發分享是一種美德


點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 java學習吧 的精彩文章:

狂拽炫酷吊炸天 黑客編譯器,5秒你也能擁有!
程序員段子合集 吃東西時候千萬別看 附把妹指南
程序猿必修課之數據結構
關於面試!面試篇
程序員眼中的Eclipse是什麼樣的?

TAG:java學習吧 |