你应该学会像程序员一样思考!

其实从实用主义的角度动身,学会编程,可以处理疑问。

很多顶尖的程序员,在开辟新程序的时候往往都是为了满足自身的需求:Linux操纵体系,是由于林纳斯托瓦兹(Linus Torvalds)对自个电脑上运转的 MINIX体系不满意意,才开发Linux的;马克扎克伯格在大学时开辟的第一个程序,则是为了让自己和同学可以非常好地选课。

纵然不学编程,从程序员这群智慧人的身上我们也可以学到很多。

你应该学会像程序员一样思考!

比如说——程序员的「懒」

懒散看起来是褒义词,倒是程序员最优秀的特质之一。由于懒散,他们难以忍耐重复的作业,才会开发种种工具来替自己干活——「一件事要重复两次以上,就该为他写个脚本」。

也由于懒散,他们才会尽可以大概制止代码的冗余,能用一行代码完成的任务绝对不写两行,让程序的维护尽可能简单。

为了偷懒,程序员们甘心创造任何工具:无论是人工智能、自动驾驶还都是物联网,全都是「懒」的产物。

纵然面对日子里的一些小事,他们也一样懒:为信用卡设定主动还款;给电饭煲设置定时,来解放睡觉时候;Excel 里单调而重复的复制粘贴,也都可以用简朴的函数完成。

你看,懒一点是不是也挺好。

比如说——程序员的「精」

比重用蛮力,他们更甘心用智慧的算法来高效处理疑问。敏捷排序算法、二分查找算法、蒙特卡洛算法……很多经典的算法,让次序员们站在巨人的肩膀上,能看得更远。

算法听起来深奥,本来可以领导我们日子的方方面面。

举个例子,假定要从一定的人选中挑选最佳的一位作为你的下属,他们逐一前来口试,口试完毕时就要决定是不是任命,那么,你应当口试多少个候选者才能招到最佳的人呢?

程序员用算法报告我们,答案是 37%。

对前 37% 的候选者只观察不选取,而在口试了 37% 的候选者当前,遇到比之前统统候选人都优秀的人就选取他。这个算法能包管你有逾越 1/3 的概率招到到最才子选。

你应该学会像程序员一样思考!

你可能会见过这样一句话。

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

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

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

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

除非你有一套系统,否则的话你“解决”问题的方式大概是这样的:

  1. 尝试着解决问题。
  2. 如果这种解决方法无效,再试另一种。
  3. 如果还是没有用,重复第二步直到你解开问题。

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

我发现新手程序员的最大错误是关注于学习语法而不是学习如何解决问题。 ——V. Anton Spraul

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

以下就是步骤:

1.理解

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

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

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

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

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

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

2.计划

不要在制订计划之前就匆忙投入到问题解决当中。先计划好你的解决方案!

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

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

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

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

3.分解

注意。这是最重要的步骤。

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

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

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

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

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

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

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

如果我要教给新手程序员一个问题解决技能的话,这个技能会是“问题分解技巧。”

比方说,假设你是一名新程序员,有人要你写一个程序读10个数字并找出第3大的那个。对于菜鸟程序员来说,这可能会是一个艰难的作业,即便这只需要基本的变成语法。

如果你卡住了,就应该把问题分解为简单一点的东西。与其寻找第三大的数字,何妨先找最大的数字呢》还觉得困难?那在3个数里面找出最大的数字呢?或者两个数中较大的那个?

把问题分解到你之大如何去解决的程度然后写下解决方案。把把问题稍微扩展一下,重写解决方案来跟问题匹配,一直这么做,直到你回到原先的起点。 ——V. Anton Spraul

4.卡住了?

如果连子问题都解决不了呢?是不是卡住了?

首先,深呼吸一下。其次,这很正常。

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

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

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

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

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

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

对于问题有时候我们太过只见树木不见森林以至于忽视了从更普遍的水平上解决问题的一般原则。[……]

当然,这个的典型例子是一系列连续整数之和,1+2+3+…+n,这个问题一位年轻的高斯很快就能意识到答案是n(n+1)/2,从而避免了必须把一个个数加起来的麻烦。 —— C. Jordan Ball

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

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

5.实践

不要觉得过了一周,你就会非常的棒!如果你想要成为一名好的问题解决者,那就先解决问题!

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

如何练习?选项太多了!

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

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

Byron Reeves说“如果你想知道3~5年后商业领导力是什么样,那就看看在线游戏发生的事吧。”

回到现在。Elon、Reid、扎克伯格等人都说游戏是自己创业取得成功的基础。 ——Mary Meeker《2017年互联网趋势报告》

总结

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

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

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

至少现在你应该知道该如何的解决问题了。

当你以为你已经成功排除了一个障碍的时候,新的障碍又出现了。但人生之所以有趣正是因为如此……

人生就突破这些障碍的过程——人生就是要突破这一道道的防御工事。

每一次你都会学到一点东西。

每一次你的力量、智慧以及看法都会得到发展。

每一次竞争对手都会被你抛在身后一点点。直到所有对手都看着你的背影望尘兴叹:你也成为了最好的自己。

分享 IT 技术和行业经验,请关注-技术学派。

相关推荐