您对学习思考有何建议?[关闭]


22

首先,这不是通用的“使我成为一个更好的程序员”问题,即使提出该问题的结果似乎与此类似。在程序员SE上,我已阅读并看到它们在这里这里这里这里这里关闭。

我们都知道,有许多通用的建议可以磨练您的编程技能(例如,阅读SO,阅读推荐书籍,关注博客,参与开源项目等)。这不是我所追求的。

我也感谢这个网站上活跃的读者群,并希望它能产生一些很好的答案,从而对我有利。通过阅读此处的通讯,似乎有大量有经验的人正在从事或从事与编程有关的领域。你们中的大多数人都可以雄辩,简洁地表达思想。

我最近注意到,有一定编程能力的人和有真正思维能力的程序员之间的区别。我拒绝相信,要想成为一名优秀的程序员,我们只会屈服于一生的海绵状行为(即通过阅读,聆听,观看等吸收与我们领域相关的一切)。我什至要声明,仅仅了解每个编程概念,它就能使您比周围的每个人更快地解决问题X,如果您无法考虑,您将极大地限制自己-您只是一个快速的机器人。

我想相信,成为一名优秀的程序员还有另外一面,与您对编程的了解程度无关,但是您可以将新概念交织在一起并将其应用于您的编程职业或爱好是多么出色。我还没有看到任何人研究或解决过人类思维和编程的这个方面。(是的,我看上去也可能不够努力-抱歉。)

因此,对于那些花时间思考我上面提到的内容的人-也许是每个人都在这里,因为我的个人/专业发展有些落后- 您对学习如何思考有何建议?除了通常的阅读方法之外,您还做些什么比您/我们领域中的其他人更好?


你应该像我一样思考,因为我很棒。
2011年

做一些像史蒂夫·乔布斯一样的毒品。
Job

函数式编程教人思考。一切都教编程;)
Dario

Answers:


13

我对学习思考的建议:

  • 学习新语言。自然语言和编程语言。总是有一种新的语言可以学习。用语言来完成思考要少得多。每种语言在思考上都有不同的“观点”。您可以使用更多的语言,更多的“心理工具”,概念,观点和抽象。

语言决定了我们的思维方式,并决定了我们可以考虑的事情。” -本杰明·李·霍夫

更重要的是,语言决定了我们无法考虑的事情。

  • 认真阅读。广泛阅读。不只是编程,还包括历史,社会学,生物学,艺术等。拓宽您的视野。获得新的见解。您不仅在吃东西,而且还是阅读的东西。新的想法更多地是关于将两个(看似)不同的想法结合在一起,而不是无处不在的神圣创造力。

“机会偏爱有准备的人。” -路易斯·巴斯德(Louis Pasteur)

  • 谦虚。您必须了解很多,才能了解很少的知识。谦虚有助于保持思想开放,以崭新的方式思考。
  • 问为什么?不要满足于方式。
  • 学习数学。一个非常强大的工具,一种语言,可以处理逻辑和抽象。学习数学可以增强您的大脑。心理上等同于“去体育馆”。

我不太确定使用自然语言。学习它们具有价值,但是对于思考呢?在编程环境中?单词思考的价值有时被夸大了-我们可以拥有无​​法用单词轻松表达的思想,因此我们并不完全依赖单词来形成思想。而且,在语言之间大量共享最相关的词汇表(数学和其他技术领域的术语)。
Steve314 2011年

6

根据我的经验,它可以归结为两点:

  1. 热情,如果您对工艺感兴趣,您将比其他在现场工作的程序员学习,适应,跳出框框思考。(其中一些在家中没有计算机。)
  2. 有些人刚出生时就有能力解决技术问题。有些人自然有能力抽象出灵活的解决方案。

除此之外,每个人对编程的看法或学习新编程技能的方式都大不相同。我建议您继续尝试新事物,并保持对自己有益的事物。


好点,特别是第二点。
2011年

5

您对学习思考有何建议?

实践。实践。实践。

认真地说,精神活动(即思考)就像身体活动一样。您做得越多,就越能做到。(实际上,体育锻炼也涉及一种精神活动。顶级运动员不仅将肌肉放在正确的位置...)

那么,您将如何(有效)练习思维?

(在这里,我从其他方面进行概括...)

我认为您将识别出您认为困难(但并非并非不可能)的思考问题,并尝试解决这些问题(仔细思考它们),并且更喜欢它们。


我对此表示支持。每当我执行不需要思考的重复性操作时,我都会在考虑其他事项。在做一些我应该考虑的重复性事情(例如开车)时,我也倾向于这样做,但是以某种方式,当我不考虑它时,我感觉自己会变得更好。
Earlz 2011年

1
@Earlz-我不明白你的意思。如果您要进行重复性操作,则无需考虑。我说的是练习解决需要思考的问题。
斯蒂芬·C

经验比一切都重要(我知道是一般性的说法),但是随着时间的推移,您会学到东西,我的意思是,遇到问题的频率使您永远无法解决,只是再次遇到问题并在几分钟内得到解决。同样,它也是您解决问题的方式,不着重于被困住,始终专注于我还没有尝试过的东西,从最简单到最复杂
farinspace

刻意练习。您需要从每次迭代中学到一些东西。

4

您可能对以下两件事感兴趣:

匈牙利心理学教授MihályCsíkszentmihályi介绍了流动的概念。

流动是一种心理状态,在这种状态下,一个人在活动过程中完全沉浸在充满活力的专注,全神贯注和成功的感觉中。

我很幸运能够使用我从GTD的应用中学到的旧技术每天进入流程,这是下一个动作

我可以告诉你,这确实有所作为。当我处于流程中时,与不处于那种状态时相比,我可以产生更高的质量和速度。我完全专注于我的工作,因此我认为更有效。

正念

不久前,我问了一个关于冥想的问题,因为我担心冥想会降低我的编程(和创造力)能力。

我刚刚开始进行Jon Kabat-Zinn方法培训,所以现在与您分享广泛的经验还为时过早,但是到目前为止我所学到的很少,我可以告诉您这可能是您想要做的事情。


+1尽管我讨厌有一本书和完整的“理论”来解决问题,但这是常识。
2011年

1
@Orbling:哦,我对此完全同意。但是像大多数书籍一样,它也有废话和价值。什么是垃圾和价值取决于谁在读书。GTD的问题在于它是如此强大,如果您不花时间减少输入而不是专心于管理它的大小,它可能会使您感到沮丧。那是我的错误;)

我一生中存在的问题是,有太多的投入而且要做的事情太多,以至于我没有时间执行任何此类程序。虽然我当然可以看到其中的价值。
2011年

1
@Orbling:我认为那是关键。在Covey或GTD之上,过滤输入是最终的生产力技术。它需要在精神上非常坚强。

我发现它需要其他人来完成您过滤掉的任务,大声笑。
2011年

2

我一直相信好的工程师是天生的,而不是天生的。

您需要它的思维定势,逻辑的,分析的,演绎的思维,再加上要高效地获得问题的概述和结构化视图并快速从A转到B所需的毅力和好奇心,将您的思维贯穿于整个过程解决方案。

大量研究表明,早期对此类事物的良好接触极大地提高了该技能,音乐也有帮助。在某个时间点之后,您的思维导图就很难连接了。不来讲什么,你想,但怎么你的想法。

你能学会成年后如何思考吗?好吧,当然可以教给您解决问题的技巧,但是随后您有了可以遵循的算法,就可以雄辩地成为一个非常“快速的机器人”。直觉的理解可能是天生的。

这绝不仅限于我们的专业,很多技能集是由先天技能而不是后天获得的响应所主导。人们可能不希望这是真的,但很可能是这样。


2

在您感兴趣的地方找到在线论坛。有某种社区的东西。最好不要编程-编程论坛通常更注重解决方案而不是讨论。站起来 保卫它。使用参数。您也可以写博客,但拥有对手会更好。关键是要与某人进行有意义的书面交流。在这里交换更大的文本。

您将学习交流您的想法并进行论证。由于您必须捍卫自己的观点,因此您必须以事实为依据。您必须考虑一些事情,阐明自己的立场并予以支持;甚至可以改变它。

然后,利用该功能分析问题并综合意见并将其应用于任何事物。甚至编程。


我应该说,这是练习思维的一种方式。这不是唯一的。
Domchi'2

2

我想到的一件事是,需要将事物视为系统,并且所有系统都是相关的。宇宙中的每一个人。人类,行星,星系,植物,阳光,光合作用,昆虫,岩石,海洋以及所有相互作用的系统。同样,在时间上,周期是:虫子,人,文明,山脉,恒星系统的诞生,生长,衰变,死亡。无休止的能源斗争。所有系统。

这就是对生命与自然的研究。查看所有相关的事物,查看所有相互作用的事物。专注于此,当您观看日落并感觉到使我们绕着太阳旋转的引力深度,将我们拉到行星表面以及逐渐变红的日光直射之前,它以每秒300,000,000米的速度进入视网膜并成像在灵长类动物的大脑中。

当您开始思考这一点时,一切之间的关系如何,黄金与奴隶的价格以及太平洋地区的风暴和日本的工业园区如何相互关联,您就花了很多时间,花时间坐下来,考虑所有这些,然后您的思维“肌肉”就会真正弯曲并成长。

现在,其中很多将低于表达能力的门槛,但不要因此而阻止您。您的大脑比最强大的计算机更强大。推它。我认为不可能超频。

我想起了一张黑白照片,上面写着阿尔伯特·爱因斯坦躺在沙滩上的椅子上,看着大海。字幕说:“这里是爱因斯坦(Albert Einstein)的大脑。”

下一个挑战是能够以一种简单的方式传达万物的复杂性和相互依赖性。这将使您可以做的事情直到您很老为止。


2

一种方法是刻意练习

简单的重复并不会导致技能的提高-您需要内省,评估自己的表现,确定做事更好的方法。

插图:我的近亲参加手枪射击运动。在训练过程中,很多注意力都集中在检查每个镜头上,着重于正确执行的步骤。从直觉上来说,没有太多的注意力会落在糟糕的镜头上,因为重播(排练)错误会加剧错误。

仅在范围内射击100张就什么也做不了。故意射击20发会增强良好的习惯,并导致更好的表现。

同样适用于编程- 考虑您的工作。不要每月,每周或每天这样做-一点一点地,一步一步地做。

  • 为什么该缺陷在我的代码中发生?
  • 我如何避免造成该缺陷?
  • 我如何更快找到解决方案?
  • 我的哪个假设是错误的?
  • 我是否足够快地寻求帮助?太快?
  • 我以前犯过这个错误吗?
  • 这个缺陷是孤立的还是模式的一部分?
  • 是否存在潜在的设计缺陷?
  • 如果是这样,我能做些什么吗?

等等 ...


好一点,所有这些都伴随着时间/体验
farinspace

1
@farinspace,仅当您在每次迭代后花时间评估和学习时。

1

戳一下您喜欢的东西,直到找到优势。

深呼吸,

过来...

...

...告诉别人你发现了什么。


1

所以你想

其他海报上的很多关于如何思考或如何学习思考的绝妙建议:流程,正念,数学,热情,实践...所以我不会去那儿,地面覆盖着。

但是为什么呢。目的是什么?

我个人已经明白,在您认为自己需要知道原因之前。
最好的唯一方法就是听和看。(我将两者作为一个单元,您无法将它们分开)

更好地进行编程的唯一方法,无论是收集需求,将这些需求转换为详细的系统规格,将其与设计文档进行匹配,实施代码,调试您的宝贵生命,无论您跳过这些阶段中的任何一个还是全部,无论您有五分钟的时间来找到解决方案还是20年的时间,您都需要倾听并观察。

听用户想要的内容,听用户告诉您发生了什么,听支持人员告诉您他们看到了。听。即使没有意义,也要听。即使您确信他们错了,也要听。听而不是判断。

寻找线索,而不是通过搜索,而是睁开眼睛。看现实。在查看犯罪现场之前,您无法开始寻找答案。在证明缺陷之前,您无法找到解决方案。

我的一个例子(关于错误的解决方案,但实际上它可以适应任何情况)。出于明显的原因(合法的和其他的原因),我将不提供任何细节。在安全关键系统上,操作员报告存在严重缺陷。某些地理跟踪设备实际上在“不应”时会丢失跟踪,这可能会对生命造成影响(此“应”是真正的错误,使我们的调查停滞了太长时间)。幸运的是,尽管这几乎是在几周后偶然发现的,因为在远程位置正在运行另一个系统,另一位操作员来证明该系统没有丢失跟踪。这让我们再次思考。我们的主要软件供应商不敢相信我们,因此我们不得不出去证明这一点。唯一的方法是通过嫁接:建立模拟以复制确切的操作情况。我们必须实际录制证明供供应商相信我们的证据。最终,模拟产生了超出我们希望的信息,并使我们理解了整个问题。此后不久修复。

我们到达终点的唯一方法是将一个远程系统与另一个完成相似但又不完全相同的工作的逻辑连接。这就是寻找线索(看)。只有通过信任一次报告,而不是将其视为系统中的随机故障,才可以做到这一点(听),然后再次听到与第一次报告相抵触的第二个报告(听)。

因此,当您有了正确的线索(倾听和看过),定义了问题区域,了解了根本原因或关键原则后,便可以考虑首先进一步理解的解决方案(试验和错误,模拟,演示,概念验证,模拟,alpha,beta版本),并最终提供了可靠的解决方案(有时可以在一些实际操作中进行进一步改进)。

能够进行这样的倾听和观察需要开放的胸怀,信任和对目标的绝对奉献。这是您需要思考的动力,或更重要的是让您的思考重点放在正确的目标上(通常问题不是无法思考,而是缺乏明确的目标来锻炼自己的思想)。


为您的答案+1,研究您的问题领域并听取用户的意见至关重要。尽管-1为“是的对”评论,所以没有变化。
2011年

@Orbling:好的,你是对的,那有点过分了。评论已删除。我认为先天人才不对,但不必提。
asoundmove 2011年

好吧,如果您的答案是-1,那么我会以相同的方式标记您的答案,但现在已解决了这个问题。如果您不同意我所说的话,可以说是错误的。
2011年

@Orbling,不,我不愿意为任何人投票-1,我只想继续前进...只有极端情况才需要-1,只是不同意。
asoundmove 2011年

我同意其他网站上的内容,因为它们在主要方面是对还是错。Programmers.SE与其他程序员不同,因为它是主观的,所以投票基本上是一致同意,不同意。您是否认为这是有帮助的还是无用的。如果我强烈不同意某人,我只会投反对票。在撰写本文时,我的投票率为2.6%。毕竟,意见应受到挑战。
2011年

1

我认为您需要区分不同类型的思维。

创新思维-如何提出新想法,创新解决方案和意外结果。这背后有一门完整的科学知识,例如爱德华·德·波诺(Edward de Bono),创造力技术等。

分析性思维-我的意思是科学过程。查看输入,输出,衡量重要内容,得出合理的结论。大多数开发人员都熟悉科学技术,但从未真正使用过它。这样做!

批判性思维-我认为这是更多的哲学。退后一步,看看更大的图景,回顾一下您的假设,您真的按照您的价值观去做吗?学习哲学的地方有很多伟大的作家和思想。


0

数学教一个如何思考。应用程序需要创造力和经验。

我拒绝相信,要想成为一名优秀的程序员,我们只会屈服于一生的海绵状行为

很好的见识。粗略地说,“伟大”的要求取决于您对“伟大”的个人定义...并且随着时间的推移而发生了变化。今天,项目的成功在于能够快速地将概念拼凑起来,而不必深入研究所有棘手的细节。个人成功可以定义为像Jon Skeet一样精通C#。

阅读工作中的编码器。比我详细讨论的经验更多的编码人员。


0

尝试从看似无关的领域应用想法和概念。对我而言,iPod的辉煌并不是制作出色的MP3播放器的背后工程,而是帮助解决了音乐娱乐业在盗版音乐和CD /专辑销售音乐模式方面遇到的巨大问题。乔布斯可能将他在皮克斯大学学到的更多东西运用到了电影界。他知道真正的问题是什么。

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.