Language agnostic 何时将现有程序升级到新的语言功能?

Language agnostic 何时将现有程序升级到新的语言功能?,language-agnostic,language-features,upgrade,Language Agnostic,Language Features,Upgrade,假设您有一个用Java 1.4或C#1.0编写的程序。当然,这个程序不使用泛型和其他在更高版本中引入的语言特性 现在必须做出一些不平凡的改变。当然,您已经有了更新的IDE/编译器,因此可以使用Java1.6resp。C#3.5。您会利用此机会升级到最新的语言功能,即使用通用容器并删除许多强制转换等,还是保持原样,只对新部件使用新功能。或者甚至保留最初使用的版本的功能,以保持一致性水平?这取决于。它是否需要由旧编译器编译?您是否有足够的时间/金钱来更改所有内容?我的代码维护基本规则:如果代码没有损

假设您有一个用Java 1.4或C#1.0编写的程序。当然,这个程序不使用泛型和其他在更高版本中引入的语言特性


现在必须做出一些不平凡的改变。当然,您已经有了更新的IDE/编译器,因此可以使用Java1.6resp。C#3.5。您会利用此机会升级到最新的语言功能,即使用通用容器并删除许多强制转换等,还是保持原样,只对新部件使用新功能。或者甚至保留最初使用的版本的功能,以保持一致性水平?

这取决于。它是否需要由旧编译器编译?您是否有足够的时间/金钱来更改所有内容?

我的代码维护基本规则:如果代码没有损坏,就不要修复它。

尽可能不要使用工作代码。看起来这些代码都应该使用最新的编程秘方,但是对于经过测试的代码,还有很多话要说

<>我只考虑重写代码,在任何情况下都必须进行大量修改,以添加新的特性,即使这样,如果加快了新特性的编写,我也只会改变编程隐喻。
否则,您将不断调试以前运行的代码,并耗尽本可以用于改进产品的精力。

这只是,因此,所有这些都取决于何时以及如何做到这一点。

这里需要考虑的一个问题是,您现在和将来是否有能力吸引和留住开发人员,以便对使用过时技术构建的应用程序进行维护和支持。许多经验丰富的开发人员在Java和C的旧版本出现时都使用过它们,所以这并不是说我们没有这方面的经验。但是,如果我们花一年时间在.NET1.0中工作,我们将忘记我们现在对后续版本的了解。当我们在旧技术领域工作的时候,我们所有的朋友和竞争对手都在用最新的技术磨练他们的技能。我们永远无法弥补那一年

除了落后之外,我们还将发现,无法在我们现在已经习惯使用的更高版本中使用该功能非常令人沮丧

因此,年轻的开发人员将不会有使用旧技术的经验(.NET1.0于2002年1月发布)。老开发人员已经在那里,不想回去了


另一方面,如果你停留在旧版本,你会对你的技能感到舒适。你不必花很多时间学习新技术。也许最重要的是,你会有工作保障。

理论上,这是成本和收益之间的简单平衡,因此只有当收益大于成本时,你才应该重写

问题是,几乎不可能衡量实际成本(不仅是做工作的成本,还有不做其他可能贡献更大的事情的成本)。一般来说,这些好处根本无法衡量——你只能猜测如果你坚持使用旧代码,事情会有多困难


这使得我们几乎没有机会根据合理的衡量标准做任何事情。这就留下了一条简单的经验法则:不要管旧代码,直到你唯一的选择是重写它或完全放弃它。

一般的假设是它不需要由旧编译器编译。如果它坏了,请更改规范。