对抗Einstellung效应


17

定势效应指的是更好的“一个人的倾向,即使有解决一个特定的方式给定的问题‘’解决问题的或更多合适的方法。”

作为一个拥有丰富经验的程序员,如何克服这种总是从过去的经验中“尝试而真实”的方式解决问题的趋势?

举两个非常具体的例子,我已经建立了很长时间的Web应用程序,足够长时间以早于Javascript框架(例如jQuery)和更好的Web应用程序框架(例如ASP.NET MVC)的广泛使用。如果我的客户工作时间紧迫,或者遇到问题领域或业务规则提出的紧迫问题,那么我倾向于只使用我所知道的方法来寻求解决方案。这涉及非常丑陋的事情,例如

document.getElementById 

或将ASP.NET与模板绑定控件(DataList / Repeater)一起使用,而不是弄清楚如何使用ASP.NET MVC方法重新构造事物。

我过去使用的一种技术是拥有一些个人项目,这些项目只是为了探索这些新技术而存在,但是很难维持下去。可以建议其他什么方法?


你是单人工作吗?
阿帕拉拉2011年

3
注意“ MVC”潮流,它有它的位置。如果Webforms解决方案有效,那就顺其自然。
2011年

Answers:


4

这是一个很好的问题。而且我认为,不仅仅是高级程序员会遇到这种情况-尽早解决它对于学习者来说可以加快他们的技能发展。

这个问题有两个方面-一方面是不好的,另一方面是实际上是好的

不好-选择错误的解决方案

这里有一个例子-作为一个没有经验的开发人员,你可能只有真的,问题解决前两个问题,一个。在这一点上,你知道有你不知道的问题,但考虑到你自己的经历,很多你所看到的样子,可能是镜头一个

随之而来的是一个新问题。对您来说,这个新问题看起来像问题A,因此您以通常解决A的方式来解决它。有些事情感觉不对,它需要更长的时间,并且随着您的工作,您最终意识到这是一个新问题,C。这是您不知道存在的A的变体。

那么,您该怎么做才能不再犯此错误呢?两件事情:

  1. 找出这个新问题的不同之处。找出哪些方法可能会有所不同以及为什么。
  2. 编目此问题,然后继续解决更多新问题。

这应该可以帮助您自然地解决此问题。到您拥有10年的经验时,您已经熟悉了问题AZ,并且您的解决方案范围很广。

好-效率

在现实世界中,在截止日期和资源有限的情况下,使用您所知道的并不总是坏事:

  1. 在解决问题过程开始时,您就将新问题与所有已知问题进行了比较。
  2. 您将尝试识别这些迹象并确定这是什么样的问题。
  3. 如果无法达成100%的匹配,那么经验丰富的开发人员将权衡花费更多时间进行发现的风险与可能存在执行错误的风险。如果浪费时间的风险太大,那么您就继续做您所知道的。

这不是一件坏事-它使用风险分析来选择效率超过100%的准确性。每天都在做,如果不这样做,我们都会陷入无法解决的问题。

因此,回答您的问题:

作为一个拥有丰富经验的程序员,如何克服这种总是从过去的经验中“尝试而真实”的方式解决问题的趋势?

  1. 继续寻找和分类新问题
  2. 更好地选择正确的问题解决方案;不仅知道哪种解决方案,还知道为什么是正确的。
  3. 练习并磨练您的决策技巧。 有时,效率是正确的选择,而更好地识别那些时间将带来可衡量的现实优势。

我喜欢这个答案,谢谢您的投入。
大卫在达科他州

9

留出20%的工作时间来提高技能/正确地做事,而不是快速。否则,您会慢慢开始落后。这可能意味着您短期内要做的工作较少,但从长远来看,投资将获得回报。

困难的部分是抵制在这方面走弯路的压力。直到根深蒂固的习惯,才不要把那个角落。一旦您认为自己的技能投入是“正常的”,您就可以选择偶尔进行一个项目。同时,请勿将这次视为可选时间,并据此进行估算。


2
如果有时间,增加20%。我什至没有那么经验丰富,但是我已经想通了:正确地做总是总有回报的。而且,您对正确执行操作的了解越多,您完成它的操作就越快,最终(嗯,这就是我所希望的; P),两者将合并在一起,您将几乎可以正确地执行所有操作,并且快速。
stijn 2011年

顺便说一句,发生在我身上的事情多半是不对的:开始做某件事,知道那是不对的,然后两天后就失去了疯狂的时间,因为我最初知道是错的事情现在需要重构以使其正确,之后所有。
stijn 2011年

1
如果工作量很低,则为50%,或者项目之间的工作量甚至更高。我学过的东西都没有浪费。它的使用早于所有,即使在重要时才有知情的意见也是如此。
阿帕拉拉2011年

5

我认为软件开发并不总是要找到绝对的“最佳”解决方案,而是要把事情做好。因此,也许如果您不总是以最佳方式解决问题,那不是世界末日。

但是,如果您确实认为以最好的方式做事很重要,那么我认为最好的选择将是成为团队的一部分。与同事讨论设计并进行代码审查。由于人们通常具有不同的背景和偏好,因此在两三个人之间,您应该对问题和解决方案采取几种不同的态度。


经常让自己忙于工作意味着保持自己与学习下一个“最佳”技术的人一样的生产力。我将在贸易上度过三十年,而我所记得的大部分都是学习,学习以及更多的学习。
阿帕拉拉2011年

编程(至少是专业编程)的+1是指编写可以完成工作的代码,而不是理论上完美的艺术品。
jwenting 2011年

3

作为一个拥有丰富经验的程序员,如何克服这种总是从过去的经验中“尝试而真实”的方式解决问题的趋势?

定期重构。重构要求我们仔细检查过去编写的代码。我们可以利用这段时间以全新的视角查看旧代码。只要您跟上重大技术变更,就可以在您认为必要的时候进行更新。

如果我的客户工作时间紧迫,或者遇到问题领域或业务规则提出的紧迫问题,那么我倾向于只使用我所知道的方法来寻求解决方案。

好。您专注于客户的需求,而不是自己的目标。要走的路。

这涉及非常丑陋的事情,例如

document.getElementById

或将ASP.NET与模板绑定控件(DataList / Repeater)一起使用,而不是弄清楚如何使用ASP.NET MVC方法重新构造事物。

Webforms没有错。MVC并不是要取代Webforms。也不是时候学习一种新技术。记住三角形。 有空时重构。另外,请参阅第一个语句。

我过去使用的一种技术是拥有一些个人项目,这些项目只是为了探索这些新技术而存在,但是很难维持下去。可以建议其他什么方法?

什么是难以维持的?希望您不会维护旨在供您学习的项目。如果是这样,请将示例项目扔掉。为学习目的创建一个项目没有错。这是一件非常好的事情。参见第一句话。

反复无常!=不好。 这里的“ Einstellung效应”有点脱离上下文。测试是指人们优化“打开罐子”。人们“打开罐子”的方法是有限的,并且不会随着时间的推移而增强(不包括任何科幻内容)。在软件中,“完成任务X”的最佳方法会随时间而变化。


2

有助于思考的事情正在实践中进行实践。爱德华·德波诺(Edward De Bono)写了许多有关横向思考和相关主题的书。

但是,在任何给定的决策点,最重要的是评估和拥抱风险。由De Marco和Lister撰写的Waltzing with Bears是有关该主题的最佳书籍之一,应用于软件开发时。

极限编程和其他敏捷方法论建议,作为常规问题,应该继续尝试新的(峰值)解决方案。我在项目启动时就使用不同的技术进行了实验,这使我免于几次被炒作所青睐,而是偏向于真正的尝试,有时还发现了一个新的技术瑰宝。


1

作为一个团队,您可以通过识别模式中断的出色程度来更改组。我经常为此目的使用新朋友,因为他们没有陷入正常的做事方式中。这在某种程度上是管理上的答案-但即使是经验丰富的工程师,我想您也可以意识到别人的观点可能较少偏见,因此考虑的排名至少与您的观点一样重要(甚至更高)。


1

您确定不只是要放什么东西而不是document.getElementById确实是在浪费时间,无论您如何适应它?

编辑:我刚刚意识到,您的两个示例都是关于工具的,这可能是因为您考虑将工具更改为技能开发的最大里程碑。优秀的编码人员只需要图灵完整的语言即可发挥作用,这并不是说工具并不重要,但是您正在使用的工具并不完全是底层工具。如果您可以想到从一种工具过渡到另一种工具是最大的进步,则可能是您基本上停滞在难以量化的领域。


1
我不确定你是什么意思; 我指的是使用jQuery选择器作为更好的方法。使用直接DOM可以很好地工作,但是jQuery是一种更好的方法。因此,很明显,两者都可以,一个要比另一个要好。
大卫在达科他州

1
好吧,$("#id")它更短,但最终只是一个别名,上面document.getElementById("id")还有一些开销。您知道这将改善您的工作流程吗?还是只是被告知您jQuery更好很多,以至于您相信它?
aaaaaaaaaaaaaa

1
@eBusiness-您知道那$("#id")最终只是它的别名document.getElementById("id")吗?还是您刚刚被告知那么多次相信自己?我希望每次使用时getElementById都记得处理IE和Opera按名称返回元素的情况,以及Blackberry 4.6返回文档中不再存在的节点的情况。
Nick

如果您对不同对象的名称和ID使用相同的标识符,或者您的代码无法“记住”已删除的对象,那么使用jQuery是可行的。否则,只是过大的东西拖慢了代码的速度。我并不是说jQuery所做的是错误的,但是它并非在所有目的上都更好。
aaaaaaaaaaaaaa

1
我知道我已经引发了这一点,但是我认为我们在jQuery与JavaScript的激烈竞争中走得太远了。
aaaaaaaaaaaaaa

1

作为一个拥有丰富经验的程序员,如何克服这种总是从过去的经验中“尝试而真实”的方式解决问题的趋势?

自我意识

注意自己的倾向,弱点和优点。

明智的决定

使您的决定明确而有意识。在没有自觉地思考如何做的情况下,不要跳步做某事。

学习和申请

继续学习新技术,并考虑将其应用到哪里。如果遇到可以应用的情况,请进行成本效益分析。有时,尝试新事物的好处胜过已知解决方案的好处。

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.