译 - 如何像程序员一样思考?

1,468 阅读10分钟

译:刘传君

如果你对编程感兴趣,你很可能以前看过这句话。 "这个国家的每个人都应该学会给电脑编程,因为它能教会你思考。" - 史蒂夫-乔布斯 你可能也想知道,像程序员一样思考到底是什么意思?又是如何做到的呢? 从本质上来说,这就是一种更有效的解决问题的方法。 在这篇文章中,我的目标就是教你这种方法。 到最后,你就会知道到底要采取什么步骤才能成为一个更好的问题解决者。 为什么这很重要?

解决问题是元技能。

我们都有问题。大大小小的问题。我们如何处理这些问题,有时候,嗯......很随意。 除非你有一个系统,否则这可能是你 "解决 "问题的方式(这是我开始编码时的做法)。 尝试一个解决方案 如果不行,再试一个。 如果还不行,就重复第二步,直到你运气好。 听着,有时候你会很幸运。但这是解决问题的最糟糕的方法! 而且这是一个巨大的,巨大的时间浪费。

最好的方法是

  • a)有一个框架,
  • b)实践它。

"几乎所有的雇主都会优先考虑解决问题的技能。 解决问题的技能几乎是雇主们一致看重的最重要的资质......比编程语言的熟练程度、调试和系统设计更重要。 展示计算思维或分解大型复杂问题的能力,与工作所需的基本技术技能一样有价值(如果不是更有价值)。" - 黑客排名(2018年开发者技能报告

有一个框架

为了找到合适的框架,我遵循了蒂姆-费里斯的学习书籍《4小时厨师》中的建议。 这让我采访了两个非常了不起的人。C. Jordan Ball (在Coderbyte上65,000多名用户中排名第一或第二),和V. Anton Spraul (《像程序员一样思考:创造性问题解决入门》一书的作者)。创造性问题解决入门》一书的作者)。) 我问了他们同样的问题,你猜怎么着?他们的答案非常相似! 很快,你也会知道他们的答案。 旁白:这并不意味着他们做任何事情都是一样的。每个人都是不同的。你也会不同。但如果你从我们都认为好的原则开始,你会更快地走得更远。

"我看到新程序员犯的最大错误是专注于学习语法,而不是学习如何解决问题。" - V. Anton Spraul

那么,当你遇到新的问题时,你应该怎么做呢? 以下是步骤。

1. 了解

明确知道问的是什么。大多数难解的问题都是因为你不理解它们(因此这是第一步)。 如何知道你什么时候理解一个问题?当你能用简单的英语解释它的时候。 你是否还记得在一个问题上被卡住了,你开始解释它,你立刻看到了你之前没有看到的逻辑漏洞? 大多数程序员都知道这种感觉。 这就是为什么你应该写下你的问题,涂鸦一张图,或者告诉别人这个问题(或者事情......有些人用橡皮鸭子)。 "如果你不能用简单的术语来解释某件事,你就不了解它。" - 理查德-费曼

2. 计划

不要在没有计划的情况下就直接进入解题状态(莫名其妙地希望自己能蒙混过关)。计划你的解决方案! 如果你不能写下确切的步骤,什么都帮不了你。 在编程中,这意味着不要直接开始破解。给你的大脑时间来分析问题和处理信息。 为了得到一个好的计划,回答这个问题。 "给定输入X,返回输出Y的必要步骤是什么?" 旁白:程序员有一个很好的工具来帮助他们解决这个问题......评论!

3.分解

要注意。这是最重要的一步。 不要试图解决一个大问题。你会哭的。 相反,把它分解成子问题。这些子问题更容易解决。 然后,逐一解决每个子问题。从最简单的开始。最简单的意味着你知道答案(或者更接近这个答案)。 之后,最简单意味着这个子问题的解决不依赖于其他子问题的解决。 一旦你解决了每一个子问题,就把这些点连接起来。 把你所有的 "子解 "连接起来,你就能得到原问题的解决方案。恭喜你!你的问题解决了。 这个技巧是解决问题的基石。记住它(如果你一定要再读一遍这个步骤)。 "如果我能教给每个初学者一个解决问题的技巧,那就是'减少问题技巧'。 例如,假设你是一个新的程序员,你被要求写一个程序,读取十个数字,并计算出哪个数字是第三高。对于一个全新的程序员来说,这可能是一个艰难的任务,尽管它只需要基本的编程语法。 如果你被卡住了,你应该把问题简化为更简单的东西。与其找第三高的数字,不如找总体最高的数字呢?还是太难?找出三个数字中最大的一个呢?或者两个数中较大的一个呢?、

把问题缩小到你知道如何解决的程度,并写出解决方案。然后把问题稍微扩大,重新写出与之相匹配的解决方案,一直到你回到起点为止。" - V.安东-斯普劳尔

4. 卡住了?

现在,你可能坐在那里想 "嘿,刘哥......。这很酷,但如果我被卡住了,连一个子问题都解决不了怎么办?" 首先,深吸一口气。其次,这很公平。 不过别担心,朋友。这种情况每个人都会发生! 不同的是,最好的程序员/问题解决者对bug/错误更多的是好奇,而不是恼羞成怒。 事实上,在面对捶打的时候,有三件事可以尝试。 调试 一步一步地检查你的解决方案 试图找到你出错的地方。程序员把这叫做调试(事实上,这就是调试器的全部工作)。 "调试的艺术是弄清楚你真正告诉你的程序要做什么,而不是你认为你告诉它要做什么。"--安德鲁-辛格。 重新评估。退一步讲,从另一个角度看问题。从另一个角度看问题。是否有什么东西可以抽象为更一般的方法? "有时我们会迷失在问题的细节中,以至于忽略了能在更普遍的层面上解决问题的一般原则。[…]

  当然,最经典的例子是一长串连续整数的求和,1+2+3+......+n,非常年轻的高斯很快就认识到这只是n(n+1)/2,从而避免了做加法的辛苦。" - C.乔丹-鲍尔
  

旁白:另一种重新评估的方式是重新开始。删除一切,用新的眼光重新开始。我是认真的。你会对这一方法的有效性目瞪口呆的。 研究。

啊,好家伙 "谷歌。你没看错。无论你有什么问题,有人可能已经解决了它。找到那个人/解决方案。事实上,即使你解决了问题,也要这样做!(你可以从别人的解决方案中学到很多东西)。你可以从别人的解决方案中学到很多东西)。 注意:不要寻找大问题的解决方案。只寻找子问题的解决方案。为什么这么说呢?因为除非你挣扎(哪怕是一点点),否则你不会学到任何东西。如果你什么都学不到,你就浪费了你的时间。

练习

不要指望仅仅一个星期后就能成为优秀的人。如果你想成为一个优秀的问题解决者,就要解决大量的问题! 练习。练习,练习 练习。在你认识到 "这个问题可以很容易地用<此处插入概念>来解决 "之前,这只是一个时间问题。 如何练习?有很多选择! 棋谜、数学题、数独、围棋、大富翁、电子游戏、密码小游戏,等等......等等。 其实,在成功人士中,有一个共同的模式,就是他们习惯于练习 "微问题解决"。比如,彼得-蒂尔下棋,埃隆-马斯克玩电子游戏。 "拜伦-里夫斯说'如果你想知道三到五年后的商业领导力可能是什么样子的,就看看网络游戏中发生了什么'。快进到今天。

埃隆[马斯克]、里德[霍夫曼]、马克-扎克伯格和其他许多人都说,游戏是他们成功建立公司的基础。" - 玛丽-米克尔(2017年互联网趋势报告

这是否意味着你应该只玩电子游戏?一点也不。 但是,电子游戏是什么呢?没错,就是解决问题! 所以,你应该做的是找一个出口来练习。一些可以让你解决很多微问题的东西(最好是你喜欢的东西)。 例如,我喜欢编码挑战。每天,我都会尝试解决至少一个挑战(通常在Coderbyte上)。 就像我说的,所有的问题都有相似的模式。

结语

就这样吧,伙计们!现在,你们更知道什么叫 "像程序员一样思考 "了。 现在,你更知道 "像程序员一样思考 "意味着什么。 你还知道,解决问题是一种令人难以置信的技能,要培养(元技能)。 如果这还不够,请注意,你还知道怎么做才能练习你的解决问题的能力! 呼,很爽吧?

最后,祝你遇到很多问题。

你没看错。至少现在你知道如何解决它们了! (而且,你会知道,每解决一个问题,你就会进步)。 "当你认为你已经成功地驾驭了一个障碍时,另一个障碍就会出现。但这就是让生活保持有趣的原因。[...] 人生就是一个突破这些障碍的过程--我们必须突破一系列的强化线。

每一次,你都会学到一些东西。
每一次,你都会发展力量、智慧和视野。
每一次,都会有更多的竞争者倒下。直到剩下的就是你:最好的自己。" - 莱恩-哈雷尔(《障碍就是路》)。

现在,去解决一些问题吧!

祝你好运

特别感谢C.Jordan Ball和V.Anton Spraul。这里所有好的建议都来自于他们。 另外,如果没有Lambda学校,我在这么短的时间内获得的所有编程知识都不会发生。怎么感谢/推荐他们都不够。

感谢您的阅读!😊 如果你喜欢它,测试一下你能在30秒内可以点赞多少文章。包括这篇。这对你的手指来说是很好的有氧运动,而且会帮助其他人看到这个故事。 你可以在Twitter上关注我,@richardreeze,每当有其他类似的作品出现时,你就会发现。

原文:medium.com/free-code-c…