我的编程之路是从《青少年 Visual Basic 游戏编程》这本书开始的,那时我还年轻。从那以后,我的整个职业生涯几乎都在使用 .NET,有 99% 的时间使用的是 C#,而不是 Visual Basic。我一直在想,C# 的好日子什么时候会到来。有那么一段时间,它看起来离我们越来越近了。在这篇文章中,我想聊聊 .NET,以及为什么我认为它可能会回归。不过,这仍然有一些障碍需要克服,而最大的障碍就是它与 Windows 的紧密联系。
.NET Core 要解决的问题
直到 2017 年,.NET 开发都还只能在 Windows 上进行,并且只能部署到 Windows 环境中。这是 .NET 最大的缺陷。这个问题至今仍然困扰着 .NET,原因如下:
Windows 许可
开发 .NET 代码不需要什么特别的东西,但如果要将它部署到生产环境,就需要 Windows 服务器。开发人员还需要为操作系统和相关授权支付费用。我在 2015 年购买了 Windows Server 2012,一个许可就花了 660 美元。如果你是一家公司,不会只购买一个许可这么简单。虽说这样的成本可能还算不上很高,但要知道,Ubuntu 服务器的成本为零,而且更轻量,速度更快。
Docker 和 Kubernetes 兼容性问题
2013 年 12 月,Docker 发布了。不到两年,也就是 2015 年 7 月,谷歌发布了基于 Docker 的 Kubernetes。我不想再详细介绍 Docker 或 Kubernetes 了,需要知道的是,Docker 为代码提供了一个特定的容器。它是一个构建在 Linux 内核之上的轻量级虚拟环境,只运行用户提供的代码。Docker 的美妙之处在于,同样的代码在所有机器上具有相同的行为,解决了“在我的机器上没问题,到了生产环境就有问题”这一由来已久的问题。唯一的缺点是,如果有大量的容器,管理和扩展就变得很困难。
Kubernetes 为容器编制问题提供了解决方案。有了这项技术,启动和管理容器就变得很容易。但因为 Docker 只使用轻量级 Linux 内核,所以兼容性只是针对 Linux 而言的,.NET 开发人员无法使用这项令人难以置信的技术。
云计算
AWS 在 2006 年发布了第一个公有云,从基本的产品开始:Elastic Compute Cloud(EC2)和 Simple Storage Service(S3)。自那时起,亚马逊、微软、谷歌、IBM 以及其他一些公司都在争先恐后地推出自己的云服务。Docker、Kubernetes 和 Linux 为大量的云产品提供了支撑,这也导致 .NET 开发人员无法使用这些(但并非所有)云产品,也有很多云供应商提供了便利的 Windows 服务器虚拟机,但仍然需要支付许可费用,而且不能使用 Docker 或 Kubernetes。
Visual Studio 需要事先声明的是,以下是我基于个人在 Windows 上使用 Visual Studio 的经验而得出的观点。可以说,它是最强大的 IDE 之一,但它也有一些严重的缺点。首先,它占用的空间太大。Visual Studio 会占用 2 到 5GB 的磁盘空间,这对于一款 IDE 来说有点过分了。它还会占用很大的资源,如果只是为了写点代码而打开它,会觉得很费劲。记得之前有个项目,我甚至都可以在 Visual Studio 打开之前去吃顿午饭回来(顺便说一下,我的机器是新的,有 32GB 内存)。
走出 Windows 的藩篱
之前提到过,.NET Core 2.0 在 2017 年 8 月发布了,引入了对 .NET 的跨平台支持。现在你可以把 .NET 开发带到 Linux 和 Mac 上了。微软甚至还发布了 Mac 版的 Visual Studio。实际上,相比 Windows 版本,我更喜欢使用 Mac 版的 Visual Studio!微软还发布了一个非常好的 CLI,可以在任何平台上创建和管理 .NET 项目。
我不得不为微软迈出的跨平台这一步点个赞。现在,你可以自由使用之前无法使用的东西,很多开发团队正在享受这份福祉。如果你像我一样由于之前提到的那些问题而离开了 .NET,我强烈建议你再回头尝试一下 .NET Core 2.0。
微软没有对 C# 进行过多修改
微软做了一件了不起的工作,他们没有改变 C# 语言的任何东西,所以不需要再去学习什么特别的东西,只需要安装 dotnet CLI 和运行时就可以。安装起来很快,然后就可以用同样的方式编写熟悉的 C# 代码了。不过,如果有一个标准版的项目,就需要做一些转换,但转换起来也很容易。
如果你刚开始学习编程语言,C# 可能是适合的。即使你最开始接触的是 .NET Core,要转到 .NET Standard 也很容易。
Visual Studio 并不是必需的
虽然我很喜欢 Mac 版的 Visual Studio,但它并不是必需的。你也可以使用其他常用的 IDE(比如 Visual Studio Code 或 Atom)。它们有很多语言插件,可以享受很多很酷的功能,比如代码自动完成和智能感知。但这些 IDE 都不能真正取代 Visual Studio,正如我之前说过的,它太强大了。不过,好在我们没有完全被绑定到 Visual Studio,这点很好。
.NET 遗留代码
.NET Core 2.0 虽然很好,但它毕竟也才两岁。我曾经在很多公司工作过,他们基于 .NET Standard 构建了大量的应用程序,但直到现在都没有时间和预算将它们迁移过来。一般来说,大多数开发 .NET 应用程序的公司都被微软的订阅服务绑得死死的,他们现在才开始着手处理遗留代码。
我觉得 .NET 的过去带有某种程度的耻辱,很多公司因为这个问题而没有采用这项技术。我是众多离开 .NET 转向 Go 语言、Python 和 NodeJS/TypeScript 的人当中的一个,我之前真的不认为自己会再回过头来,但事实是,现在我回来了。
结束语
不管是开发新手,还是经验丰富的开发人员,如果想要学习一门新语言,我认为可以考虑一下 .NET 和 C#。如果想要构建一个大型复杂的 Web 应用程序,.NET MVC 会让一切都变得非常容易。新的 CLI 工具使用起来非常简单——整合代码,创建样板代码,确保所有东西都能够正确地连接在一起。它还能够非常好地与你正在使用的前端框架集成。如果想要构建一个跨平台的原生桌面或移动应用程序,.NET 再好不过了。如果只想构建一个 API 或微服务,这也很容易。Visual Studio 甚至还提供了一些工具,可以用来自动将应用程序部署到云端。
原文链接:
评论