少侠留步!这有一篇关于解决问题的秘籍送给你💎~

少侠们好~

今天和大家分享一篇关于如何解决问题的文章,原文是英文的,翻译它的原因是因为解决问题对于每个人来说都是很重要的技能,在很多地方都会用到,所以就翻译过来了,仅供交流学习使用,如有版权问题请联系我删除,翻译不好的地方多多谅解,英语好的少侠们可以点击原文链接去查看原文。

------------------------------我是分割线------------------------------

如何像一个程序员一样思考?(How to think like a programmer)

文章来源:Medium(点击查看原文)

原作者:Richard Reis

翻译:天辰dreamer

如果您对编程感兴趣,之前可能看过这段话:

“每个人都应该学习编程,因为它教你如何思考。” - 史蒂夫乔布斯

那么,你可能会想,像程序员一样思考是什么意思?又该怎么做呢?

从本质上讲,它是关于如何更有效的解决问题。

在这篇文章中,我会和你分享这些方式。

到最后,你会知道如何通过一些步骤从而成为更好的问题解决者。

为什么这很重要?

因为解决问题是一门必须的技能。

我们每个人都会遇见各种各样的问题,大问题,小问题,但是,大多数时候,你都会很随意地处理他们。

或者说,你有一些基础的解决问题的办法。(这是我开始所做的):

尝试某个解决方案。 如果没有效果,就尝试另一个。 如果还是没有效果,重复步骤2直到运气好为止。

如果你运气好,你就能找到解决办法,但是,这可以说是最糟糕的解决问题方式了,也特别浪费时间。

最好的方法通常都包含有一个大的框架和实践。

“几乎所有雇主都会首先优先考虑解决问题的能力。 解决问题的技能几乎是雇主关注的最重要的能力......比编程语言的熟练程度,调试和系统设计都重要。”

计算机思维或者说是知道如何分解大型复杂问题的能力几乎和你工作所需的基础技能一样重要。— Hacker Rank (2018 Developer Skills Report)

找到一个框架(Have a framework)

为了找到合适的框架,我遵循了Tim Ferriss在“ 4小时厨师 ”书中提到的建议。

在此基础上,我采访了两位令人印象深刻的人, 第一位是C.Jordan Ball,他是Coderbyte上排名第一或第二的人,超越了65000的用户。 第二位是 V. Anton Spraul,《Think Like a Programmer: An Introduction to Creative Problem Solving》的作者。

我问了他们相同的问题,要不要猜一下是什么问题?他们的答案非常相似!

很快,你就会知道是什么。

注意:并不是我们应该以完全相同的方式做事,每个人都是与众不同的,你也是,但是如果你提前了解一些优秀的想法,可能会让你进步得更快。

“我发现新程序员容易犯下的最大错误就是专注于学习语法,而不是学习如何解决问题。”

-V. Anton Spraul

那么,当我们遇到新问题时到底应该怎么做呢?

这里有一些步骤:

1.深入理解

弄清楚问题的本质,大多数时候,你觉得问题难是因为你没有真正理解它。(这也是为什么这是第一个步骤)

那么我们如何知道是否真正理解了一个问题呢?

试着用通俗的话把它描述出来。

当你试着解释一个你被卡住的问题时,你通常会发现你逻辑中的漏洞。

大多数程序员应该都理解这种感觉。

这就是为什么你应该记下你的问题,画一个涂鸦图,或者和别人讨论它。

“如果你不能用通俗的语言解释某件东西,那么就说明你不理解它。”

--费曼

2. 制定计划

不要试着在没有计划之前就去解决问题,不要总是稀里糊涂地去完成一件事。

通常明确的步骤才能够帮助你解决问题。

在编程中,也就意味着不要直接就开始写代码,先分析问题,获取足够的信息。

为了得到一个好的计划,试着回答这个问题:

“如果输入值是X,为了获得结果Y,有哪些必须的步骤?”

注意: 程序员通常有个很好的工具,注释!

3. 拆分问题

注意了! 这是最重要的一步。

相信我,如果你一来就试着想直接解决掉一个大问题,你可能会哭的。

相反,将其分解为一个个子问题,这些子问题通常更容易解决。

然后,逐个解决每个子问题,从最简单的开始,最简单的意思是你基本知道它的解决办法。

当你解决了所有子问题之后,就开始把它们组合起来。

通常,当你把所有子解决方案组合起来后,它就是你最开始那个复杂问题的答案!

这种方式是解决问题的基石,你一定要记住它(如果有需要,请再次阅读此步骤)。

“如果我可以教给每个新手程序员一个解决问题的技能,它就会是‘拆分问题的技巧’。

例如,假设你是一名新手程序员,现在让你编写一个程序,用来读取10个数字,然后找出第三大的数字,对于一个新程序员来说,这可能是一个比较困难的任务,即使只需要基本的编程语法。

所以,如果你遇见了困难,你应该试着把问题先转化成更简单的问题,比如,先试着如何找出其中最大的数,如果还是比较困难,那么试着只在3个数字中找出最大数,还是比较困难?那就试试只从2个数字中找吧!

不断降低问题难度,直到你可以完成为止,然后,在这基础上,反过来不断增加难度,直到回到最初的问题。”

——V. Anton Spraul

4. 被问题卡住了?

到目前为止,你可能会想: “嘿,天辰,你说的听起来不错,但是,万一我还是卡住了怎么办?即使是子问题也解决不掉怎么办?”

首先,先深呼吸一下,然后告诉你自己,这是正常情况。

不要担心,少侠,每个人都会遇见这种情况。

不同之处在于,卓越的程序员或问题解决者在遇见问题时,通常是感到好奇,而不是愤怒或沮丧。

事实上,在你面对棘手的问题时,下面这一些方法通常会很有用:

调试: 一步一步测试你的解决方案,试图找到出错的地方。

“调试的艺术是让你弄清楚你的程序到底在做什么,而不是你认为它应该在做什么。”

重新评估你的问题: 回过头来重新看看你的问题,从另外的角度观察一下,看有没有其他更通用的抽象方案。

“有时我们会在问题的细节上迷失方向,而忽略了更一般的层面上的解决方案。”

这个经典的例子是求一长串连续整数的总和,1 + 2 + 3 + ... + n,年轻的高斯很快就发现了它的结果是n(n + 1)/ 2,从而避免了一些不必要的过程。” - C. Jordan Ball

另一种重新评估的方式是从头再来,删除所有内容,然后重新开始,没有开玩笑,这种方式的效果可能会出乎你的意料。

找寻资料:谷歌,百度,通常你遇见的问题,其他人也遇见过,可能某些人已经解决掉了,参考一下他们的方案,甚至你可以在已经完成后继续查看其他人的方案,这样可以帮助你从不同的角度去理解它。

警告: 最好不要一开始就直接搜寻最终答案,查找一些可能会帮助你解决问题的相关资料,为什么?因为你只有自己亲自经历过,你才能学到东西,如果你没学到任何东西,你就是在白白浪费你的时间。

实践

不要期望能在一周内就编号,如果你想成为一个优秀的问题解决者,就要解决很多问题!

实践,实践,不断实践。在不断实践之后,意识到某些问题原来可以有更简单的解决办法只是时间问题。

那么该怎么练习呢? 你有很多选择可以尝试:

国际象棋谜题,数学问题,数独,围棋,在线练习,等等。。。

事实上,成功人士有一个共同的模式,那就是它们都有“解决微观问题”的习惯。

例如,彼得·蒂尔会下棋,埃隆·马斯克喜欢在线游戏。

“巴伦李维斯说:如果你想看那些商业领导人在三五年后会是什么样子,看看在线游戏的发展。

快进到现在,埃隆马斯克,里德霍夫曼,扎克伯格和其他许多人都说过,游戏对于它们建立一个成功的公司起了很好的基础作用。”

-- Mary Meeker(2017年互联网趋势报告)

这是意味着你应该只玩在线游戏吗? 不是!

那么在线游戏的作用到底是什么呢?是解决问题!

所以,你要做的应该是找到不断练习的机会,找到可以让你解决许多微观问题的机会,理想情况下,会是你喜欢的东西。

例如,我喜欢编程挑战,所以,每天,我都会尝试至少解决一个挑战(通常是在Coderbyte上)。

就像我说的,所有问题都有相似的模式。

结尾

现在,你应该知道“像程序员一样思考”是什么意思了。

你也知道了解决问题是一项令人难以置信的基础技能。

最后,记得不断找寻能够让你实践的机会。

是不是很酷?

最后的最后,我希望你能够遇到很多问题。

至少,现在你知道如何解决他们了!~

“每当你解决一个问题后,就会遇见一个新的问题,这就是生活中有趣的地方。 生活就是一个不断突破障碍的过程,一个让我们必须不断打破自我限制的过程。 每一次,你都会有收获新的东西,力量,智慧,还有眼界。 每一次,你超越一部分竞争对手,直到最后,当所有人都在你身后时,你成为了最好的你。(the best version of you)”

—Ryan Holiday (绝处逢生的艺术)

祝你好运

谢谢阅读!:blush:如果你喜欢它,测试一下能在5秒内击中左边的大拇指多少次,这可以给你的手指做下有氧运动,并有助于其他少侠看到这个故事。

------------------------------我是分割线------------------------------

额外资源:

除了这一篇文章,Edx上有一门叫做的Effective Thinking Through Mathematics的课程,也是一门关于思考和解决问题的课程,比较有趣,同时在课程中也有5个很不错的技巧,这里就一起分享给大家了。

5种让你更高效思考的方式(Five ways to think effectively)

1. understand simple things deeply. 深入理解简单的事

Don't face complex issues head-on;first undertsand simple ideas deeply.Clear the clutter and expose what is really important. Be brutally honest about what you know and dont't know.Then see what's missing,identify the gaps,and fill them in.Let go of bias,prejudice,and preconceived notion.There are degress to understanding(it's not just a yes-or-no proposition) and you can always heighten yours.Rock-solid understanding is the foundation for success.

不要总是一开始就去理解很复杂的事物,先深入理解简单事物,试着清除掉无关紧要的部分,找出真正重要的元素,诚实面对你真正理解和不理解的事,认清你的缺点并想办法弥补,抛弃掉偏见和先入为主的思想,很多事情并不是简单的yes或者no,你总能从中学到一些东西,深入理解事物是成功的基础。

2.make mistakes. 学会犯错

Fail to succeed.Intentionally get it wrong to inevitably get it even more right.Mistakes are great teachers - they highlight the unforeseen opportunities and holes in your understanding.They also show you which way to turn next,and they ignite your imagination.

从失败到成功,在某件事上有意犯的错会无形中使这件事变得更正确,错误是很好的老师,它使一些你不确定的事情逐渐变得清晰,告诉你某些事物是错的,告诉你下一步该怎么走,帮助你打开脑洞。

3.raise questions. 提出问题

Constantly create questions to clarify and extend your understanding.What's the real question?Working on the wrong questions can waste a lifetime.Ideas are in the air-the right questions will bring them out and help you see connections that otherwise would have been invisible.

不断的提出问题并寻找答案能够增强你对事物的理解,什么是我真正需要弄清楚的问题?在错误的问题上耿耿于怀可能会浪费你的整个人生,一些创意和思想通常会不经意间在你思考问题时出现,帮助你看清事物之间的关系,而平时你可能对这些关系视而不见。

4.follow the flow of ideas. 跟随你的想法。

Look back to see where ideas came from and then look ahead to discover where those ideas may lead. A new idea is a beginning, not an end. Ideas are rare - milk them. Following the consequences of small ideas can result in big payoffs.

多回头看看你上一个想法,试着从它的基础上挖掘出更多的想法,一个想法的产生只是开始,而不是终点,追随一系列小的想法可能会给你带来巨大的回报。

5.change 学会改变

The unchanging element is change - by mastering the first four elements, you can change the way you think and learn. You can always improve, grow, and extract more out of your education, yourself, and the way you live your life. Change is the universal constant that allows you to get the most out of living and learning.

从未改变的事情就是事情总在不断的改变,遵循上面的4个原则可能会改变你的思维和看待事物的方式,除了你在学校接受到的教育之外,你也能够通过你的努力去提升,去成长,去超越你自己,以及改变你生活的方式,改变是个不变的话题,通过改变,你才能从你的生活和学习中获得更多有价值的东西。

一些你可能关心的问题:

1、干嘛要在标题上放一个钻石?

因为这样看起来可能更有价值一些,内容不够,标题来凑,哈哈。

2、我已经看过了很多类似的关于软技能的文章,不过一直比较疑惑的就是,这些技巧真的有用吗?

软技能这个东西一时半会儿确实不好衡量,不过就少侠我个人感觉来说,还是很有用的,虽说比起硬技能可能没有那么直观,但是如果在大家硬技能都差不多的情况下,软技能好就有优势了,而且,掌握某些软技能,可能也对你掌握某些硬技能有帮助,所以,多了解些东西总没错!

(如果你是看过天辰的救赎的几个人之一的话,你可能会关心。。。)

3、天辰dreamer,我认得你,你不是在写天辰的救赎吗?干嘛不写了?放弃了?

好吧,我承认这件事情上短期算失败了,用写小说的方式写技术文章难度比我想象的大很多,比较费脑(怕秃顶,不想变强),而且很费时,再加上文笔不太好,所以综合考虑后,转行新的方式了,希望各位少侠多多理解。。。。

4、天辰,你戏真多,这次又打算写(翻译)几篇放弃啊?

不知道,这次我尽量坚持下去。。。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章