像程序员一样思考: 如何解决问题
引用
如果你对编程感兴趣,也许会知道这句话:
每个人都应该学习使用电脑编程,因为编程会教你如何思考。--斯蒂夫 乔布斯
你可能会问这句话的确切意思是什么,像程序员一样思考,该如何做?
本质上,这句话说是一种更有效率的解决问题的方式。
本文将会教你学会这种方法。
为什么解决问题很重要
解决问题是一项元技能。
我们都会面临问题,或大或小,我们处理问题的方式有时都很随意。
除非你掌握一套系统,这也可能是你解决问题的常用套路:
-
尝试某个方案
-
行不通就换个
-
再行不通,再换个
总会有碰到好运气的时候,但那是最糟糕的方法!而且相当相当浪费时间。
最好的方法包括:
-
掌握一套框架
-
不断实践框架
几乎所有的开发者都把解决问题技能放在第一位。如何解决问题是除了
编程语言熟悉度、代码调试、系统设计之外,所有雇主最看重的技能。
找工作的时候,展示计算机思维或掌握分解大型复杂问题和掌握基础技术技能同等重要,有时更重要。 - Hack Rank
来源: 2018 年开发者技能报告
建立框架
为了找到合适的框架,我参考了 Tim Ferriss 在四小时厨师提到的建议。
我访问了两位十分重要的人士: C. Jordan Ball CodeByte
上排名第一或第二
V. Anton Spraul, 像程序员一样思考: 创意问题解决之道一书作者。
我问了同样的问题,他两的答案十分类似。
我观察新手程序员犯得最大错误是只知道学习语法,不知道学习如何解决问题。 -V. Anton Spraul
那我们碰到问题时到底该如何解决呢?
可以参考下面的步骤:
1.理解
分析清楚问题到底是什么。大部分难题之所以困难是因为你根本没有理解问题。
如何搞清楚你已经理解某个问题呢?答案是当你可以用普通的语言解释清楚问题。
还记得一直陷在某个问题上吗?你开始解释问题,你会立刻发现以前没发现的逻辑漏洞。
大部分开发者都有这样的感觉。
这就是为什么你要写下问题的原因。简单画图或告诉他人你的问题,还有人用橡胶鸭。
如果你不能用简单语言描述问题,那你就是没有理解问题。 --Richard Feynman
2.计划
不要没有计划地深入解决问题,妄想蒙混过关,针对你的方案做个计划!
如果你不能写下详细的步骤,谁也不能帮你解决问题。
编程活动中,这意味着没有选择正确的方向。
给你的大脑足够时间来分析问题理解信息。
可以通过回答下面的问题实现好计划:
输入X的情况下,要实现哪些步骤才能得到输出Y
3.分解
注意!这是解决问题最重要的一步。
不要尝试一次解决个大问题,你会失望的。
相反,把大问题分解成小问题,小问题更容易解决。
然后把小问题一个一个解决,从最简单的开始,最简单意味着你知道答案或最接近答案。
另外,最简单也意味着解决小问题不需要依赖解决其他问题。
一旦你解决了每个小问题,把它们连接起来。
祝贺你,把所有小问题的解决方案连在一起就能获得原始问题的解决方案!。
这是解决问题的基础技巧。
记住然后仔细阅读。
如果我可以教会所有新手程序员如何解决问题,答案是分解问题技巧。-- V. Anton Spraul
4.卡壳?
你可能会想 Richard,这些都很棒,但要是我解决小问题时遇到障碍卡壳了呢?
首先,深呼吸,其次,这很正常。
区别是顶尖程序员会对 bug 或错误更好奇,而不是愤怒。
事实上,运气不好的时候可以做三件事:
- 调试, 逐步调试你的方案,尝试找到哪里失败
调试的艺术是找出程序真正的运行过程,而不是你认为的方式。 — Andrew Singer
- 重新评价: 往回看,从其他角度看看问题,是否有逻辑可以抽象成通用方法。
有时我们陷入问题的细节,忽视通用原则会在更通用层次解决问题。
最经典的例子,连续自然数的累加,从 1,2,3。。。加到 n, 适用简单的高斯公式,可以简单计算结果
n(n+1)/2, 而且可以避免考虑其他问题。 — C. Jordan Ball
- 重新搜索,万事求谷歌,无论你遇到什么问题,别人可能已经解决过。找到他或他的方案。
事实上,即使你解决了问题,也可以从别人的答案中学到很多。
实践
执行一周不要期望解决全部问题,如果你想解决问题得心应手,那就尝试解决更多问题。
实践,尽可能实践。等你意识到这个问题可以很简单地用XXX方法解决
之前都是时间问题。
如何实践? 有太多选择了。
国际象棋、数学问题、数独、大富翁游戏、电子游戏、以太猫游戏等等。
实际上,成功人士的常见方式是实践解决微问题的习惯,例如,Peter Thiel 玩国际象棋,
Elon Musk 玩电子游戏。
Byron Reeves 说,如果你想看看三到五年内商业领袖,看看在线游发生的一切。
快进到今天,Elon、Reid 、Mark Zuckerberg 和其他人都说游戏对创业成功有基础性作用。— Mary Meeker 2017 年互联网趋势报告
译者注
-
原文有删减,因译者水平有限,如有错误,欢迎留言指正交流