為什么微軟選擇C#而不是C++?一個(gè)老程序員的深度思考
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
前幾天在技術(shù)群里又看到有人在爭(zhēng)論C#和C++孰優(yōu)孰劣,說(shuō)實(shí)話這種爭(zhēng)論我見(jiàn)過(guò)太多次了。但今天我想聊個(gè)更有意思的話題:微軟明明有C++這個(gè)強(qiáng)大的工具,為什么還要費(fèi)勁巴拉地搞出個(gè)C#? 這個(gè)問(wèn)題困擾了我很久,直到我深入研究了微軟的技術(shù)發(fā)展歷程,才發(fā)現(xiàn)這背后有著非常精彩的商業(yè)和技術(shù)考量。今天就跟大家掰扯掰扯這個(gè)話題,相信看完你會(huì)對(duì)技術(shù)選型有全新的認(rèn)識(shí)。
?? 一切要從微軟和Sun的那場(chǎng)"恩怨"說(shuō)起?? 微軟當(dāng)年差點(diǎn)成了Java的"帶頭大哥"說(shuō)起來(lái)你可能不信,微軟當(dāng)年差點(diǎn)成了Java陣營(yíng)的核心玩家。那是90年代末,Java剛剛火起來(lái),"一次編寫(xiě),到處運(yùn)行"的口號(hào)喊得震天響。 微軟一看,這玩意兒不錯(cuò)啊!于是花錢(qián)從Sun那里買(mǎi)了Java授權(quán),準(zhǔn)備大干一場(chǎng)。但問(wèn)題是,微軟這幫人就是閑不住,拿到Java后就開(kāi)始各種"優(yōu)化":
?? 那場(chǎng)價(jià)值10億美元的教訓(xùn)但是Sun公司不干了!他們覺(jué)著微軟這是在搞破壞,你這樣搞,Java的跨平臺(tái)特性不就沒(méi)了嗎?于是1997年,Sun直接把微軟告上了法庭。 結(jié)果大家都知道了:
?? 為什么不直接用C++?這里面門(mén)道挺深?? C++雖好,但真不是萬(wàn)能藥很多人覺(jué)得,微軟既然有C++,干嘛還要重新造輪子?這就像問(wèn)一個(gè)木匠,你既然有鋸子,為什么還要買(mǎi)刨子? 看看下面這段C++代碼,你就明白了:
再看看C#怎么寫(xiě):
差別一目了然。C++雖然性能強(qiáng)悍,但寫(xiě)起來(lái)真的太累了,特別是做業(yè)務(wù)開(kāi)發(fā)的時(shí)候。 ? 性能和效率,魚(yú)和熊掌能兼得嗎?我以前帶團(tuán)隊(duì)的時(shí)候,經(jīng)常遇到這樣的場(chǎng)景: 用C++開(kāi)發(fā):
用C#開(kāi)發(fā):
??? 微軟的聰明之處:不是替代,而是分工?? 分層架構(gòu)才是王道微軟其實(shí)很聰明,他們從來(lái)沒(méi)想過(guò)用C#完全替代C++,而是讓兩者各司其職:
這種設(shè)計(jì)真的很巧妙:
?? 看看微軟自己怎么選擇有個(gè)很有意思的現(xiàn)象,微軟內(nèi)部的技術(shù)選擇其實(shí)很說(shuō)明問(wèn)題: 他們用C++的地方:
他們用C#的地方:
看到了嗎?連微軟自己都是這么分工的。 ?? 時(shí)間證明了微軟的眼光?? C#的跨平臺(tái)逆襲最有意思的是,當(dāng)年Java起訴微軟的理由是"破壞跨平臺(tái)特性",結(jié)果現(xiàn)在C#反而成了真正的跨平臺(tái)語(yǔ)言:
這種反轉(zhuǎn)真的很戲劇化。當(dāng)年Sun說(shuō)微軟破壞跨平臺(tái),現(xiàn)在.NET Core/5+在跨平臺(tái)這條路上走得比Java還要激進(jìn)。 ?? 現(xiàn)在的C#有多香?作為一個(gè)寫(xiě)了十幾年代碼的老程序員,我必須說(shuō)現(xiàn)在的C#真的很香:
這種開(kāi)發(fā)效率,在C++時(shí)代是不敢想象的。 ?? 給咱們C#程序員的幾點(diǎn)思考?? 技術(shù)選型的幾個(gè)原則基于微軟這個(gè)案例,我總結(jié)了幾個(gè)技術(shù)選型的經(jīng)驗(yàn): 什么時(shí)候選C++:
什么時(shí)候選C#:
?? 幾個(gè)實(shí)用建議不要有語(yǔ)言鄙視鏈心理 我見(jiàn)過(guò)太多程序員覺(jué)得C++比C#高級(jí),C#比JavaScript高級(jí)。其實(shí)每種語(yǔ)言都有自己的適用場(chǎng)景,關(guān)鍵是選對(duì)工具解決對(duì)的問(wèn)題。 理解自己的邊界 作為C#開(kāi)發(fā)者,要知道什么時(shí)候需要調(diào)用native代碼。比如圖像處理、加密算法這些對(duì)性能要求極高的場(chǎng)景,該用C++就用C++,通過(guò)P/Invoke調(diào)用就行。 擁抱.NET生態(tài) 現(xiàn)在的.NET生態(tài)真的很豐富,從NuGet包管理到Azure云服務(wù),從Entity Framework到SignalR,這些工具能大大提升我們的開(kāi)發(fā)效率。 ??? 寫(xiě)在最后的三點(diǎn)感悟寫(xiě)完這篇文章,我有幾點(diǎn)感悟想和大家分享: 1. ?? 務(wù)實(shí)勝過(guò)完美主義 微軟沒(méi)有追求一種語(yǔ)言統(tǒng)治所有場(chǎng)景,而是讓不同語(yǔ)言在最適合的地方發(fā)光發(fā)熱。這種務(wù)實(shí)的態(tài)度值得我們學(xué)習(xí),技術(shù)選型不要完美主義,夠用就好。 2. ?? 開(kāi)發(fā)效率就是生產(chǎn)力 在這個(gè)快速迭代的時(shí)代,能快速實(shí)現(xiàn)功能比寫(xiě)出最優(yōu)化的代碼更重要。C#的價(jià)值就在于能讓我們把更多精力放在業(yè)務(wù)邏輯上,而不是和指針、內(nèi)存管理做斗爭(zhēng)。 3. ?? 生態(tài)比語(yǔ)言更重要 C#的成功不僅僅是語(yǔ)言本身,更重要的是整個(gè).NET生態(tài)。從開(kāi)發(fā)工具到部署平臺(tái),從第三方庫(kù)到社區(qū)支持,這個(gè)完整的生態(tài)才是我們選擇C#的真正原因。 最后想問(wèn)問(wèn)大家:在你們的項(xiàng)目中,遇到過(guò)需要混用C#和C++的場(chǎng)景嗎?你們是怎么處理的? 還有,對(duì)于性能敏感的業(yè)務(wù)場(chǎng)景,你們有什么優(yōu)化經(jīng)驗(yàn)可以分享? 閱讀原文:原文鏈接 該文章在 2025/8/13 11:58:58 編輯過(guò) |
關(guān)鍵字查詢(xún)
相關(guān)文章
正在查詢(xún)... |