编者按:职场或者人生最重要的技能是什么?老板最看重的是什么?解决问题的能力。如何培养解决问题的能力?这事儿也许需要从程序员身上吸取经验。否则的话,你可能就会像个没头苍蝇一样乱打乱撞。Richard Reis总结了程序员的思考方式,并且给出了你如何像程序员一样思考的步骤。 如果你对编程感兴趣,你也许之前已经见过这句话:
——乔布斯 你可能会在想这究竟是什么意思,像程序员一样思考?怎么才能做到呢? 基本上这一切与更有效地解决问题有关。 本文的目标就是教会你这种思考方式。. 看文本文之后,你将会了解到成为更好的问题解决者究竟需要哪些步骤。 这个为什么重要? 问题解决属于元技能。 我们都有问题。无论大或小。不过有时候我们解决问题的方式可是有点随意。 除非你有一套系统,否则的话你“解决”问题的方式大概是这样的(我开始编码时就是这样):
你看,有时候你会走好运。但这是解决问题最糟糕的方式!而且非常非常浪费时间。 最好的方式涉及到a)有一个框架,以及b)练习之。
——Hacker Rank(2018年开发者技能报告) 形成一种框架 为了找到合适的框架,我是按照Tim Ferriss有关学习的书《4小时大厨》里面的建议来做的。 这让我访谈了两位令人印象非常深刻的人:C. Jordan Ball(在Coderbyte的65000+位用户中排名1、2)以及V. Anton Spraul(《像程序员一样思考:创造性问题解决的介绍》的作者)。 我问了他们同样的问题,你猜怎么着?他们的回答都非常相似! 很快,你也会认识他们的。 旁注:这并不意味着他们每一件事的做法都一样。每个人都不一样。你也会有所不同。但如果你从我们都同意是好的原则开始的话,你取得更大突破会快很多。
——V. Anton Spraul 那么,遇到新问题时你会怎么做呢? 以下就是步骤: 1、理解 准确了解被问的是什么。大多数疑难问题之所以难是因为你不理解问题(因此这就是为什么这是第一步的原因)。 怎么才知道你什么时候理解了问题了呢?当你能够把问题说清楚的时候。 你还记得问题卡住的时候,你开始解释问题,然后马上看到了此前看不到的逻辑漏洞的时候吗? 大多数程序员都知道这种感觉。 所以这就是为什么你应该把问题写下来,画张图,或者把问题告诉某人(或者某物……有的人会利用橡皮鸭)的原因。
——费曼 2、计划 不要在制订计划之前就匆忙投入到问题解决当中(然后指望自己能像没头苍蝇一样找到出路)。先计划好你的解决方案! 如果你不能写下确切的步骤的话,没有东西能帮到你。 在编程中,这意味着不要一言不发就开干。要给你的大脑一点时间来分析问题和处理信息。 要想制订出好的计划,请回答这个问题: “在输入为X的情况下,返回输出Y的必要步骤是什么?” 旁注:程序员有很好的工具帮助他们做好这个……评论! 3、分解 注意。这是最重要的步骤。 别想着解决一个大问题。你会哭的。 相反,要把问题分解成子问题。这些子问题解决起来要容易多了。 然后一个个地解决这些子问题。从最简单的开始。最简单意味着你知道答案(或者更接近答案)。 之后,最简单意味着这个被解决掉的子问题并不依赖于其他被解决的问题。 一旦你解决了每一个子问题,再将点连成线。 把你所有的“子解决方案”连接起来就能得出原先问题的解决方案。祝贺你! 这一技巧是问题解决的基石。记住它(如果没记住,请把这个步骤再读一次)。
——V. Anton Spraul 4、卡住了? 不过,你可能会想“嘿Richard……这的确很酷,但如果我连子问题也没法解决又该怎么办呢?” 首先,深呼吸一下。其次,这很公平。 但请不要担心,朋友。每个人都会这样! 不同的是最好的程序员/问题解决者会对bug/错误更加好奇而不是感到气愤。 实际上,在遭受打击时这里有三件事情是需要你尝试一下的:
——Andrew Singer
—— C. Jordan Ball 旁注:重新评估的另一个办法是重新开始。删掉一切再次用崭新的眼光开始。我是认真的。你会对这种办法的有效性目瞪口呆。
警告:不要想寻找大问题的解决方案。只去找子问题的解决方案。为什么?因为除非你拼尽全力,否则就不会学到任何东西。如果你学不到任何东西,那就是在浪费时间。 实践 别指望一周之后你就会变得很棒。如果你想要成为一名好的问题解决者,那就解决很多问题先! 练习、练习,不断地练习。这样下去你意识到“这个问题很容易就能用[在此处插入概念]加以解决。”就只是个时间问题。 如何练习?选项太多了! 国际象棋迷局、数学难题、数独、围棋、地产大亨游戏、视频游戏、cryptokitties等等等等…… 其实,成功人士的一个共同模式是练习“微观问题解决”的习惯。比方说,Peter Thiel下国际象棋,Elon Musk玩视频游戏。
——Mary Meeker《2017年互联网趋势报告》 这是否意味着你就应该去玩视频游戏呢?完全不是。 但是视频游戏是干什么的呢?对了,解决问题! 所以,你应该做的是找一个合适的地方去练习。 比方说,我喜欢变成挑战。每一天我都试图解决至少一个挑战(通常是在Coderbyte上)。 就像我说那样,一切问题都有类似的模式。 结论 就这些了伙计们! 现在你应该对“像程序员一样思考”更了解了吧。 你还知道了问题解决是需要培养的一项不可思议的技能(元技能)。 如果这还不够,注意还知道了如何去练习你的问题解决技能! 这相对酷对不对? 最后,我希望你能遇到很多问题。 你明白我的意思。至少现在你知道了该如何解决它们了!(此外,你也会知道每解决一个问题你都会更上一层楼)。
——Ryan Holiday《The Obstacle is the Way(障碍就是出路)》 现在,去解决一些问题吧! 祝你好运! 原文链接:https://medium./how-to-think-like-a-programmer-lessons-in-problem-solving-d1d8bf1de7d2 编译组出品。郝鹏程编辑。 |
|