编程如何受到空间才能的影响?[关闭]


19

背景

我在项目上工作的时间越长,它变得越不清楚。就像我无法再分离各种类/对象一样。一切开始混合,很难再次将它们分开。我开始将函数放到它们实际上不属于的类中,并犯了一些愚蠢的错误,例如编写代码,后来发现这些代码已过时100%;事情在我的脑海中不再清晰可见。直到我退后几个小时(有时甚至是几天!),我才能真正看到正在发生的事情并取得成果。

我通常会尝试解决这个问题,我对编码充满热情,以至于我一生都不知道自己还能做什么。在这种情况下,事情可能会变得很奇怪,我的脑袋变得如此之高,以至于我在某种程度上失去了与现实的联系,因为诸如倾倒一杯水之类的各种动作不再有意识地发生。它发生在自动驾驶过程中,在此期间,我几乎所有的专心致志(甚至是一件事情?)都致力于解决无用的边界问题(尝试分离代码元素)。感觉就像是一场失败的战斗。

所以我前段时间进行了智商测试(我相信是韦氏成人智力测验),结果发现我的空间适应能力很低。我的成绩仍然不错,略高于平均水平,因此我不必用棍子戳东西来谋生,但是我有点担心这在编写/设计计算机程序时会给我带来很大的障碍。永远无法认真或专业地做到这一点。

我对其他人对此的看法非常感兴趣...

空间适应性低可能是上述问题的原因吗?

编程如何受到空间才能的影响?

也许我应该更多地按照ADD或类似方式看待,因为我确实在17岁(5年前)被诊断出患有ADD,但我收到的药物似乎对我的影响不大,所以我从未服用过这么严重。

据我所知,人们天生具有较低/中等/较高的空间适应能力,所以我认为很有趣的是,找出越幸运的人是否天生就是更好的程序员。


5
it turned out my Spatial Aptitude was quite low. I still got a decent score, just above average,我不是心理学家,但是,如果我正确阅读英语并理解平均值的定义,那么我真的不明白它的quite low含义是……也许您对此有过高的理解... :)
haylem

1
嗯,智商测试也很废话,直截了当地总结了有关他们的研究。你住在美国吗?(只是问问,因为在美国,智商测试的使用率似乎更高,而且对ADD的恐惧被高估了)
haylem 2012年

1
@psr:实际上我不会感到惊讶。听起来可能与它没有太大关系,但是空间表示和慢性晕动病有问题的人通常很难处理很多事情。我不认为这有什么区别(但是我不是心理学家或神经病学家),而您的实际编程技能和热情将使您与众不同。
haylem

2
我通常不知道@haylem,但是大多数在线IQ测试会沿多个轴进行评分。空间适应性,逻辑技巧等。我认为纳特利所说的是,所有这些人的平均水平略高于平均水平,但空间才能得分却很低。
伊兹卡塔2012年

1
渴望一份可以用棍子戳东西的工作。
丹·雷

Answers:


27

实际上,有一些硬性研究数据,大部分是在过去35年中收集的,我也经历过一些类似的现象,尽管不是定期的。有关更多信息,请参见下文。

研究资料

似乎有一些,但微小的基于以下工作进行总结研究的相关性。与其他研究一样,研究模型在研究之间也有所不同,应仔细审查它们,以了解结果为何在结论上存在差异。

  • 探索编程成就的心理预测因素 [ PDF ](Erdogan,Aydin,Kabaca,2008)

    不幸的是,这个细节含糊不清。它通常指向“能力”的“高影响力”,但是仅指向其他研究,而没有给出每个能力测试的结果,因此我们不知道空间能力如何发展。它主要是文学评论,而不是实际研究。

  • 空间能力和编程学习 [ PDF ](琼斯,2008年)

    从分析的结果来看,有证据表明在学习编程时空间能力很重要。[...]虽然空间能力已被证明是相关的,但我们并不认为应该将心理旋转能力用作预先确定编程能力的一种手段,而应在设计教学干预措施时加以考虑。需要考虑教学方法和软件可视化,以帮助空间能力较低的学生设想抽象概念并建立更好的心理模型(Wiedenbeck等,2004)。

  • 第一门编程课程成功的预测因素 [ PDF ](Simon,Fincher等,2006)

    在空间可视化(纸张折叠)任务的得分与编程标记之间仅发现很小的正相关。这表明除了空间技能外,智商的其他部分可能是智商对编程成功的大部分影响(Mayer等,1989)。

  • 谁可能会获得编程技能?(Shute,1991年)

  • 半球横向化和编程能力,(Gasen,Morecroft,1990年)

  • 与编程中的问题解决有关 [ PDF ](Choi-man,1988)

    有趣的是...不错的研究模型,并具有多个研究组的量化结果,并考虑了研究因素的可靠性。它得出:

    可以看出,对于男性而言,仅数学一项就可以占编程能力差异的30.90%,而空间测试则可以占8.00%。[...]

    还可以看到,对于女性而言,只有数学和空间测试的表现对预测编程能力具有显著作用。

    研究结果表明,在数学测试和空间测试中得分较高的学生在编程能力测试中得分较高。

  • 学习,研究和编程的图形表示(Taylor,Cunniff,Uchiyama,1986年)

  • 在小组和个人环境中学习计算机程序的认知要求(Webb,1985年)

  • 新手程序员中编程任务的认知关联(Irons,1982)

  • 学习能力研究:进度报告 [ PDF ](RE Snow,1976)

稍微加点盐:有些是相对过时的,自那时以来,智商测试可能已经改变了。我还没有进行深入的搜索来查找每篇文章的引文,以查看它们后来是否被确认或揭穿。

如果您没有与提供这些在线内容访问权限的图书馆的隶属关系,则某些链接(尤其是[PDF]类)可能对您不起作用。


个人想法

警告和披露:既不是心理学家,也不是神经科医生,但我一直在为小孩(6岁开始)和大学生(最多60岁)学习和教授编程。

我本人曾与AND一起作为大学老师与学生一起学习,其中包括一些受到空间问题影响的学生(以及其他一些残疾程度更高的学生),但我不得不说,尽管有可能(我没有基于残疾来跟踪我的学生,显然)有些人会在总体曲线的下部注册,但我仍然清楚地记得有些人得分很高(甚至至少有2年是该班级的专业)。

我的观点是,尽管它可能会起作用,并且如上述一些研究所示,但它并不能说明您像程序员一样学习编程和思维的最大能力。这无关紧要,因为它不会阻止您学习您是否真的想要,也不会阻止您在一般情况下工作,尽管这样做(可能会使您感到困难)。

实际上,学习什么和学习速度没有限制

毕竟,没有程序员不喜欢挑战,对吗?(我在看着你,RSI)


个人(可能无关)的经验

可能是您热情了。您每天和每周工作几小时?您会定期休息吗?

类似的情况?

在我生命中的某个时期,我一年中的每一天至少要工作14个小时,全年达到最高点,因此在计算机屏幕前记录了120个小时的工作周。是的,每周仅剩48小时可以吃饭,睡觉,上下班旅行(提示:避免开车!),淋浴和其他重要功能。在这一点上,我几乎可以心跳入睡(尽管通常会出现睡眠问题),但是我几乎总是梦ing以求的代码,而且我还会突然意识到在洗完澡后,甚至在走路,跑步或做些琐碎的任务时,我的想法又回到了自动驾驶仪上,就像您自己说的那样。不幸的是,我不会神奇地解决我的睡眠问题。它会更接近您所描述和体验的内容:巨大的混乱思想在我的脑海中旋转,这在更大的范围内似乎(似乎)有意义,但并未明确表达任何解决方案,并且没有太大的成功抓住其中的一种思想来专注于它,将其清晰地分解并转化为有用的东西。这通常很烦人和令人沮丧。

放松可能帮助

也许您需要冷静一下,放松一下,减少工作量。尝试找到一些让您放心的东西。那时,我最终常常放弃一些宝贵的睡眠时间,转而做一些真正可以阻止这种疯狂想法的事情。似乎适得其反,但我实际上更愿意做一些让自己真正放松的事情,而不是多睡而不休息。从某种意义上说,分散神经电池的注意力,并消耗物理电池的睡眠。

识别触发器

如果不是您的情况,那么可能为您触发此状态还涉及其他方面。尝试隔离出现在这些情况下的元素,并查看是否可以在其他环境中重现此条件,以查看是否也找到了这些元素。它是在工作中还是在家中发生更多?

隔离

另外,您可能已经听说过并尝试过此操作,但是我有一个空间残疾较小的朋友,通常,如果在计算机上工作,这对他有帮助,因为他要在更暗的房间里工作,以避免有太多复杂的视图和窗户开放(避免分心),并且总体上保持简约(在设计和颜色方面以及内容和表示方面)。

根据最适合自己的情况,还应尝试定期休息,并让您的心智每1或2个小时在短时间内自由奔跑。也许采用Pomodoro技术或类似方法(我没有对此进行相关研究,但可能会迫使您休息一下)。


一个非常有趣的问题,一旦您开始研究,一开始我就没有回想自己的经历。希望能帮助到你。对于更多的研究论文,在Google学术搜索中快速搜索“空间适度编程”会产生更多的结果。使用他们的引用工具可能有助于识别被引用最多的作品。
haylem

1
感谢您为您的回答付出了极大的努力,其中有一些非常好的信息。我绝对每天写大约10个小时的代码,有时甚至更多。在这里放松可能是关键,但这将是很难实现的。就像您说的,我可能对自己的项目充满热情;我不想做别的事情。因此,尽管我可能实际上在做编程以外的事情,但我的脑子仍会继续做下去……我认为不可能阻止你的思想去做,因为该死的好事。
natli 2012年

@natli:这与保持住习惯有点相同。如果您想戒烟,则需要用某种香烟代替。除了编程之外,您还真喜欢什么特别的爱好?然后使用它。对于某些人来说,激烈的活动是可以做的(例如,壁球...),而对于另一些人则相反:他们需要非常被动的东西。也许您可以尝试冥想。学会清醒头脑是学习的一项重要技能。例如,它对我的​​睡眠问题有很大帮助。
haylem 2012年

@natli:我不在乎“努力”。我发现这是一个有趣的问题,大多数文章都是不错的读物。有时,当试图确定心理和神经驱动因素时,这类研究可能会有些含糊,因为很难指定好的学习模型。当研究倾向于朝人们“关门”的方向发展时,它也可能令人恐惧。显然,这不是目的:您不会定向研究;但这可能是结果。我仍然很高兴发现它是一个活跃的研究领域谢谢你,很高兴它有所帮助。
haylem 2012年

+1为番茄技术。当我还在大学时,我用它来学习考试。它一定行得通,因为我通过了所有内容-整个句子都是基于狡猾的科学,所以不要当真。
杰米·泰勒

4

等等,这不应该只是评论。

“我通常会努力解决这个问题”

别打了。您正在扭曲事情并且犯错了吗?您可能会遇到一些独特的问题,但是对于花了太长时间专注于某个问题的任何人来说,大脑反叛的方式都是正常的。当我年轻的时候,我一天的大部分时间都花在这种高度意识的水平上,而我却没有给自己任何好处。您的问题不是您没有足够努力,而是您不知道何时退出。

当我发现在合理的时间入睡的唯一方法是让自己自己完全不考虑任何东西,而在10分钟左右的时间内发现这一事实时,我终于学会了欣赏事物的价值。我会睡着,而通常我会在至少几个小时内思考,思考,思考,然后因精神疲惫而崩溃。

从那里我发现,当我将过多的有意识的思想投入到问题中时,让他们轻松地学习会变得容易得多。我惊讶地发现这实际上有助于您解决问题。

我建议以下内容:

  • 当某些事情在您的头上扭曲时,您就没有休息或散步的奢侈之意,请尝试换档并专注于一段时间中非常不同的问题。

  • 永远不要跳过午餐,总是离开办公室。给自己,直到您到达门口到达停靠点或将其放下。当您回到它的脑海中时,所有值得保留的东西都会消失,所有您不需要的东西都将消失。您发现的越多,越容易获得。

  • 经常,您会全天不考虑任何事情。即使只是一分钟,您就能得到一杯水。

  • 尝试利用OOP或任何其他以问题域为中心的体系结构方法来进行思考。您的代码中最高级别的参与者是谁?他们之间不应该有复杂的关系。这样一来,您就可以一次集中精力解决一个问题。

一些可能有用的编码原理

  • 对于一般的编码实践,DRY是“偷错”,几乎可以应用于所有道德/道德。有非常罕见的例外。保持它们非常稀有。

  • 如果您习惯于过度解决问题,将来可能最终会遇到这种情况,那就把它淘汰掉。没有什么比不需要复杂的代码更能适应未来的发展了。“企业”就是谎言。

  • 复杂的模式通常会保证获得较长的奖励点列表。在大多数情况下,只有3件事情很重要。很容易阅读。易于重用。很容易修改。从最小使用武力的角度考虑,武术家可以将其运用到复杂性上。恰好足以解决问题是理想的。

  • 首先编写您的界面。而且,我的意思不是指仅在需要时使用的C#/ Java构造,而是您的对象的API。类/对象需要做什么?编写这些空方法并为其指定arg名称。在完成之前,请不要填写空白。以后可以进行调整是可以的,但是一旦确定了需要执行的操作,就可以专注于每次需要完成的每一件事。您可能会发现自己尝试像往常一样努力控制自己的原因的原因可能是因为您正在实施某些问题,而这些问题早在进入过程的给定阶段之前就已经解决了。有很多方法吗?我就是这个意思。

诊断?

我认为对空间意识的关注已得到很好的解决。无论您在这方面做出什么决定,我都会重新讨论一下ADD,尤其是如果您第一次不愿意这样做的时候。这绝对听起来像是高度专注变得极端。最终,让对编码的热爱驱使您找到缓解这些问题的方法,并且我希望您的职业生涯会很好。


3

在开始看到模糊效果之前,您需要工作几个小时?我对工作4熟悉的许多普通程序员都可能是喝咖啡或午餐之类的5个小时。我读过的此类冲刺中最长的一次是当Guy L Steele和Richard M Stallman在编写Emacs时进行了大约10个小时的冲刺时。斯蒂尔继续说,他不想再做这么长时间的冲刺。

如果您不熟悉(少于5000小时)(这个数字来自Peter Norvig在十年内学习编程的职位,将他建议成为专家程序员的10000小时减少了一半),这听起来非常正常,但您需要休息几天的部分除外。也许您正在筋疲力尽,使自己需要这么长时间的休息?


我认为我没有超过2000个小时的经验,尽管这并不是我一直跟踪的目标。同样,需要几天(阅读;两天)的休养也是很罕见的。前几天,我只需要睡个好觉即可解决第二天的问题,但我可能工作时间太长,试图克服这种困惑。如果我保持足够长的时间,我肯定最终需要花几天的时间才能使代码以崭新的眼光看我的代码,并立即看到我在犯的愚蠢错误。花费了数小时才能完成的工作,实际上只需要15分钟就可以完成上述工作。
natli 2012年

1

根据您的描述,您的问题可能有多种原因:

  • 经验不足

  • 失去焦点/疲劳

  • 空间能力低

经验不足可以通过...解决,基本上可以获取更多经验。无论听起来多么明显,通过进行更多的练习,您会更加频繁地发现自己处于复杂的编程情况中,并将逐步学习如何处理它们。现在,您可能缺乏思维模式和反应力,无法建立正确的联系,得出正确的结论并解开这些情况,这可能会让您觉得自己很慢,编写“过时的代码”,但是这些解决问题的模式将逐步随着经验的增加,大脑会发生变化(据我了解,您只有22岁,还很年轻)。

有多种技术可以改善您的注意力。Pomodoro“完成工作”是两个示例。在编程领域,我也强烈建议您进行“测试驱动开发”,因为它会迫使您一次专注于一个小的,可实现的目标(婴儿步骤)。使用TDD方法,您不太可能“将函数放到它们真正不属于的类中”,因为您被迫通过测试明确定义类的职责,然后仅在编写代码时专注于实现它,而不是在几个班级之间跳转并一点一点地随机填充。

通过采用经常休息的可持续节奏可以避免疲劳和注意力下降。您可能会对Linda Rising的演示文稿感兴趣,因为他尊重我们的大脑以提高工作效率:“ 生而为周期”

至于低空间能力,恐怕您对此无能为力。但是,艰苦的工作可以减轻它的负担,这远非编程所需的唯一技能。诸如创造力,激情,热情,严谨,分析能力,敏锐度,对业务问题的良好掌握,协作能力等东西,可以弥补比普通的代码库弱的弱点。

简而言之,您需要的IMO是:

  • 学科

  • 实践

  • 可持续的步伐

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.