使用新技术是否会损害生产率?[关闭]


20

似乎随着必须使用特定工具集的经验的增长,尝试新事物的动力减弱了。

当我在这个编程工作是新的,尝试新的东西,网上调查,让我更加富有成效,因为我经常发现,做任务更轻松的方式(或库)的代码框架已经到位。因此,对我来说以及在给定代码库的上下文中使用新东西,都使我的工作效率更高。

现在我注意到,有越来越多的情况下,其中,对于给定的问题,我知道,有可能一个更好的解决方案“在那里”,并发现它会-大概-改进代码。但是,考虑到我现在对代码库的深入了解,使用现有的次优工具并找到解决方案(包括测试)运行要比寻找新的“更好”和“改善”代码库要容易得多。

所以有这种紧张:“做正确”与“落榜体面完成”。

这对许多开发人员来说是否会发生?这是一个已知的特定问题吗?(毕竟这是一个真正的问题吗?)这实际上与经验水平的提高有关吗?

哦,请注意:我仍然喜欢我的工作并且喜欢保留它。只是看起来-总是很有趣!-当我学习我们的应用程序所面临的代码库和问题集时,研究范围会缩小。


3
短期:是-长期:嗯,我们都可能被困在COBOL上
HorusKol 2012年

做得体也可以。
QuanhD 2012年

Answers:


17

尝试新事物通常有风险。我们有时会遇到麻烦,因为我们倾向于做两件事:

  1. 高估了酷/新/时髦的事物的实用性。我们看到一些很酷的例子,一些在线代码。我们认为非常酷。很酷!在XI中,任务Y可以快十倍。它显然优越。我们尚未看到所有“未知未知数”。我们没有被新产品的销售人员忽略的问题所绊倒。我们在新事物上没有足够的专业知识,无法看到地雷在路上等待。

  2. 低估了现有工具/框架/软件/事物的实用性。最初构建当前系统时,我们经常不在。我们不欣赏所进行的微妙权衡。在现有系统上,周一早上的四分卫很容易打,但它可以正常工作。由于在保持其可维护性,工作性和良好性能之间进行了非常具体的折衷,因此它可能会变得很奇怪。是的,这很奇怪。也许最重要的是,该团队是当前怪异问题的专家,并且知道如何解决怪异问题。他们知道要避开的地雷,陷阱和陷阱。实际上,这恰恰是因为我们看到了当前做事方式中的所有缺陷,甚至对玩新事物也很感兴趣。

但是,如果不尝试新事物,而采取过于保守的态度,则可能会更加危险。当然,我们需要谨慎行事,但是如果我们不弄清楚如何构建最佳的鼠标陷阱,我们的竞争对手就会更愿意尝试一些新的东西,并踢屁股!采取保守态度而不能发展将导致不可避免的厄运,尤其是在竞争激烈的市场中。

因此,是的,我们需要在某种程度的娱乐性/教育性实验与新方法之间找到平衡,以解决问题,同时要记住,这些新方法中的许多都是死胡同,而其他可能会有所收获。IMO这是一个很好的理由,许多公司有20%的时间来研究新事物。他们知道很多时候他们不努力,但是20%的时间里提出的许多想法都令人大跌眼镜。没有时间进行游戏和实验,您很容易陷入公司停滞并真正陷入困境。


1
我认为这取决于您正在探索的“新”类型。我已经探索了60年代,70年代,80年代的编程概念,它们似乎都是新的,因为很少有程序员真正了解该领域的历史。
Rudolf Olah 2012年

关于“研究”的另一个好处是,即使您最终没有使用所研究的工具,也可能会从中选择一些有趣的概念...现在有一些公司(说到我所知道的:例如银行)特别是不想使用“新事物”,但是请等到它们安装正确为止。有时这是明智的……可能有些公司在原型,mootools,scriptaculous等方面投入了很多资金,然后意识到那些框架“输了”这场战斗,并没有得到太多支持。
Laurent S.

8

无时无刻不在发生。我在其他帖子中已经说过这一点,但是有很多次您不从事开发优雅的代码的业务,而是从事产品运输的业务。这样一来,您将很难找到愿意n为您分配时间来修复未损坏的东西的经理,而这些事情实际上并不能真正改善最终用户的体验。您将很难找到一个愿意分配n时间进行研究(没有明确的最终目标)的经理,而不是“可能有比这更好的东西”。

话虽如此,如果您使用概要分析工具等发现了应用程序中的瓶颈,并且可以明确量化解决它们所带来的预期用户体验增强,那么您(应该很容易)应该有时间进行一些研发您可以使用各种资源中的技术来优化它们。


+1,虽然我说“运送功能” 通常是懒惰的借口(测试,可维护性等)
Martin Ba 2012年

尽管我同意您在回答中所说的大部分内容,但我还是认为开发人员实际上在一定程度上致力于开发精美的代码。如果无法轻松解决/维护已发布的代码,那么它就毫无价值。在这里,重构代码通过今天花费n个小时来获得“优雅”,明天就可以节省n * 10个小时。
hspain 2012年

@hspain:我绝对同意,这是理论上要走的路,但是,除非您的工作是图书馆而不是产品本身,否则它不会在现实世界中发生(至少,以我的经验)。
Demian Brecht'1

实际上,敏捷社区中的某些人主张将这些问题作为非功能性需求进行跟踪。要求将是“代码应灵活且易于更改”(或类似的东西)。这样,您就可以制作解决具体问题的故事。优点是它们对于利益相关者可见,并且可以计划/安排。参见例如
sleske 2012年

@sleske:...然后在优先级排序中掉下来;)
Demian Brecht

4

我认为其中的一部分归因于对如何成功解决某些问题具有经验和更深入的了解。

当您是新手时,所有问题也都是新手,您需要研究如何解决这些问题。但是,当您反复解决了相同类型的问题时,由于您知道解决该问题的成功方法,因此对研究的需求下降了。

然后,您只倾向于研究新问题,或者研究那些旧的尝试过的事实不再起作用(已过时)或导致性能或故障问题的问题。随着您开始更深入地了解复杂的系统,您知道您没有时间现实地使用新技术,并且通过经验您会发现很多时候新技术无法使用进行炒作,并制造出更多无法解决的问题。因此,当您实际上不需要新的工具和技术来解决问题时,就不再倾向于使用它们。

但是,倾向性降低并不意味着您会停止学习或永远不会使用新技术,只是您会更明智地选择合适的时机。


4

以下是一些详细信息:

  1. 有最后期限:程序员应事先掌握他所使用工具的所有必要详细信息。阅读一些网站,找到一些新奇的东西,然后在生产环境中使用它是一个很大的禁忌。您只是对该工具没有足够的经验,更重要的是,您没有足够的时间开始学习新知识。如果您想要一些很棒的新东西,请在半年或一年之前学习它。
  2. 使用它之前,请确保您正确了解它:某些不错的新工具可能会很有趣,但是搜索解决方案然后在未正确学习的情况下使用它们可能会很糟糕。您只是没有足够的经验。如果您需要用Google搜索它以解决问题,则意味着当它破坏系统一半时,您只是不太了解它就无法修复。
  3. 使用最新的东西做得不好:新的东西还没有被证明是技术。明年,这项技术可能会彻底消失,您将不再是世界上唯一使用它的技术。其他所有人都注意到这根本行不通。避免最新的银弹需要付出艰辛的努力,但这是值得的。
  4. 专注于您的核心知识:每个程序员都只知道世界上所有编程知识的一小部分。程序员使用起来足够舒适的部分甚至更小。实际起作用的部分甚至更小。仅使用您已经适当学习并且知道它起作用的知识。这使您可以更快地编程,并获得更好的代码。
  5. 不要无休止地进行调整:完美的代码是一个不错的目标,但这并不意味着您首先编写一些废话,然后无休止地对其进行调整以使其逐渐变得更好。借助您所拥有的所有良好知识,在第一时间完美地编写它。相信自己。不要相信世界。没有人知道您所做的完全相同的事情。他们的意见无关紧要。您是程序员,需要使其工作。世界无法为您做到。完成后,停止。在有人抱怨之前,请勿触摸它。
  6. 花时间学习新事物:每个人都需要不断学习新事物。我们的未来取决于它。只是拒绝使用它!学习新东西,但是在确定它确实有效之前,请不要使用它。经过验证的技术,您将有机会在明年使用它。或者您就像其他所有人一样忘记了它-只有好东西保留了...
  7. 不要丢掉好东西:成功构建大型系统并修复其中的所有问题并学到一些不错的技术后,最糟糕的事情就是抛弃这些知识并寻求新的东西。您已经知道它是如何工作的,存在什么问题以及如何解决这些问题。扔掉只是浪费时间。
  8. 跟上新技术:新系统之一将是成功的。从根本上说,它比市场上任何其他产品都要好。您只是不知道哪个是灵丹妙药。如果您未能及时找到它,您的知识将过时。通过取消对旧系统的访问,整个世界会让您失去所有美好的事物。

+1,请不要无休止地进行调整。
莎莎

3

是的,我曾经发生过这种情况。通常,您必须进行风险分析,以了解学习新技术将花费多少时间,并且在新技术未能达到期望的情况下,您可以恢复并使用旧技术吗?我宁愿在可能的时候学习新技术,但是当压力越来越大并且我无暇花时间尝试可能会失败的新事物时,我会坚持使用久经考验的方法。

总的来说,我发现学习新技术的最佳时间是在一个新项目的开始时。通常没有太大的压力,如果您发现可以正常工作的新功能,则可以轻松地将其与项目的其余部分集成,以进行下一步。尝试和学习新事物的最差时间是在进行大规模部署之前的最后两个疯狂的星期。


3

是的,新事物损害了生产力

当然是。即使在最佳情况下,新事物也需要额外的时间,因为它们不熟悉。它通常会花费很多时间。

不,新技术可以提高生产率

任何允许您更轻松地表达解决方案的新技术都会提高您的生产率。这就像从大if-elseif条件到调度表一样简单。


1

是的,它会损害生产力。我的前任被要求一次执行一些无聊的数据处理工作,因此她决定最好编写一个长程序来处理数据然后运行它-这样可以在几秒钟内解决问题。

当然花了她一周的时间来写它,但问题确实在几秒钟后得到解决。

我认为您的问题也是如此:是的,您可以通过学习新事物来提高生产率,但是将现有知识应用于任务并总体上更快地完成任务还是更好的。如果您可以在更短的时间内编写自己的图书馆,谁会在乎寻找和学习一个新的图书馆。

别忘了,与添加新东西相比,经常使用现有工具来完成它是一个更好的解决方案。每次添加新东西时,都会增加所需的维护面,从而减慢了其他所有人的工作速度(并且可能让您的代码变得很凌乱-我认为随着时间的流逝,“新”技术的各个层已逐渐传承,但仍存在于我们的代码中,这使事情变得可怕。回顾过去,最好使用旧的C方法而不是添加所有COM,所有VB和所有.NET,现在也将HTML嵌入其中)


强烈不同意:如果您可以在更短的时间内编写自己的图书馆,谁会在意寻找和学习新图书馆。那将是最好只用旧的C方式,而不是将所有的......和所有... -这是太容易出错,保守恕我直言。
马丁·巴

@Martin当然也适用相反的情况-因此,您读到很多人说“一直在学习新事物”,这通常仅意味着“重新发明相同的轮子,但是这次是使用新工具”。我采取务实的方法,即把工作做好要比我想做的事情优先,否则可能最终使生活变得更轻松。我年纪大了,知道“最终”往往意味着“永远”,尤其是对于“永远”。变化率,您最终会忽略随之而来的更多新事物的新事物。
gbjbaanb 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.