加個(gè)“星標(biāo)★”,每日 7:15,好文必達(dá)!
作者丨Sam Redmond
譯者丨無明
策劃丨小智
直到 2017 年,.NET 開發(fā)都還只能在 Windows 上進(jìn)行,并且只能部署到 Windows 環(huán)境中。這是.NET 最大的缺陷。這個(gè)問題至今仍然困擾著.NET,原因如下:
開發(fā).NET 代碼不需要什么特別的東西,但如果要將它部署到生產(chǎn)環(huán)境,就需要 Windows 服務(wù)器。開發(fā)人員還需要為操作系統(tǒng)和相關(guān)授權(quán)支付費(fèi)用。我在 2015 年購買了 Windows Server 2012,一個(gè)許可就花了 660 美元。如果你是一家公司,不會(huì)只購買一個(gè)許可這么簡(jiǎn)單。雖說這樣的成本可能還算不上很高,但要知道,Ubuntu 服務(wù)器的成本為零,而且更輕量,速度更快。
2013 年 12 月,Docker 發(fā)布了。不到兩年,也就是 2015 年 7 月,谷歌發(fā)布了基于 Docker 的 Kubernetes。我不想再詳細(xì)介紹 Docker 或 Kubernetes 了,需要知道的是,Docker 為代碼提供了一個(gè)特定的容器。它是一個(gè)構(gòu)建在 Linux 內(nèi)核之上的輕量級(jí)虛擬環(huán)境,只運(yùn)行用戶提供的代碼。Docker 的美妙之處在于,同樣的代碼在所有機(jī)器上具有相同的行為,解決了“在我的機(jī)器上沒問題,到了生產(chǎn)環(huán)境就有問題”這一由來已久的問題。唯一的缺點(diǎn)是,如果有大量的容器,管理和擴(kuò)展就變得很困難。
Kubernetes 為容器編制問題提供了解決方案。有了這項(xiàng)技術(shù),啟動(dòng)和管理容器就變得很容易。但因?yàn)?Docker 只使用輕量級(jí) Linux 內(nèi)核,所以兼容性只是針對(duì) Linux 而言的,.NET 開發(fā)人員無法使用這項(xiàng)令人難以置信的技術(shù)。
云計(jì)算 AWS
在 2006 年發(fā)布了第一個(gè)公有云,從基本的產(chǎn)品開始:Elastic Compute Cloud(EC2)和 Simple Storage Service(S3)。自那時(shí)起,亞馬遜、微軟、谷歌、IBM 以及其他一些公司都在爭(zhēng)先恐后地推出自己的云服務(wù)。Docker、Kubernetes 和 Linux 為大量的云產(chǎn)品提供了支撐,這也導(dǎo)致.NET 開發(fā)人員無法使用這些(但并非所有)云產(chǎn)品,也有很多云供應(yīng)商提供了便利的 Windows 服務(wù)器虛擬機(jī),但仍然需要支付許可費(fèi)用,而且不能使用 Docker 或 Kubernetes。
需要事先聲明的是,以下是我基于個(gè)人在 Windows 上使用 Visual Studio 的經(jīng)驗(yàn)而得出的觀點(diǎn)。可以說,它是最強(qiáng)大的 IDE 之一,但它也有一些嚴(yán)重的缺點(diǎn)。首先,它占用的空間太大。Visual Studio 會(huì)占用 2 到 5GB 的磁盤空間,這對(duì)于一款 IDE 來說有點(diǎn)過分了。它還會(huì)占用很大的資源,如果只是為了寫點(diǎn)代碼而打開它,會(huì)覺得很費(fèi)勁。記得之前有個(gè)項(xiàng)目,我甚至都可以在 Visual Studio 打開之前去吃頓午飯回來(順便說一下,我的機(jī)器是新的,有 32GB 內(nèi)存)。
之前提到過,.NET Core 2.0 在 2017 年 8 月發(fā)布了,引入了對(duì).NET 的跨平臺(tái)支持?,F(xiàn)在你可以把.NET 開發(fā)帶到 Linux 和 Mac 上了。微軟甚至還發(fā)布了 Mac 版的 Visual Studio。實(shí)際上,相比 Windows 版本,我更喜歡使用 Mac 版的 Visual Studio!微軟還發(fā)布了一個(gè)非常好的 CLI,可以在任何平臺(tái)上創(chuàng)建和管理.NET 項(xiàng)目。
我不得不為微軟邁出的跨平臺(tái)這一步點(diǎn)個(gè)贊?,F(xiàn)在,你可以自由使用之前無法使用的東西,很多開發(fā)團(tuán)隊(duì)正在享受這份福祉。如果你像我一樣由于之前提到的那些問題而離開了.NET,我強(qiáng)烈建議你再回頭嘗試一下.NET Core 2.0。
微軟做了一件了不起的工作,他們沒有改變 C# 語言的任何東西,所以不需要再去學(xué)習(xí)什么特別的東西,只需要安裝 dotnet CLI 和運(yùn)行時(shí)就可以。安裝起來很快,然后就可以用同樣的方式編寫熟悉的 C# 代碼了。不過,如果有一個(gè)標(biāo)準(zhǔn)版的項(xiàng)目,就需要做一些轉(zhuǎn)換,但轉(zhuǎn)換起來也很容易。
如果你剛開始學(xué)習(xí)編程語言,C# 可能是適合的。即使你最開始接觸的是.NET Core,要轉(zhuǎn)到.NET Standard 也很容易。
雖然我很喜歡 Mac 版的 Visual Studio,但它并不是必需的。你也可以使用其他常用的 IDE(比如 Visual Studio Code 或 Atom)。它們有很多語言插件,可以享受很多很酷的功能,比如代碼自動(dòng)完成和智能感知。但這些 IDE 都不能真正取代 Visual Studio,正如我之前說過的,它太強(qiáng)大了。不過,好在我們沒有完全被綁定到 Visual Studio,這點(diǎn)很好。
.NET Core 2.0 雖然很好,但它畢竟也才兩歲。我曾經(jīng)在很多公司工作過,他們基于.NET Standard 構(gòu)建了大量的應(yīng)用程序,但直到現(xiàn)在都沒有時(shí)間和預(yù)算將它們遷移過來。一般來說,大多數(shù)開發(fā).NET 應(yīng)用程序的公司都被微軟的訂閱服務(wù)綁得死死的,他們現(xiàn)在才開始著手處理遺留代碼。
我覺得.NET 的過去帶有某種程度的恥辱,很多公司因?yàn)檫@個(gè)問題而沒有采用這項(xiàng)技術(shù)。我是眾多離開.NET 轉(zhuǎn)向 Go 語言、Python 和 NodeJS/TypeScript 的人當(dāng)中的一個(gè),我之前真的不認(rèn)為自己會(huì)再過頭來,但事實(shí)是,現(xiàn)在我回來了。
不管是開發(fā)新手,還是經(jīng)驗(yàn)豐富的開發(fā)人員,如果想要學(xué)習(xí)一門新語言,我認(rèn)為可以考慮一下.NET 和 C#。如果想要構(gòu)建一個(gè)大型復(fù)雜的 Web 應(yīng)用程序,.NET MVC 會(huì)讓一切都變得非常容易。新的 CLI 工具使用起來非常簡(jiǎn)單——整合代碼,創(chuàng)建樣板代碼,確保所有東西都能夠正確地連接在一起。它還能夠非常好地與你正在使用的前端框架集成。如果想要構(gòu)建一個(gè)跨平臺(tái)的原生桌面或移動(dòng)應(yīng)用程序,.NET 再好不過了。如果只想構(gòu)建一個(gè) API 或微服務(wù),這也很容易。Visual Studio 甚至還提供了一些工具,可以用來自動(dòng)將應(yīng)用程序部署到云端。
聯(lián)系客服