4

我目前负责开发用 Microsoft .NET C# 创建的第二版程序。我没有做任何实际的编程,但我正在为程序员编写规范。我想把它从 .NET 代码库中删除,但由于 Joel 在他的博客上说永远不要重写代码,而且他确实提供了很好的推理,我倾向于仔细考虑。

所以我的问题是,

(1) 有没有简单的过渡方法?(像 .NET C# 这样的语言)
(2) 你会从 .NET 中删除它吗?
(3) 如果是这样,你会使用什么语言?

我想从 .NET 中删除它的原因是就我对 .NET 的理解而言,它必须安装在客户端上。当有更好的方法时,我不想给我的客户带来不便。

4

15 回答 15

23

这听起来很粗鲁,我可能会被否决,但请原谅我,我会说实话……你是说,“[你]负责开发在Microsoft .NET C# ... 不进行任何实际编程 ... [想] 将其从 .NET 代码库中删除”。你自己听吗?您显然没有任何知识或经验来做出该决定,问题 1 和 3 进一步证明了这一点。没有“简单的语言”——这甚至意味着什么?强大的语言“容易”吗?弱语言“容易”吗?怎么可能轻松过渡到不同的事物?即使你有东西可以自动翻译代码,运行时、平台和库的差异使得移植任何重要的应用程序都不容易。这需要工作和知识。也许对一个有很多时间,但对于大多数有最后期限和现实的人来说不是。

于 2009-06-26T02:15:50.313 回答
22

除非您正在从 C# 作为某种企业范围从 C# 向另一种语言的转变的一部分,或者除非存在某种C#/.NET 无法满足的有效技术要求,否则我不会从现有的代码库。

你陈述你的理由是客户需要.NET。您的程序是客户端/服务器,还是 Web 应用程序?如果它是基于 Web 的,那你就错了,客户端不需要 .NET,只需要一个浏览器。

如果程序是客户端/服务器并且已经用 C# 编写,那么您迁移到的任何语言也可能需要某种形式的运行时安装。从 XP 开始,.NET 随 Windows 的每个新安装和服务包一起提供。

当然,除非您尝试针对 OSX 和 Linux 用户,在这种情况下,在您做出放弃代码库的任何决定之前,我会考虑认真检查这些市场的价值。Java 可能会在这方面更好地帮助您——但是您可以使用 Mono 平台做很多事情,因此即使您针对这些平台,您也可以保存您的 C# 代码。

编辑:

waiwai933 写道:

我知道我不应该做出决定,但谁来做决定并不是我的决定。我所说的“简单语言”是指一种与 C# 极其相似的语言,因此过渡会更容易。

不幸的是,你运气不好。与 C# 最接近的语言是 Java,但两者之间的差异非常显着,以至于您需要完全重写;一个端口根本行不通。您拥有的 C# 代码不太可能不使用委托和事件——它们无处不在——Java 中也没有类似的构造。WinForms GUI 框架(我猜是 WinForms)与 Swing 如此不同,以至于没有一个结构可以轻松移植;它到处都是事件和代表。

您正在寻找至少与最初的努力一样多的转换平台的努力,可能更多。另外,使用 Java 违反了您要从 C# 切换的原因:Java 需要在客户端上安装运行时。

正如我之前提到的,在做出此决定之前,请仔细考虑一下切换平台可能带来的真正好处。

于 2009-06-26T00:19:28.490 回答
9

我真的无法理解您为什么要放弃 C# 和 .NET,唯一的原因是您不想通过要求他们安装 .NET 框架来“给客户带来不便”。

一方面,.NET 现在包含在 Windows 中。在 XP(当前服务包)中,您将获得 .NET 2.0。在 Vista 中,您将获得 .NET 3.0。假设您实际上不使用任何 .NET 3.5 功能,并且不需要 C# 3.0 中的任何功能,那么“给客户带来不便”的论点就没有实际意义了。他们不需要下载任何东西或安装任何额外的东西......它已经存在了。

如果您确实需要 .NET 3.5 和/或 C# 3.0,那么为您的客户创建一个预打包的安装程序来为他们处理这一切是非常容易的。对客户没有任何真正的“不便”,因为无论如何他们都必须安装您的程序。单一安装可以在单一、无缝、透明的安装过程中处理您的程序及其所有依赖项。如果您希望为您的客户提供更轻松的时间,您可以选择使用 .NET、C# 和 Visual Studio 进行一次单击部署。这将为您的客户创建一个简单的站点,让他们可以轻松快速地下载和安装您的应用程序,并在将来发布更新时对其进行更新。

正如其他人所提到的,C# 和 .NET 可以提供很多东西。Microsoft 在 .NET 平台上创建了一个广泛的开发生态系统,其中包含大量资源、工具、文档和社区帮助。C# 是一种非常干净、现代、具有前瞻性的语言,它提供了许多工具来帮助您和您的开发人员尽可能快速、简单和高效地解决问题。迁移到 C++ 意味着您不仅会失去这些有用的进步,而且还会继承手动内存管理的噩梦。迁移到 Java 意味着您失去了这些有用的进步,但通常也不会真正获得有用。您可以迁移到其他 .NET 语言,但是您并没有解决您提到的唯一问题:您的客户端对 .NET 框架的依赖。

如果你已经有一个用 C# 开发的系统,我会说不要改变任何东西。您将失去很多,并且不会真正获得任何会对您的客户产生重大影响的东西。从长远来看,任何更改都极有可能对您的公司和开发人员产生更显着的影响。您将承担重写或转换代码的成本,培训您的开发人员使用新语言和可能的新开发平台的成本,查找和修复很可能已经在您当前代码库中修复的错误所涉及的成本,以及名单还在继续……

在您决定它对您的客户来说太不方便之前,您需要了解更多关于 .NET 所提供的功能。在决定做出如此剧烈而昂贵的改变之前,您需要确保这确实给您的客户带来了不便。

于 2009-06-26T00:40:53.673 回答
7

您认为其他东西会比 C# 更好的原因是什么?.NET 有什么问题?如果您有正当理由阻碍您的公司使命,那么您应该考虑重写它。

但是,我确实认为这样做有任何意义。C# 非常简单明了,最新版本的运行时看起来相当稳定。我仍然不会在其中构建操作系统,但对于最终用户应用程序,它是我的首选语言。

用 C++ 重写它只会成为内存/资源管理的噩梦,而过渡到 Java 是一个横向的举动,没有多大意义。

如果您详细说明应用程序是什么、客户端、服务器等、它的作用等,我们可能会更具体。

但请记住,TANSTAAFL。

编辑:

我不会太担心需要在客户端上安装运行时。假设您的所有用户都是 Windows 用户,Vista 和 Win7 都默认安装了最新版本的运行时。随着越来越多的应用程序基于运行时构建,越来越多的用户已经为其他应用程序拥有它,并且您始终可以使用您的应用程序重新分配运行时。

于 2009-06-26T00:16:58.683 回答
4

(1) 有没有简单的过渡方法?(像 .NET C# 这样的语言)

(2) 你会把它从 .NET 中删除吗?

并非没有非常令人信服的理由(不是给您的客户带来不便!)

(3) 如果有,有没有简单的语言?

Java 将是最接近 C# 的类似物,您将失去更多,而且您仍然不得不给您的客户带来不便

我想从 .NET 中删除它的原因是就我对 .NET 的理解而言,它必须安装在客户端上。当有更好的方法时,我不想给我的客户带来不便。

正如其他人所提到的,这并不是您认为的不便,如果这是您的唯一原因,您很可能只是在浪费时间、资源和金钱。简而言之,如果它已付费并且可以正常工作,请不要戴手套。

于 2009-06-26T01:27:34.750 回答
2

不会有从 C# 到 .NET 的自动翻译。

您可以轻松地将其翻译成 Boo 或 VB.NET 或其他一些 .NET 语言,但如果您要翻译成 C++(非 CLI),则库(.NET 框架)将不可用。

这将引起最大的头痛。

于 2009-06-26T00:15:30.683 回答
2

从 C# 转换的唯一简单方法是将其翻译成另一种 .NET 语言。除此之外,您正在考虑重写应用程序,因为所有语法和库都会改变。

请问你为什么要离开C#?本着您提供的 Joel on Software 链接的精神,我希望您会看到坚持使用当前正在运行的代码库的好处(对于它的价值)。是否有非常令人信服的理由为这个项目离开 .NET?

于 2009-06-26T00:15:31.383 回答
1

从 C# 迁移到 Java 可能是最简单的,因为它们是非常相似的语言。但是,您仍然需要检查所有代码并修改大量内容以使其成为有效代码。如果您使用 C# 的一些最新功能(如 LINQ)会更加困难,因为 Java 没有类似的功能。

您是否有充分的理由将其从 .NET 中移除?如果没有,不要。但是,如果您确实想在某个时候将其从 .NET 中移除,那么越早越好(在代码增长过多之前)。

于 2009-06-26T00:16:17.263 回答
1

我不明白为什么一家公司会决定从稳定的代码库(如 .NET)迁移到另一个。如果您考虑其他平台,例如从 OS 应用程序迁移到 Web 应用程序,Ruby on Rails 可能还算不错(它的 MVC 平台很强大)。但是到另一个操作系统应用程序?事情会变得艰难。

于 2009-06-26T00:25:35.093 回答
1

(1) 有没有简单的过渡方法?(像 .NET C# 这样的语言)

如果简单的意思是相似,那么在语法上 Java 是相似的,但是将 .NET 框架类与 Java 库匹配将是非常重要的。

(2) 你会把它从 .NET 中删除吗?

不。

(3) 如果有,有没有简单的语言?

参见对 (1) 的回答

有几个问题可以帮助我进一步了解您为什么要这样做;这对您的客户有何不便?(只是 .NET 框架安装?)如果您正在谈论客户端应用程序,那么您还需要在客户端上安装您的应用程序,我不明白这会带来更多不便。

您建议您想用 C++ 重写的其他类似问题中,这将如何改变不便程度?

您是否要针对非 Windows 用户群?

于 2009-06-26T04:05:14.930 回答
1

在某些情况下,从 C# 迁移到 C++ 可能是有意义的,因此您可以获得非托管代码的强大功能(即性能)。但很可能不值得付出努力。

于 2009-06-26T06:27:25.897 回答
1

正如许多问题的答案一样,这取决于. 在下面的回答中,我假设您在谈论 Windows 窗体应用程序,因为当然,如果您谈论的是基于 Web 的产品,所有这些都不是问题。

听起来您(几乎)已经决定“取消”.NET。我强烈建议您仔细考虑该决定。特别是看原因。您已声明原因您不希望 .NET 运行时依赖项引起问题。对此,一些人提出的反驳是,没有运行时标准的 Windows 平台正在变得稀缺。尽管如此,一个不依赖于 50Mb 下载的精简程序还是有一些令人满意的。

但最终,您所说的理由是否有效取决于:

  1. 您的产品的客户数量;
  2. 他们的地理位置;
  3. 将安装您的产品的典型平台(硬件和软件);
  4. 由于运行时不存在而无法安装您的产品的潜在影响;
  5. 大量下载的影响,或由于运行时依赖性而导致的繁琐安装。

毕竟,如果事实证明 99% 的客户都在现代平台上,那么正如其他人所指出的那样,这不是问题。

如果事实证明,在分析了上述推理后,您的推理是有效的,那么您应该将重写产品的成本与重写后的客户满意度/产品销售的预测改进进行比较。为了证明重写的合理性,后者必须是绝对惊人的。当然,我这么说,不知道各种事情,包括:

  1. 代码库的大小;
  2. 产品的复杂性;
  3. 代码库的状态(可维护?)。

就通用编程语言/平台而言,这些天你几乎不可能比 C#/.NET 更好,所以假设经过所有尽职调查,你仍然想“移动”然后你会被迫选择不需要运行时的东西——唯一可以想到的选择是 C/C++ 或 Delphi。

于 2009-06-26T10:40:21.387 回答
1

答案很简单:将您的应用程序移至 Web。所以客户端只需要浏览器。

于 2010-05-23T07:06:02.583 回答
0

.NET 框架是 Windows Update 的一部分,因此可能每个客户的机器上都有它。或者他们正在运行 Linux/Mac OS,但我不认为是这种情况,因为您的产品的版本 1 已经在 .NET 中运行。

和。几乎所有其他主流语言都需要安装单独的运行时(java、PHP 等)....

所以我没有看到过渡的正当理由。

于 2009-06-26T10:45:55.650 回答
0

到目前为止,大多数回复都回答了 C# 与“其他东西”的具体问题,但我会回答你需要问的问题:

我没有做任何实际的编程,但我正在为程序员编写规范。最有效的方法是什么?

很快,不该做什么:指定实现细节,例如使用什么语言。

做什么:编写用户故事或用例,说明您想要什么以及为什么。例如:

作为用户,我希望能够通过从 Internet 下载单个文件来安装和运行该软件,这样我就不会因为不得不查找和安装其他软件而感到不便。

您可能希望使用指标来支持这一点:

作为产品经理,我希望能够查看给定时间段内的软件下载次数和同一时间段内的软件激活次数,以便确定有多少潜在客户成功安装和运行软件。

告诉您的团队您想要什么以及为什么,他们会为您提供。

于 2010-06-30T20:15:23.697 回答