我们可以分享解决问题的秘密或者最佳做法吗?
我听说领导XP的肯特·贝克(Kent Beck)在需要解决问题时使用了许多彩色铅笔来刺激他的大脑。我尝试了Kent的方法,它确实对我有用。我不知道为什么
我们有特殊的方法来解决难题吗?我真的很想了解你的大秘密。
概括:
人们推荐以下内容:
- 做其他事情:去钓鱼,散步,
- 与其他人交谈:将问题分解成碎片代码审查
- 时分双工
- 经验
- 重复和重复
- 专注于了解问题所在
解决方案
回答
- 编写单元测试
- 观看失败,然后通过
- 重复直到问题解决
认真地说,只是继续添加抽象层,直到一切"正常"为止。如果我不知所措,我只是问一个比我聪明的人,他们将如何解决问题。
回答
好吧,我可以告诉你不要做什么:
在电话会议中与客户交谈时发现问题的5秒后,与董事会的非IT经理一起提出解决方案:)
回答
经验。
说真的,我们对问题有什么样的回答?
没有一种算法可以让我们解决各种问题。
详尽无遗,探索每个选项,记住我们学到的知识,重用我们所知道的知识,考虑其他选择,询问认识的人,用谷歌搜索它,记住我们所学的知识,重用我们所知道的知识,发挥创造力,成为混乱,记住我们学到的知识,重用我们所知道的知识,跳出框框思考,以奇怪的方向解决问题,记住我们所学的知识,再利用我们所知道的知识。
回答
我一遍又一遍地重新定义。然后再次。然后,我将其分解为最小的块。
编码时,我使用了许多变量,并且一行上只执行了多个步骤。如果必须将五个数字相加并相乘,然后得到一个百分比,我将在自己的行上进行每个步骤。
稍后,在我知道了这一点之后,我将把线合并在一起,但是直到我确定问题已经解决为止。
这对调试也有帮助,因为我可以检查每个步骤以了解它已完成了我想要的工作。
回答
我通常不会立即开始编码。我将问题分解,并进行记录,直到到达一个我知道我需要在代码方面做什么的地方。根据问题的类型,我使用emacs组织模式文件,有时使用笔和纸。
在我放下任何实际代码之前花一些时间思考问题,通常会导致我写出比以前更优雅的解决方案。
回答
我关闭计算机,取出鱼竿,花几个小时钓鱼。
这是一项令人惊叹的活动,它可以使我们头脑清醒并担心这些小问题。最好的是,钓到的鱼越少,解决的问题就越多!
回答
也许这些也是要考虑的事情:
- 首先执行烦人的任务
- 不要重复自己
- 知道何时停止
- 与同事一起检查代码
回答
通常最好只向某人描述此问题。我有一半的时间向专家咨询,在中间问题中,答案就传给了我。如果有什么我只了解一半,然后尝试向其他人解释,我最终会完全理解。
只是继续谈论它。
回答
我最好的技巧是停止在计算机后面工作。喝杯茶,走一圈,也许漫步。如果这是一个棘手的问题,请向他人进行解释并讨论该问题会对我有很大帮助。如果真的很困难,请停止工作,并专注于其他事项。
我认为最重要的是让大脑放松并让自己富有创造力。那些彩色铅笔是激发我们创造力的一种方式(应该尝试一下,听起来不错!);喝杯茶(或者@Martin:钓鱼)是一种放松的方式。洗澡时发现了一些历史上最好的主意,顺便说一句:)
回答
前:
- 阅读我们可以找到的有关问题域的所有信息。
- 不要跳过我们认为不相关的主题。
- 重复步骤1和2.
期间:
- 将大问题分解为较小的任务。
- 定义健康标准(编写测试)。
Ater:
- 对解决方案/项目进行验尸。
- 尝试新的语言,学习新的技术。
- 练习,练习,练习。
回答
对我来说,问题可以通过两种方式解决。一个是如何为编程问题创建解决方案,另一个是如何解决存在的问题(即调试)。
程式设计:
- 暂时不要考虑实现。
- 确保我们拥有所需的所有信息。
- 开始将问题分解为几部分。为此,我使用了轮廓器。目前正在使用My Life Organized。
- 不必担心解决整个问题。从我们所了解的内容开始,并使其简单起步。我使用PDL描述解决方案。
- 完成通行证后,请继续返回2并重复。使用大纲工具,我可以不断增加细节级别,并在解决方案变得更清晰时轻松地移动这些细节。
- 如果我们没有答案的难题,请将其添加到大纲中,并描述下一步将解决该难题的方法。可能需要进行更多研究,与某人交谈或者从用户那里获得更多详细信息。
- 返回步骤2并重复执行,直到我们描述解决方案为止。
- 用我们选择的语言来实施解决方案。我们可能可以使用大纲作为注释。
调试:
- 我们需要尽力了解实际情况。
- 汇编我们所知属实的清单(事实)。
- 尽最大努力使它易于重复。
- 提出解决问题的最佳方法(请与他人,谷歌等协商)
- 尝试解决问题的方法。
- 如果已修复,请查看是否可以再次将其破坏,然后再进行实际修复。证明我们确实了解并解决了该问题。
- 如果不能解决问题,请撤消更改,然后返回到步骤1并重复
经过几次迭代,我们应该完全了解问题并了解适合我们情况的最佳解决方案。有时我们就是无法获得它。最好走开,睡在上面,并准备好重新攻击它。绝对地讨论问题并向他人展示问题可以更好地理解问题并获得新的想法。
回答
强制性参考:
詹姆斯·L·亚当斯(James L.Adams)的概念大片
G.Polya的《如何解决》
甚至
心灵表演技巧,罗恩·黑尔·埃文斯(Ron Hale-Evans)
回答
三个词:测试驱动开发
回答
对我来说,这取决于问题所在,如果我正在尝试解决一个新问题,我要做的第一件事就是找到白板并开始草绘一些概念,或者找到一个记事本并开始草绘一些概念。通常,要解决问题,我首先必须了解问题的根源以及问题的原因,一旦这不影响进行编码以及与编码相关的常规过程。
另一方面,调试是完全不同的问题。调试时,我通常会尝试弄清楚代码中正在发生什么(即逐步检查代码并观察变量),弄清楚它打算做什么,然后尝试对其进行修复。通常,在每个步骤之间也有一个"走出房间,喝点东西"的步骤。我在调试中发现的一个窍门是尝试保持冷静,如果这行不通,请暂时忽略该问题并进行其他处理。通常,通过专门的压力工作来解决问题需要花费更长的时间,而通过休息来解决。
回答
为了解决问题,我已经牢牢把握了以下步骤。
- 问题-找出真正的问题是什么。很多时候它很模糊或者模糊。
- 事实-弄清事实,弄清楚未知事物将是什么。
- 图片-绘制图片我一直都在使用白板。
- 策略-找出解决问题的不同方法,并确定最佳选择。
- 答案-通过选择的策略获得实际的解决方案。
- 检查-验证解决方案已根据给定的事实解决了问题。
回答
这么多答案...
尝试查找元认知!有很多技术可以帮助解决问题。
我发现的最简单的方法称为"问题解决轮"。在Google搜索上查找。
也有基于心理学的东西。尝试格式塔心理学;他们中最受欢迎的一种是理解问题解决之时的"啊哈"时刻。
回答
纯粹基于经验,当我得到最好的启示/尤里卡时刻时:
- 洗个淋浴
- 躺在床上,试图入睡
回答
I tried Kent's method and it really worked for me.
我猜这是因为我们至少可以在潜意识中同时从两个不同的角度看到问题。
作为一种通用方法,我倾向于考虑最终解决方案将要做的事情。
回答
我发现很多时候这似乎很困难,因为我没有真正完全理解这个问题。通过回到真实的用户/客户那里并听他描述他的真正需求,而不是阅读需求文档,我通常可以将问题减少到微不足道的程度。