美文网首页
翻译—How to think like a programme

翻译—How to think like a programme

作者: 过来摸摸头丶 | 来源:发表于2018-07-30 09:19 被阅读0次

                                                                                                        ——Richard Reis

如果你对编程感兴趣,你很可能之前看到过下面这句话:

image

确实,你可能会想知道像一个程序员一样思考到底什么意思?怎么做?

本质上说,它就是一个解决问题更加高效的方式。

在这篇文章中,我的目的是教你解决问题高效的方式。

到文章最后,你将确切的了解成为更厉害的解决问题小能手需要怎么做。

为什么解决问题的思维很重要?

解决问题是一种元技能。

我们总是有大大小小的问题。我们怎么样处理它们,喔,有时候是很随意的。

除非你有一个系统,下面可能是你怎么样去解决问题的。(这也是我一开始编码的时候的解决问题的方式)

1.尝试一种解决办法

2.如果它解决不了,尝试另一个

3.如果还不行,重复第2步直到你好运来了,解决了。

看,有时候你运气不错。但是这样找到的办法可能是最糟糕的解决方法。并且这样做是非常非常浪费时间的。

最好的方式包括:a)有一个框架    b)去实践它

几乎所有的雇主优先会考虑一个人解决问题的技巧。解决问题的技巧被一致认为是最重要的条件资格,这是雇主们想要找的人。比对编程语言的精通、调错和系统设计都更加看重。

论证计算思维或者解决大而复杂大问题的能力和工作中所需要的基线技术一样有价值。

有一个解决问题的框架

为了找到正确的框架,我遵循了Tim Ferriss的书的建议,学习《跟厨师学4小时》。

书中让我采访两位牛人:C.Jordan Ball(在Coderbyte上排名第一或者第二的超过65000+关注者的人);V.Anton Spraul(Think Like a Programmer一书的作者)

我询问了他们相同的问题,你猜怎么着?他们的回答惊人的相似!

很快,你也会知道了他们的回答。

旁白:这不意味着他们做任何事都是相同的方式。每个人的做事方式都是不同的,你也是。但是如果你以我们赞成的不错的原则作为起点的话,你会进一步成长并且很快速。

image

所以,当你遇到新问题的时候你应该怎么做?

下面是建议的步骤:

1.理解

深入理解被问的是什么。大多数你觉着困难的问题是因为你不能够理解它们。(因此这是第一步)。

怎么样知道你什么时候理解了一个问题呢?是当你可以用简单的语言描述这个问题的时候。

你是否记得你被困于一个问题时,你开始用大白话去描述它,并且你立马就看到你之前没有看到的逻辑漏洞。

大部分程序员都知道这样的感觉:

这就是为什么你应该记下你问题的原因,涂鸦图或者告诉别人关于这个问题(……一些人喜欢用橡皮鸭)。

image

2.计划

不要没有计划的沉迷于怎么解决问题(不知怎么地,你会混乱你解决问题的方式),你可以做个解决计划。

如果你不记下正确的解决问题的步骤那就没有什么可以帮助你了。

在编程中,这意味着不要开始就直接钻到解决问题中。给你的大脑一些分析问题和处理信息的时间。

为了想出一个不错的计划,回答一下问题:

"给定一个输入X,返回Y所需要的步骤是什么?"

旁白:程序员有一个很棒的工具帮助他们…注释!

3.拆分

注意一下,这个是所有步骤中最重要的。

不要试图去解决一个很大的问题,你肯定想哭。

相反,把它分成几个小问题。这些小问题解决起来是更简单的。

然后,解决一个一个解决这些小问题。由最简单的开始。最简单的意思是你知道它的答案(或者接近于答案)。

在那之后的简单意思是这个小模块问题的解决不依赖于其他模块是否解决。

一旦你解决了每一个小模块的问题,就把它们联系起来。

把所有的小问题联系起来将会解决你原来的问题,祝贺你!

这项技能是解决问题的基石。记住它(如果需要的话在读一遍本步骤)。

"如果我可以教会每一个初学者一个解决问题的技能,那么它就是'减少问题的技巧'。例如,假设你是一个初级程序员,你被要求写一个程序,读取十个数字并计算出哪个数字是第三最大的。对于全新的程序员来说,这可能是一项艰巨的任务,尽管它只要求基本的编程语法。"

"如果这让你陷入了困境,你应该把问题简化为更简单的事情。而不是第三大的数字,最高的整体?还是很困难?那从三个数字中找出最大的呢?或者从两个数字中找出最大的数字?"

"把问题减少到你知道如何解决它并写下解决方案的地步。然后稍微扩展一下问题在重新写出一个解决方案,保持这样的状态直到你回到最初的问题的地方。"—V.anton Spraul

4.绊脚石?

到现在,你可能正作者思考"这真的很酷,但是我卡在了小问题解决不了怎么办?"

首先,深呼吸。然后,它其实是很公平的。

不要担心了,朋友,我们每个人都有这样的情况!

不同的是,最好的程序员相比于愤怒更加多的是好奇。

事实上,当你遇到坎儿的时候有三种方法你可以去尝试:

·    Debug:当你遇到错误的时候,一步一步执行下去尝试找到是哪里出错了。

"调试的艺术是指出你真正告诉你的程序员做了什么而不是你觉着你让他做了什么"

·    Reassess:退一步。以别的角度看待这个问题,有什么东西可以被抽象为更一般的方法吗?

"有时候我们会忽略一些问题的细节,我们忽略了在更一般的层次上解决问题的一般原则。"

"有个经典的例子,一个连续的正数长列表1+2+3+...+n把他们求和,年轻的Gauss可以很快意识到是n(n+1)/2,因此避免了必须一直加法的本办法。"

旁白:另一个Reassess的方法是重新解决。删掉所有现在解决的过程,再一次以新的眼光查看这个问题。我很严肃的告诉你,你会惊讶于这样多么有效。

·    Research:谷歌不错,你读它就对了。无论你遇到过什么问题,这个问题很可能已经解决了。找到那个人的解决办法。事实上,甚至你解决了问题也可以研究一下(你会学到许多其他人的更好的解决办法)。

注意:不要找总的大问题的解决方案。仅仅去寻找它的子模块的解决方案。为什么?因为你除非你努力解决(甚至更努力),否则你什么都学不到。如果你什么也没学到,那只能算是浪费时间了。

实践

不要预计仅仅一周就能解决好问题。如果你想要成为一名优秀的问题解答者,你需要大量的实践。

实践实践在实践,这仅仅是时间问题在你认识到"这个问题可以很容易被解决了。"

怎样实践呢?这里有一些其他选择。

象棋难题,数学问题,九宫格,专利,电子游戏,虚拟币……

实际上,成功人只之间的一个共同模式是他们习惯于"微问题解决"。例如,Peter Thiel下象棋,Elon Musk玩电子游戏。

"Byron Reeves说,如果你想看看企业领导曾在三到五年会是什么样子,你可以看看网络游戏里会发生什么。"

快进到今天,Elon,Reid,Mar和许多其他成功人士都说他们在玩游戏的适合建立了开公司的基础。

这个意思是你应该只玩电子游戏吗?才不是。

但什么是电子游戏呢?对,解决问题。

所以,你应该做的是找到一个实践的出路。能让你解决许多微观问题的出路,最理想的是,你对这个还感兴趣。

例如,我享受于编码的挑战。每一天,我都尝试解决至少一个挑战(Coderbyte上面)。

像我说的,所有的问题都有类似的模式。

总结

现在,你对"像程序员一样思考"有了更深对了解。

你也明白了解决问题的方法是难以置信的元技能。

好像这些还不够,注意你也已经知道了如何实践你解决问题的技巧。

最后,我希望你可以遇到许多问题。

你可以看看正确的解决方式,至少你现在了解了怎么样解决他们。(你也会从解决每个问题中学习到很多,你将不断提高自己)。


原文链接:https://medium.freecodecamp.org/how-to-think-like-a-programmer-lessons-in-problem-solving-d1d8bf1de7d2

相关文章

网友评论

      本文标题:翻译—How to think like a programme

      本文链接:https://www.haomeiwen.com/subject/wzexvftx.html