这可能是一个无可救药的模糊问题。但我很想听听人们在学习一个新概念或试图让他们的大脑了解他们以前可能从未见过的代码时所经历的任何逻辑思维过程。
基本上,一个人采取什么一般步骤来解决问题以及“解决问题”需要什么?如果您要绘制一张流程图,说明您查看代码或尝试解决问题时的心理过程如何工作,它会是什么样子?
您发现哪些常见的参考资料、提示和心理假设对解决问题有用?
这在不同域之间有何不同?例如,Web 程序员的思维过程在哪些方面与传统桌面应用程序开发人员的过程相似或不同?
这可能是一个无可救药的模糊问题。但我很想听听人们在学习一个新概念或试图让他们的大脑了解他们以前可能从未见过的代码时所经历的任何逻辑思维过程。
基本上,一个人采取什么一般步骤来解决问题以及“解决问题”需要什么?如果您要绘制一张流程图,说明您查看代码或尝试解决问题时的心理过程如何工作,它会是什么样子?
您发现哪些常见的参考资料、提示和心理假设对解决问题有用?
这在不同域之间有何不同?例如,Web 程序员的思维过程在哪些方面与传统桌面应用程序开发人员的过程相似或不同?
我坚信,无论您第一次查看哪种类型的应用程序,可能是 Web 应用程序、桌面应用程序、设备驱动程序或其他任何类型的应用程序,开发人员通常都会遵循三个步骤为了了解它是如何工作的:
获取大图:
看看它怎么运作 :
了解(或至少尝试)应用程序的思考方式:
第一步和第二步纯粹是技术性的,而第三步必须尽可能地非技术性……更多的是关于心理学和理解应用程序是如何构建的。这显然需要经验,但只要你足够努力地思考并且不要在技术细节上浪费你的大脑时间,你最终会得到它。
整个过程不需要使用键盘。你只应该在纸上阅读、思考和做笔记(我不是在开玩笑:笔和纸!)。
嗬嗬,祝你好运。这是一个很好的问题,我相信你会得到很多答案。虽然我不得不说我不能对此给出一个令人满意的答案——我最不想用流程图来描述我的思维过程——但我认为这没有任何黄金公式。
我可以推荐的解决问题的唯一技巧是与其他人讨论。在那些你碰壁的时候,和同事一起经历它是无价的。很多时候,他们实际上甚至不会为讨论添加太多内容——在公开你所有想法的过程中,解决方案会变得清晰。
众所周知,人们不善于检查自己的思维过程,但我会试一试。我在智商测试中的视觉空间能力测试非常高,语言技能测试中到高,数学技能测试中等(我想这解释了我的 A-level 数学成绩)。amd 当我开始设计软件时,我会考虑形状和它们之间的联系。在向他人描述这些想法(或为我自己澄清)时,我使用简单的框图或从 Jacobson 的 Objectory 方法中提取的对象图 - 而不是 UML 建议的过于复杂的东西。我有时会为复杂的事物写文字描述,主要是为了提醒自己,但从不使用数字或数学。
当然,这只是我——我曾和数学天才一起工作过,他们的程序员和我一样好,甚至更好。
我不认为...我处理。
这实际上比听起来要少。我总是将任务分解成它们的组件,然后进一步分解它们,这不仅仅适用于编写软件!就像@Mark Pim U 按顺序处理事情一样。
当我做晚饭时,我的妻子很生气,因为我需要很长时间才能开始。
我首先尝试按原样把握整个问题,然后开始寻找我能识别的模式,并以一种递归过程对它们做同样的事情,直到我有一个可以更容易实施和遵循的分解解决方案。
这是我很少会回答“它只是有效”的情况之一。我通过滚滚来学习东西。我没有噱头或设备来帮助我。我花了一些时间来学习 PHP,但之后 Javascript 就容易多了。一旦你解决了一件事情,接下来的事情就会变得越来越容易。
就个人而言,我与自己进行了一次内部对话,“好的,所以我们需要遍历这个整数列表。” “但当我们找到我们想要的价值时,我们可以打破。” “好的,当我们开始时,列表肯定会被初始化吗?”
我很想看看是否对解决问题的技术进行了任何心理学研究。
与 Jonathan Sampson 类似——它确实有效。
当我解决一个真正的问题时,我会尝试思考解决问题的最合乎逻辑的方法。然后,当一切都出错时(就像通常那样),我必须采取数百次回避措施才能完成工作。只要继续专注于那个最终目标,那种合乎逻辑的方式,你就会到达那里。
最终,它决定为我工作,我最终得到了一个通常与我计划的完全不同的成品。只要顾客开心,我就开心!
就个人而言,我在脑海中看到的代码是图像而不是文本(如 Neil Butterworth)——这有点难以描述,因为(引用 STIV)“没有共同的参考框架”。
我的主要技能是识别我已经知道的模型或系统与手头的任务之间的相似之处。其中一些之间的联系似乎很抽象。关键是发现连接。这导致了广泛适用的通用模式和方法的抽象。与此相关,我学到的关于算法的最重要的事情是,问题永远不是“想出一个聪明的算法来解决 X”。它是“模型问题 X,使得它可以通过现有的智能算法 Y 来解决”。