如果你对编程感兴趣,你很可能以前看过这句话:
“这个国家的每个人都应该学会给电脑编程,因为它教会你思 考。”--史蒂夫·乔布斯。
您可能还想知道,像程序员一样思考到底意味着什么?如何做呢?
从本质上讲,这一切都是关于一种更有效的解决问题的方法。
在这篇文章中,我的目标是教你怎样做。
这样做你将确切地知道要成为一个更好的问题解决者应该采取哪些步骤。
我们都有问题。或大或小。我们处理它们的方式有时是相当随机的。
除非有系统,否则这可能就相当麻烦。
如果那个不起作用,试试另一个。
如果这不起作用,重复第二步,直到你运气好为止。
也许有时候你会走运。但这是最糟糕的解决问题的方法!这是对时间的巨大浪费。
最好的方法包括a)有一个框架,b)实践它。
“几乎所有的雇主都把解决问题的技能放在第一位。
解决问题的能力几乎一致的是雇主寻找雇员的最重要的条件,比如精通编程语言、调试和系统设计。
展示计算思维或分解大型复杂问题的能力,与工作所需的基线技术一样有价值。
“我看到新程序员犯的最大错误是专注于学习语法,而不是学习如何解决问题。”--V·安东·斯普劳尔(V.Anton Spraul)。
那么,当你遇到新的问题时,你应该怎么做呢?
以下是步骤:
1.了解
确切地知道被要求的是什么。大多数难题之所以难,是因为您不理解它们。
如何知道什么时候你理解了一个问题?当你能用通俗易懂的语言解释它的时候。
你是否记得被困在一个问题上,你开始解释它,你会立即发现你以前没有看到的逻辑上的漏洞?
大多数程序员都有这种感觉。
这就是为什么你应该写下你的问题,涂鸦一张图表,或者告诉别人关于它的事情。
“如果你不能简单地解释一些事情,那你就不理解它。”--理查德·费曼(Richard Feynman)。
2.图示
不要在没有计划的情况下一头扎进去解决问题,不知何故希望你能蒙混过关。
规划您的解决方案!
如果你不能写下确切的步骤,什么也帮不了你。
在编程中,这意味着不要马上开始编程。给你的大脑一定时间来分析问题和处理信息。
要得到一个好的计划,回答这个问题:
在给定输入X的情况下,返回输出Y需要哪些步骤?
SideNote:程序员有一个很好的工具来帮助他们使用这个。
3.分割。
这是最重要的一步。
不要试图解决一个大问题。取而代之的是,将其分解为子问题。这些子问题更容易解决。
然后,逐一解决每个子问题。从最简单的开始。最简单的意思是你知道答案(或者更接近答案)。
在此之后,最简单的意思是这个子问题的解决不依赖于其他问题的解决。
一旦你解决了每个子问题,就把这些点连起来。
将您所有的“子解决方案”连接起来,将为您提供原始问题的解决方案。
这项技术是解决问题的基石。“如果我能教给每个初学程序员一种解决问题的技巧,那就是”减少问题的技巧“。
例如,假设您是一名新程序员,要求您编写一个程序,该程序可以读取10个数字,并计算出哪个数字是第三大数字。对于一个全新的程序员来说,这可能是一项艰巨的任务,即使它只需要基本的编程语法。
如果你被困住了,你应该把问题简化成更简单的问题。与其找第三高的数字,不如找出总体最高的数字呢?找出三个数字中最大的一个怎么样?还是两个中较大的一个?
把问题缩小到你知道如何解决的程度,然后写出解决方案。然后稍微扩展一下问题,重写解决方案,使之与之相匹配,然后继续进行,直到回到开始的地方。“--V·安东·斯普劳尔(V.Anton Spraul)。
4.卡住了
如果我被困住了,甚至连一个子问题都解决不了怎么办?“。
首先,深呼吸。
第二,这是公平的。
不过别担心,每个人都会发生这种事!
不同的是,最好的程序员或者问题解决者对错误更好奇,而不是恼火。
事实上,面对灾难时,这里有三件事可以试一试:
调试:一步一步地检查您的解决方案,试图找出哪里出了问题。程序员将此称为调试(事实上,这就是调试器所做的全部工作)。
“调试的艺术是弄清楚你真正告诉你的程序要做什么,而不是你认为你告诉它要做什么。”--安德鲁·辛格。
重新评估:后退一步,从另一个角度看问题。有什么可以抽象为更一般的方法吗?
“有时候,我们会迷失在问题的细节中,而忽略了在更广泛的层面上解决问题的一般原则。
当然,这方面的经典例子是一长串连续整数的总和,即1+2+3+…+n,一个非常年轻的高斯很快就认出它就是n(n+1)/2,这样就省去了做加法的麻烦。
另一种重新评估的方式是重新开始。删除所有内容,以全新的眼光重新开始。你会惊讶于这是多么有效。
不管你有什么问题,很可能有人已经解决了。找到那个人或者那个解决方案。事实上,即使你解决了问题,也要这么做!你可以从别人的解决方案中学到很多东西。
所以,不要寻找大问题的解决方案。只寻找子问题的解决方案。为什么?因为除非你勤奋,否则你什么都学不到。如果你什么都不学,那就是浪费时间。
实践。
不要指望仅仅一周就会变得很棒。如果你想成为一个优秀的问题解决者,就要解决很多问题!
练习。
练习。
练习。
认识到这个问题可以通过在这里插入概念轻松地解决只是个时间问题。
怎么练呢?其实有很多选择!
国际象棋谜题,数学题,数独,围棋,垄断,视频游戏,加密猫。
事实上,成功者的一个共同模式就是实践“微问题解决”的习惯。例如,彼得·泰尔(Peter Thiel)下国际象棋,埃隆·马斯克(Elon Musk)玩电子游戏。
“拜伦·里夫斯说,‘如果你想看看商业领导力在三到五年后会是什么样子,那就看看网络游戏中正在发生的事情吧。’
快进到今天。埃隆·马斯克(Elon[Musk])、里德(Reid[Hoffman])、马克·扎克伯格(Mark Zuckerberg)和其他许多人表示,游戏是他们成功建立公司的基础。
这是不是意味着你应该只玩电子游戏?
你应该做的是找到一个练习的出口。可以让你解决很多微不足道的问题的东西(理想情况下,是你喜欢的东西)。
例如,我喜欢编码挑战。每天,我都试图解决至少一个挑战。
就像我说的,所有的问题都有相似的模式。
结论。
现在,你更清楚“像程序员一样思考”意味着什么。
你也知道解决问题是一项令人难以置信的需要培养的技能。
就在你认为你已经成功地跨越了一个障碍的时候,另一个障碍就出现了。但这才是让生活变得有趣的原因。
生活就是突破这些障碍的过程——一系列我们必须突破的防线。
每一次,你都会学到一些东西。
每一次,你都会发展力量、智慧和洞察力。
每一次,都会有更多的竞争消失。直到剩下的只有你:最好的你。