【问题标题】:How does a programmer think? [closed]程序员是怎么想的? [关闭]
【发布时间】:2010-11-16 15:02:21
【问题描述】:

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

基本上,解决问题的一般步骤是什么?“解决问题”需要什么?如果您要绘制一张流程图,说明您在查看代码或尝试解决问题时的思维过程是如何工作的?

您认为哪些常见的参考资料、提示和心理假设有助于解决问题?

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

【问题讨论】:

标签: logic


【解决方案1】:

我坚信,无论您第一次查看哪种类型的应用程序,可能是 Web 应用程序、桌面应用程序、设备驱动程序或其他任何类型的应用程序,都需要三个步骤开发人员通常会遵循以了解其工作原理:

了解全局:

  • 这是什么类型的应用(网络、桌面等)?
  • 它是如何分层的(独立、客户端-服务器、n 层...)?
  • 应用程序的用途是什么?它应该做什么?
  • 该应用是为谁设计的?

看看它是如何工作的:

  • 使用什么语言?
  • 代码的结构如何?
  • 数据的结构如何?

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

  • 考虑过吗?
  • 应用是否明显优化? (为了表演?为了可读性?)
  • 应用程序完成了吗?还是有发展空间?
  • 是否有多次发布的迹象?
  • 等等……

第 1 步和第 2 步纯技术性的,而第 3 步必须尽可能非技术性...更多的是关于心理学和了解应用程序的构建方式。这显然需要经验,但只要你足够努力地思考并且不要在技术细节上浪费你的大脑时间,你最终会得到它。

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

【讨论】:

    【解决方案2】:

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

    我可以推荐的唯一解决问题的技巧是与其他人讨论。在那些你碰壁的时候,和同事一起经历它是无价的。很多时候,他们实际上甚至不会对讨论增加太多 - 在公开表达你所有想法的过程中,解决方案会变得清晰。

    【讨论】:

    • 是的,令人惊讶的是,我坐在那里“解决”了许多其他人的问题,当他们对我吐出技术废话时,我茫然地看着他们。 :)
    【解决方案3】:

    众所周知,人们不善于检查自己的思维过程,但我会试一试。我在 IQ 测试中的视觉空间能力测试非常高,语言技能测试中到高,数学技能测试中等(我想这解释了我的 A-level 数学成绩)。 amd 当我开始设计软件时,我会考虑形状和它们之间的联系。在向他人描述这些想法(或为我自己澄清)时,我使用简单的框图或从 Jacobson 的 Objectory 方法中提取的对象图 - 而不是 UML 建议的过于复杂的东西。我有时会为复杂的事物写文字描述,主要是为了提醒自己,但从不使用数字或数学。

    当然,这只是我——我曾与数学高手一起工作过,他们的程序员和我一样好,甚至更好。

    【讨论】:

    • +1 表示过于复杂的 uml,并提示我进入 Objectory
    • +1 用于自我分析问题.. 非常福尔摩斯 - 沃森第一次会议。你怎么知道的?
    【解决方案4】:

    我不认为...我处理。

    这实际上比听起来要少。我总是将任务分解成它们的组件,然后进一步分解它们,而这不仅仅适用于编写软件!就像@Mark Pim U 按顺序处理事情一样。

    当我做晚饭时,我妻子很生气,因为我需要很长时间才能开始。

    【讨论】:

    • +1 :) 是的,当一切都处理时,这成为现实生活中的一个问题
    【解决方案5】:

    分而治之

    我首先尝试按原样把握整个问题,然后开始寻找我可以识别的模式,并在一种递归过程中对它们做同样的事情,直到我有一个可以实施和遵循的分解解决方案更容易。

    【讨论】:

      【解决方案6】:

      这是我很少会回答“它只是有效”的情况之一。我通过滚滚来学习东西。我没有噱头或设备来帮助我。我花了一些时间来学习 PHP,但之后 Javascript 就容易多了。一旦你解决了一件事情,接下来的事情就会变得越来越容易。

      【讨论】:

        【解决方案7】:

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

        我很想看看是否对解决问题的技巧进行过任何心理学研究。

        【讨论】:

          【解决方案8】:

          类似于乔纳森·桑普森 - 它只是工作。

          当我解决一个真正的问题时,我会尝试思考解决问题的最合乎逻辑的方法。 然后,当一切都出错时(就像通常那样),我必须采取数百次回避措施才能完成工作。只要继续专注于最终目标,以这种合乎逻辑的方式,您就会实现目标。

          但最终,它决定为我工作,我最终得到了一个通常与我计划的完全不同的成品。只要顾客开心,我就开心!

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              我的主要技能是识别我已经知道的模型或系统与手头的任务之间的相似之处。其中一些之间的联系似乎很抽象。关键是发现连接。这导致了广泛适用的通用模式和方法的抽象。与此相关,我从算法中学到的最重要的一点是,问题永远不是“想出一个聪明的算法来解决 X”。它是“模型问题 X,使得它可以通过现有的智能算法 Y 来解决”。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2014-06-18
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-01-28
                • 1970-01-01
                • 2013-06-19
                • 1970-01-01
                相关资源
                最近更新 更多