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

編程語言 Java 微軟 Google Docker Java技術進階 2018-11-27

今天來談談為什麼好多公司的開發語言慢慢從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>>這本書,提到了facebook工程部門2010年做的工具和框架,就有a/btest框架,增長框架,結果我們去年才 做,也就是說比facebook延遲了5年,只能說他們太優秀了。知道自己的不足,才能快速前行。

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

  • 互聯網公司:因為他們會面對更多的問題,更大的併發量,每次修改都是在奔跑的火車上換輪子,每一次異常,每一次停頓都會損失大量的金錢的;
  • 核心商業系統:因為這樣的系統是直接在公司產生價值的系統,這樣的系統要像寶寶一樣呵護,肯定是由公司最優秀的人和團隊,以及最好的架構資金支持的;

大家開心,不要互相攻擊。

喜歡小編輕輕點個關注吧!

相關推薦

推薦中...