想象一下,你走进一家公司,漫步在软件部门。在你周围,只要眼睛可以看到,开发人员辛辛苦苦,盯着17英寸的CRT显示器。你会怎么想?您是否必须克制自己,不要热情地去人力资源部门申请工作?或者你会感谢你在其他地方工作的幸运星吗?我打赌后者。 公司可以追求的最明智,最愚蠢的策略之一是雇用一个软件开发人员团队,他们的平均工资可能在六位数范围内,并通过强迫他们在过时的硬件上工作来节省几美元。这是愚蠢的,因为这些昂贵的工人所损失的生产力远远超过了更新计算机和显示器的成本。当然,这些天这是众所周知的。您不会看到或听到几乎有许多公司在第二台显示器或软件开发人员的新机器上节省太多。 然而,让开发人员使用旧版本的编程语言和框架仍然相当普遍。现在,这不是一个完全直接的平行。从历史上看,公司主要将硬件老化放在开发人员的办公桌上作为一种成本节约策略,而继续开发一种语言或框架的 “稳定” 版本通常是一种风险最小化策略;为什么将您的代码库移植到v-next时,可能会引入错误,并且对用户无关紧要?这是一个公平的论点,但问题是,当你撤回一个抽象级别时,风险最小化的核心仍然是关于成本节约。在一家公司里,一切都归结为营收减去营收成本。 那么,为什么我认为升级到v-next是有意义的,承担风险并可能产生与之相关的成本?好吧,与其直接回答,不如我给你看?看看下面的代码,你可能会发现在某种基于NET的在线约会应用程序。
1 2 3 4 5 6 7 8 9 10 11 12 13 | 公共课GeographicRegion { 私有只读IEnumerable<DatingProfile> _profilesinregion; 公共地理区域 (IEnumerable<DatingProfile> profilesInRegion) { _profilesInRegion = profilesInRegion; } 公共IEnumerable<DatingProfile> findactivetwentysmings () { return _profilesInRegion.Where(profile => profile.Age >= 20 & & profile.Age < 30 & & profile.IsActive); } } |
没什么了不起的。有一个 “地理区域” 的概念,在实例化时,每个区域都有一个枚举其中的配置文件的策略。它有一个名为FindActiveTwentySomethings() 的方法,毫不奇怪,它会寻找年龄在20岁左右的任何人,并在配置文件上设置指示配置文件处于活动状态。除了可能讨论哪种类型的集合类型可能最有意义之外,这里绝对没有什么值得注意的事情发生。这段代码非常简单,几乎不值得讨论。 但是让我们回到过去,看看有人可能写的Visual Studio 2003。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 公共课GeographicRegion { private readonly DatingProfile[] _profilesInRegion; 公共地理区域 (DatingProfile[] profilesInRegion) { _profilesInRegion = profilesInRegion; } 公共IEnumerable findactetwentysings () { ArrayList matchingProfiles = 新的ArrayList(); foreach (_profilesinregion中的DatingProfile配置文件) { 如果 (profile.Age > 20 & & profile.Age < 30 & & profile.IsActive) matchingProfiles.Add (轮廓); } 返回匹配轮廓; } } |
你会注意到的第一件事是代码更长,但不是可怕的。您可能会注意到的第二件事是,FindActiveTwentySomethings() 方法不仅更长,而且也不再声明性,但相反,命令性。代码不再说,“给我配置文件,其中年龄在20岁,配置文件是活跃的。” 相反,它说,“首先,声明一个数组列表; 接下来,循环浏览配置文件中的项目,并为每个项目,最后,也许最微妙的是,缺少泛型 (C #2.0 2005年附带的泛型) 意味着该方法不再强制类型安全。ArrayList和IEnumerable在这里都处理对象。这似乎不是一个直接的问题,因为约会配置文件是强类型的,但如果你是这种方法的调用者,这很难让人放心。 在这个小背景下,这些事情似乎都不是什么大问题,但想象一下这种开始的差异,在整个代码库、应用程序生态系统或软件部门中都是如此。上面显示的C #1.1代码更冗长,更难阅读,更难使用,并且在维护期间更容易出错。这意味着,与在现代代码库中工作的同行相比,在这样的代码库中的开发人员花费更多的时间挣扎、故障排除、眯着眼睛试图理解,并且通常浪费时间 (和金钱)。 随着时间的推移,语言和框架作者,像任何软件供应商一样,解决了他们产品中的缺点,并添加了一些功能,使他们的用户更容易、更高效。因此,每当一种语言的新版本发布时,您都可以期望该语言的开发趋向于更高的效率。作为一家公司或一个部门,如果你故意避免这样的更新,这与随着年龄的增长不更新硬件没有什么不同。你的团队的生产力 (和士气) 会受到影响。 公司不再对硬件采取明智的态度和愚蠢的态度。所以,不要在你的软件上犯同样的错误。有一个计划,以保持最新的比特,并保持您的开发人员以最高效率运行。你不必采纳所有马上出来的东西,但你不能让它走得太久。 Infragistics终极15.2在这里。下载看到它的力量在行动! </span