为什么有时候自己的心态像问题,不用像以前一样找那些人问就能解决

登录后可以修改学习阶段哦!

我們将为你推荐相关课程

以下是否还有你感兴趣的内容

编者按:职场或者人生最重要的技能是什么老板最看重的是什么?解决问题的能力如何培养解决问题的能力?这事儿也许需要从程序员身上吸取经验否则的话,你鈳能就会像个没头苍蝇一样乱打乱撞Richard Reis总结了程序员的思考方式,并且给出了你如何像程序员一样思考的步骤

如果你对编程感兴趣,你吔许之前已经见过这句话:

这个国家的每个人都应该学会对计算机进行编程因为它教会你如何思考。

你可能会在想这究竟是什么意思潒程序员一样思考?怎么才能做到呢

基本上这一切与更有效地解决问题有关

本文的目标就是教会你这种思考方式.

看文本文之后,你將会了解到成为更好的问题解决者究竟需要哪些步骤

我们都有问题。无论大或小不过有时候我们解决问题的方式可是有点随意。

除非伱有一套系统否则的话你“解决”问题的方式大概是这样的(我开始编码时就是这样):

尝试一种解决方案。如果这种解决方案无效洅试另一种。如果还是没有用重复第二步直到你走运。

你看有时候你会走好运。但这是解决问题最糟糕的方式!而且非常非常浪费时間

最好的方式涉及到a)有一个框架,以及b)练习之

几乎所有的雇主都优先考虑问题解决技能。问题解决技能几乎毫无疑义是雇主寻求嘚最重要的资质……比编程语言能力、调试能力以及系统设计能力都要重要证明计算思维或者***大型复杂问题的能力与工作需要的基夲技术技能一样重要(如果不是更重要的话)

为了找到合适的框架,我是按照Tim Ferriss有关学习的书《4小时大厨》里面的建议来做的

这让我访谈叻两位令人印象非常深刻的人:C. Jordan Ball(在Coderbyte的65000+位用户中排名1、2)以及V. Anton Spraul(《像程序员一样思考:创造性问题解决的介绍》的作者)。

我问了他们同樣的问题你猜怎么着?他们的回答都非常相似!

很快你也会认识他们的。

旁注:这并不意味着他们每一件事的做法都一样每个人都鈈一样。你也会有所不同但如果你从我们都同意是好的原则开始的话,你取得更大突破会快很多

我发现新程序员的最大错误是关注于學习语法而不是学习如何解决问题

那么,遇到新问题时你会怎么做呢

准确了解被问的是什么。大多数疑难问题之所以难是因为你不理解問题(因此这就是为什么这是第一步的原因)

怎么才知道你什么时候理解了问题了呢?当你能够把问题说清楚的时候

你还记得问题卡住的时候,你开始解释问题然后马上看到了此前看不到的逻辑漏洞的时候吗?

大多数程序员都知道这种感觉

所以这就是为什么你应该紦问题写下来,画张图或者把问题告诉某人(或者某物……有的人会利用橡皮鸭)的原因。

如果你不能用简单的语言解释一个东西你僦没有真正理解它。

不要在制订计划之前就匆忙投入到问题解决当中(然后指望自己能像没头苍蝇一样找到出路)先计划好你的解决方案!

如果你不能写下确切的步骤的话,没有东西能帮到你

在编程中,这意味着不要一言不发就开干要给你的大脑一点时间来分析问题囷处理信息。

要想制订出好的计划请回答这个问题:

“在输入为X的情况下,返回输出Y的必要步骤是什么”

旁注:程序员有很好的工具幫助他们做好这个……评论!

注意。这是最重要的步骤

别想着解决一个大问题。你会哭的

相反,要把问题***成子问题这些子问题解决起来要容易多了。

然后一个个地解决这些子问题从最简单的开始。最简单意味着你知道***(或者更接近***)

之后,最简单意菋着这个被解决掉的子问题并不依赖于其他被解决的问题

一旦你解决了每一个子问题,再将点连成线

把你所有的“子解决方案”连接起来就能得出原先问题的解决方案。祝贺你!

这一技巧是问题解决的基石记住它(如果没记住,请把这个步骤再读一次)

如果我要教給新手程序员一个问题解决技能的话,这个技能会是“问题***技巧”比方说,假设你是一名新程序员有人要你写一个程序读10个数字並找出第3大的那个。对于菜鸟程序员来说这可能会是一个艰难的作业,即便这只需要基本的变成语法如果你卡住了,就应该把问题***为简单一点的东西与其寻找第三大的数字,何妨先找最大的数字呢》还觉得困难那在3个数里面找出最大的数字呢?或者两个数中较夶的那个把问题***到你之大如何去解决的程度然后写下解决方案。把把问题稍微扩展一下重写解决方案来跟问题匹配,一直这么做直到你回到原先的起点。

不过你可能会想“嘿Richard……这的确很酷,但如果我连子问题也没法解决又该怎么办呢”

首先,深呼吸一下其次,这很公平

但请不要担心,朋友每个人都会这样!

不同的是最好的程序员/问题解决者会对bug/错误更加好奇而不是感到气愤。

实际上在遭受打击时这里有三件事情是需要你尝试一下的:

调试:一步步仔细检查你的解决方案找出什么地方出问题了。程序员称之为调试(實际上所有的调试工具都要做这个)。

调试的艺术在于找出你告诉程序要做的究竟是什么而不是你以为你告诉它做的是什么

再评估:后退一步换个角度审视问题。有没有什么东西可以抽象为更通用的方法

对于问题有时候我们太过只见树木不见森林以至于忽视了从更普遍的水平上解决问题的一般原则。[……]当然这个的典型例子是一系列连续整数之和,1+2+3+…+n这个问题一位年轻的高斯很快就能意识到***昰n(n+1)/2,从而避免了必须把一个个数加起来的麻烦

旁注:重新评估的另一个办法是重新开始。删掉一切再次用崭新的眼光开始我是认嫃的。你会对这种办法的有效性目瞪口呆

调研:啊哈,就是上Google去google一下没错。不管你有什么问题可能都已经有人解决过了。找到那个囚/解决方案实际上,哪怕你已经解决了问题也要去查查看!(你可以从别人的解决方案中学到很多)

警告:不要想寻找大问题的解决方案。只去找子问题的解决方案为什么?因为除非你拼尽全力否则就不会学到任何东西。如果你学不到任何东西那就是在浪费时间。

别指望一周之后你就会变得很棒如果你想要成为一名好的问题解决者,那就解决很多问题先!

练习、练习不断地练习。这样下去你意识到“这个问题很容易就能用[在此处插入概念]加以解决”就只是个时间问题。

如何练习选项太多了!

国际象棋迷局、数学难题、数獨、围棋、地产大亨游戏、视频游戏、cryptokitties等等等等……

其实,成功人士的一个共同模式是练习“微观问题解决”的习惯比方说,Peter Thiel下国际象棋Elon Musk玩视频游戏。

Byron Reeves说“如果你想知道3~5年后商业领导力是什么样那就看看在线游戏发生的事吧。”回到现在Elon、Reid、扎克伯格等人都说游戏昰自己创业取得成功的基础。

这是否意味着你就应该去玩视频游戏呢完全不是。

但是视频游戏是干什么的呢对了,解决问题!

所以伱应该做的是找一个合适的地方去练习。

比方说我喜欢变成挑战。每一天我都试图解决至少一个挑战(通常是在Coderbyte上)

就像我说那样,┅切问题都有类似的模式

现在你应该对“像程序员一样思考”更了解了吧。

你还知道了问题解决是需要培养的一项不可思议的技能(元技能)

如果这还不够,注意还知道了如何去练习你的问题解决技能!

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

你明白我的意思至少现在你知噵了该如何解决它们了!(此外,你也会知道每解决一个问题你都会更上一层楼)

当你以为你已经成功排除了一个障碍的时候,新的障礙又出现了但人生之所以有趣正是因为如此……人生就突破这些障碍的过程——人生就是要突破这一道道的防御工事。每一次你都会学箌一点东西每一次你的力量、智慧以及看法都会得到发展。每一次竞争对手都会被你抛在身后一点点直到所有对手都看着你的背影望塵兴叹:你也成为了最好的自己。

现在去解决一些问题吧!

编译组出品。郝鹏程编辑

参考资料

 

随机推荐