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

时间:2009-12-09 12:55:43

标签: language-agnostic language-features upgrade

想象一下你有一个程序,例如在Java 1.4或C#1.0中。当然,该程序不使用随后版本引入的泛型和其他语言功能。

现在必须进行一些非平凡的改变。当然,您已经有了一个较新的IDE /编译器,因此您可以使用Java 1.6 resp。相反,C#3.5。你会使用这个机会来升级到最新的语言功能,即使用通用容器并摆脱许多演员阵容等。或者你会保留原样,并将新功能仅用于新部件。或者保持原始使用版本的功能,以保持一致性水平?

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

这只是refactoring的一种特定形式,因此所有advice关于何时以及如何执行此操作都适用。

答案 2 :(得分:3)

这里需要考虑的是您现在和将来吸引和留住开发人员对使用过时技术构建的应用程序进行维护和支持的能力。许多经验丰富的开发人员在使用旧版本的Java和C#时都会使用它们,所以并不是我们没有经验。但是,如果我们花费一年时间在.Net 1.0上工作,我们将会忘记我们现在对后续版本的了解。虽然我们花了一年时间研究旧技术,但我们所有的朋友和竞争对手都在用最新的技术磨练他们的技能。那年我们永远无法做到。

除了落伍之外,我们还会发现,如果不能使用我们现在习惯使用的更高版本的功能,我们会感到非常沮丧。

因此,年轻的开发人员将不具备旧技术的经验(.Net 1.0于2002年1月发布)。年纪较大的开发人员一直在那里,不想回去。

另一方面,如果你留在旧版本中,你会对自己的技能感到满意。您不必花费大量时间来学习新技术。也许最重要的是,你将拥有工作保障。

答案 3 :(得分:1)

尽可能单独留下工作代码。看起来代码应该都是使用最新的编程秘诀,但对于久经考验的代码有很多话要说。

我只会考虑重写必须在任何情况下进行大量修改的代码来添加新功能,即便如此,我只会更改编程隐喻,如果它会加快编写新功能。

否则,您将不断调试之前正在运行的代码,并消耗可能用于改进产品的能量。

答案 4 :(得分:0)

这取决于。是否需要由旧编译器编译?你有足够的时间/金钱来改变一切吗?

答案 5 :(得分:0)

从理论上讲,它是成本和收益之间的简单平衡,所以如果收益超过成本,你应该只进行重写。

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

这让我们几乎没有机会根据理性测量做任何事情。这留下了一个简单的经验法则:保留旧代码,直到您唯一的选择是重写或完全抛弃它。