你能分享一下解决问题的秘诀或最佳实践吗?

时间:2008-08-16 19:20:40

标签: extreme-programming

我听说领导XP的Kent Beck在需要解决问题时使用了这么多彩色铅笔来刺激他的大脑。我试过肯特的方法,它真的对我有用。我不知道为什么。

你有一个特殊的方法来解决难题吗?我真的想了解你的秘密。


要点: 人们推荐以下内容:

  • 做点别的事: 去钓鱼,散步,
  • 与其他人交谈: 将问题分解成碎片 代码审核
  • TDD
  • 体验
  • 重复&重复
  • 专注于理解问题所在

19 个答案:

答案 0 :(得分:21)

通常最好只向某人描述问题。有一半时间,我问专家,问题的答案是在中间问题。如果有一些我只是半懂的东西,我会尝试向其他人解释,我最终会完全理解它。

请继续讨论。

答案 1 :(得分:10)

对我来说,你的问题可以采取两种方式。一个是如何为编程问题创建解决方案,另一个是如何解决存在的问题(即调试)。

编程:

  1. 不要考虑实施。
  2. 确保您拥有所需的所有信息。
  3. 开始将问题分解成碎片。我为此使用了一个大纲。目前正在使用My Life Organized
  4. 不要担心解决整个问题。从您所知道的开始,一开始就保持简单。我使用PDL来描述解决方案。
  5. 完成传球后,继续回到2并重复传球。使用大纲我可以不断提高细节水平,并随着解决方案变得更加清晰,轻松移动这些细节。
  6. 如果您有没有答案的拼图,请将其添加到您的大纲中,并描述解决该拼图的下一步。这可能是更多的研究,与某人交谈,或从用户那里获得更多细节。
  7. 返回步骤2并重复,直到您描述了解决方案。
  8. 以您选择的语言实施您的解决方案。您可以将大纲用作评论。
  9. 调试:

    1. 你需要尽力了解真实情况。
    2. 编制一份你知道的事实清单(事实)。
    3. 尽可能轻松地使其重复。
    4. 提出解决问题的最佳方法(咨询他人,谷歌等)
    5. 尝试解决问题的方法。
    6. 如果它修复了它,那么看看你是否可以再次破坏它,然后将其修复为真实的。帮助您证明您真正理解并解决了问题。
    7. 如果无法修复,请撤消更改,然后返回步骤1并重复
    8. 经过几次迭代后,您应该完全理解问题,并了解适合您情况的最佳解决方案。有些时候你无法得到它。走开,睡在上面,并准备新鲜攻击它是很好的。绝对正确地讨论它并向其他人展示你的问题可以帮助你更好地理解问题并获得新的想法。

答案 2 :(得分:7)

我可以告诉你要做什么:

在电话会议中与客户交谈时,在识别问题5秒后,与您的非IT经理在董事会会议室中提出解决方案:)

答案 3 :(得分:5)

  1. 编写单元测试
  2. 观看失败,然后通过
  3. 重复直到问题解决
  4. 说真的,只要不断添加抽象层,直到事情“正常”为止。如果我在我脑海中,我只会问一个比我更聪明的人如何解决这个问题。

答案 4 :(得分:3)

体验。


说真的,你对你的问题有什么样的答案?

没有任何算法可以解决各种问题。

要详尽无遗,探索每一个选项,记住你学到的东西,重复使用你所知道的,考虑其他选择,问问你认识的人,google,记住你学到的东西,重复使用你所知道的,创造性,混乱,记住你学到的东西,重复使用你所知道的东西,在盒子外面思考,向奇怪的方向推进问题,记住你学到的东西,重复使用你所知道的东西。

答案 5 :(得分:3)

完全基于经验,当我得到最好的启示/尤里卡时刻时:

  • 洗澡
  • 躺在床上,试图 睡着了

答案 6 :(得分:3)

强制性参考文献:

Conceptual Blockbusting,来自James L. Adams

How to Solve It,来自G. Polya

甚至可能

Mind Performance Hacks,作者:Ron Hale-Evans

答案 7 :(得分:2)

我发现经常看起来很困难,因为我并没有完全理解这个问题。通过回到真实用户/客户并听取他描述他真正需要的东西而不是阅读需求文档,我经常能够将问题简化为微不足道的事情。

答案 8 :(得分:2)

也许这些都是需要考虑的事情:

  1. 先做烦人的任务
  2. 不要重复自己
  3. 知道何时停止
  4. 与同事一起检查您的代码

答案 9 :(得分:2)

我一遍又一遍地重新定义。然后再次。然后我把它分成我能做到的最小的块。

编码时,我使用了很多变量,并且在一行上不能执行多个步骤。如果我必须添加五个数字然后乘以一个百分比,我将在它自己的行上执行每一步。

后来,在我知道我已经得到它后,我会将线条组合在一起,但直到我确定问题解决了。

这也有助于调试,因为我可以检查每一步,知道它做了我想要它做的事情。

答案 10 :(得分:1)

我最好的办法是停止在电脑后面工作。泡一杯茶,走一会儿,也许可以漫步。如果这是一个棘手的问题,向其他人解释并讨论这个问题对我有很大帮助。如果它真的很难:停止工作,并专注于其他事情。

我认为最重要的是让你的大脑放松并让自己变得富有创造力。那些彩色铅笔是一种刺激你的创造力的方式(应该尝试自己,听起来很棒!);一杯茶(或@Martin:钓鱼)是一种放松的方式。历史上一些最好的想法是在洗澡时被发现的,顺便说一下:)

答案 11 :(得分:1)

我关掉电脑,拿出杆子,花几个小时钓鱼。

这是一个令人惊奇的活动,可以清除你的思绪并担心那些琐碎的问题。最棒的是,你捕获的鱼越少,你可以解决的问题就越多!

答案 12 :(得分:1)

为了解决问题,我已经根深蒂固了以下几个步骤。

  • 问题 - 找出真实的东西 问题/问题是。很多时间 它很模糊或模糊不清。

  • 事实 - 获取您所知道的一切 直截了当,弄明白 未知的将是什么。

  • 图片 - 绘制图片我用我的 白板一直都在使用。

  • 策略 - 弄清楚不同 你可以解决它并决定的方法 最好的选择。

  • 答案 - 通过获取实际解决方案 选择的策略。

  • 检查 - 验证您的解决方案是否正确 用给定的解决问题 事实。

答案 13 :(得分:1)

我通常不会马上开始编码。我打破了这个问题,并记下它,直到我到达一个我知道我需要在代码方面做什么的地方。我使用emacs组织模式文件,偶尔使用笔和纸,具体取决于问题的类型。

在我将任何实际代码放下之前花一点时间思考这个问题通常会让我写出一个比其他方式更优雅的解决方案。

答案 14 :(得分:0)

在:

  1. 阅读有关问题域的所有信息。
  2. 不要跳过您认为不相关的主题。
  3. 重复步骤1和2.
  4. 在:

    1. 将大问题分解为较小的任务。
    2. 定义您的健身标准(编写测试)。
    3. 亚特:

      1. 对解决方案/项目进行验尸。
      2. 尝试新语言,学习新技术。
      3. 练习,练习,练习。

答案 15 :(得分:0)

三个字:测试驱动开发

答案 16 :(得分:0)

对我而言,这取决于问题所在 - 如果我正在努力解决一个新问题,我要做的第一件事就是找到白板并开始草拟一些概念,或者找一个记事本并开始草拟一些概念。通常,为了解决问题,我首先必须了解问题是什么以及为什么它是一个问题,一旦事情转移到编码和与编码相关的常规过程。

另一方面,调试是一个完全不同的问题。在调试时,我通常会尝试找出代码中发生了什么(即逐步执行它并观察变量),弄清楚它打算做什么,并尝试修复它。通常,每个步骤之间都有一个“走出房间,喝点东西”。我通过调试找到的一个技巧是尝试保持冷静,如果这不起作用,请暂时忽略该问题并处理其他事情。大多数时候,虽然专注 - 压力 - 工作需要更长的时间才能解决问题,然后通过休息来实现。

答案 17 :(得分:0)

这么多答案......

尝试查找元认知!有很多技术可以帮助解决问题。

我发现的最简单的被称为“问题解决轮”。在Google搜索上查看。

也有基于心理学的东西。尝试格式塔心理学;他们最受欢迎的是了解问题成为解决方案的“啊哈”时刻。

答案 18 :(得分:0)

  

我试过肯特的方法,它确实对我有用。

我猜这是因为你可以同时从两个不同的角度看问题,至少在潜意识里。

作为一般方法,我倾向于考虑最终解决方案必须做什么。