程序员怎么想?

时间:2009-08-04 09:36:45

标签: logic

这可能是一个毫无希望的模糊问题。但我很想听听人们在学习一个新概念或试图让他们的大脑围绕他们以前可能从未见过的代码时所经历的任何逻辑思维过程。

基本上,人们采取了哪些一般步骤来解决问题,以及如何“解决问题”?如果您要查看代码或尝试解决问题时心理过程如何工作的流程图?

您认为在解决问题方面有哪些常见的参考,提示和心理假设?

不同域名之间有何不同?例如,网络程序员的思维过程在哪些方面与传统的桌面应用程序开发人员的流程相似或不同?

10 个答案:

答案 0 :(得分:13)

我非常相信,无论您第一次看到什么类型的应用程序,可能是Web应用程序,桌面应用程序,设备驱动程序或其他任何类型,有三个步骤:开发人员通常遵循以了解其工作原理:

了解全局:

  • 这是什么类型的应用程序(网络,桌面,......)?
  • 如何分层(独立,客户端 - 服务器,n层,......)?
  • 该应用程序的用途是什么?该怎么办?
  • 制作的应用是谁?

了解它的工作原理:

  • 使用了哪种语言?
  • 代码是如何构建的?
  • 数据是如何构建的?

了解(或至少尝试)应用程序的思维方式:

  • 是否经过深思熟虑?
  • 应用程序是否明确优化? (为了表演?为了便于阅读?)
  • 应用已完成?还是有进化的空间?
  • 是否有多次释放的迹象?
  • 等...

第1步和第2步纯粹是技术性的,而第3步必须尽可能 untechnical ...它更多的是关于心理学和理解应用程序是如何构建的。它显然需要经验,但只要你认真思考并且不会浪费你的大脑时间和技术细节,你最终会得到它。

整个过程不需要使用键盘。你只应该在纸上阅读,思考和记笔记(我不是在开玩笑:笔和纸!)。

答案 1 :(得分:12)

何浩,祝你好运。这是一个很好的问题,我相信你会得到很多答案。虽然我不得不说我无法给出一个令人满意的答案 - 我最后会用流程图描述我的思维过程 - 我认为没有任何黄金公式。

我可以推荐解决问题的唯一方法是与其他人讨论。在你碰到砖墙的那些时候,与同事一起经历它是非常宝贵的。通常情况下,他们实际上甚至不会在讨论中添加太多内容 - 在公开解决所有想法的过程中,解决方案可以变得清晰。

答案 2 :(得分:4)

人们在审视自己的思维过程方面是出了名的不好,但我会给它一个旋转。我对智商测试中的视觉空间能力测试非常高,对于语言技能测试中高到高,对数学技能测试中等(我猜想我的A-level数学等级)。当我开始设计软件时,我认为在形状和它们之间的联系方面。当谈到将这些想法描述给他人(或者为我自己澄清它们)时,我使用简单的框图或从Jacobson的Objectory方法中获取的对象图 - 而不是UML建议的过于复杂的东西。我有时会写复杂事物的文字描述,主要是作为自己的提醒,但从不使用数字或数学。

当然这只是我 - 我和数学高手一起工作,他们和我一样好,甚至更好。

答案 3 :(得分:3)

我不认为...我处理。

这实际上比听起来更少翻转。我总是把任务分解成他们的组件,然后进一步打破这些,这不仅仅是编写软件!就像@Mark Pim U一样顺序完成事情。

我的妻子在吃晚饭时非常生气,因为我需要很长时间才能开始。

答案 4 :(得分:3)

划分&治

我首先尝试抓住整个问题,然后开始找到我能识别的模式,并在一种递归过程中为它们做同样的事情,直到我有一个细分的解决方案我可以实现并遵循更容易。

答案 5 :(得分:2)

这是我会回答“它只是有效”的罕见时期之一。我通过他们来学习东西。我没有噱头或设备来帮助我。花了我一些时间来学习PHP,但之后Javascript更容易。一旦你处理了一件事,接下来的项目就会变得更加容易。

答案 6 :(得分:2)

就个人而言,我与自己进行内部对话'好的,所以我们需要遍历这个整数列表。' “但是,当我们找到自己想要的价值时,我们就会破产。” “好吧,当我们开始时,列表肯定会被初始化吗?”

我有兴趣看看是否对解决问题的技术进行了任何心理学研究。

答案 7 :(得分:0)

与Jonathan Sampson相似 - 它只是有效。

当我正在攻击一个真正的问题时,我试着想出通过它的最合乎逻辑的方法。 然后,当一切都出错时(通常如此),我必须做出数百个回避才能完成任务。只要继续关注最终目标,那就是合乎逻辑的方式,你就能实现目标。

最终,它决定为我工作,最终我得到的产品通常与我计划的完全不同。只要顾客满意,我就是!

答案 8 :(得分:0)

就我个人而言,我在脑海中看到代码而不是文字(如Neil Butterworth) - 因为(引用STIV)“没有共同的参考框架”,所以有点难以描述。

答案 9 :(得分:0)

我的主要技能是确定我已经了解的模型或系统与手头的任务之间的相似之处。其中一些之间的联系看起来很抽象;关键是发现连接。这导致了广泛适用的共同模式和方法的抽象。与此相关,我学习算法的最重要的事情是问题永远不会“提出一个解决X的智能算法”。这是'模型问题X,它可以通过现有的智能算法Y'来解决。