如何像程序员一样思考——解决问题的经验

How to think like a programmer — lessons in problem solving

图片发自简书App

如何你对编程感兴趣,你可能见过这句话:

“Everyone in this country should learn to program a computer, because it teaches you to think.” — Steve Jobs

你可能还想知道,像程序员一样思考到底意味着什么?怎样才能做到?

从本质上讲,这是一种更有效的解决问题的方法。

在这篇文章中,我的目标是用这种方式教你。

最后,你就会知道怎样才能更好的解决问题。

为什么这很重要?

我们每天都有遇到很多问题,无论大的小的。我们处理这些问题的方式有时候都是随机的。

除非你有个系统,否则用“随机的方式”可能就是你“解决”问题的方法(下面我开始学习编程写代码时候做做的事情):

  • 1、试着解决方案
  • 2、如果不行,再试一次
  • 3、如果没有效果,重复第二步知道你运气好

这样的方法,在你运气不好的时候,就傻了。总之这种方法时候解决问题的最糟糕的方法!也是非常浪费时间的。

最好的方法是:

  • a、有一个框架
  • b、练习它

几乎所有的雇主都把解决问题的能力放在首位!

解决问题的能力已经是雇主们寻找程序员、测试工程师、系统设计师等最看重的一个方面。

计算思维或分解大型复杂问题的能力,与工作所需要的基本技术能力一样有价值 — by Hacker Rank (2018 Developer Skills Report)

一个框架

为了找到正确的框架,我遵循了Tim Ferriss 关于学习的书《the 4-Hour Chef》中的建议, 《The 4-Hour Chef》

这让我采访了两个让我印象深刻的人:
C. Jordan Ball (ranked 1st or 2nd out of 65,000+ users on Coderbyte, and V. Anton Spraul (author of the book “Think Like a Programmer: An Introduction to Creative Problem Solving”.

我问了他们同样的问题,你猜怎么着?他们的回答竟然非常的相似!

接下来,你很快就能认识他们了~~

当然,其实这也并不意味着它们每件事情都是以同样的方式进行,每个人都是不同的,你也会是不同的,但如果你从我们都认同的好的原则开始,你也会走的更远更快。

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

那么,当你遇到新的问题时,你应该怎么做呢?

步骤如下:

1、理解

非常确切的知道自己被问的是什么问题。大多数难题之所以难,是因为你不理解它们,所以这个是第一步。

如何知道什么时候你理解了一个问题呢?——当你能用简单的、自己的语言解释它的时候。

你可能会记得,当你被困在一个问题上,一旦开始解释它,你就立刻看到逻辑上的漏洞,而且漏洞很可能也是你以前没有看到的。

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

这就是为什么你应该把你的问题写下来,画个图,或者告诉别人。

“If you can’t explain something in simple terms, you don’t understand it.”  如果你不能用简单的语言来解释某件事,你就无法理解它 — Richard Feynman

2、计划

不要在没有计划的情况下,一头扎进解决问题的过程中(并且希望你能混过去),计划你的解决方案吧!

如果你不能写下计划确切的步骤,什么也都不帮不了你。

在编程中,这意味着不要立即开始进行黑客攻击。给你的大脑一定的时间来分析问题和处理信息。

为了得到一个好计划,回答这个问题:
给定输入 X,返回输入Y所需要的步骤什么?
程序员的世界里面,有一个伟大的工具 来帮助他们实现这个,那就是注释!

3、拆分

这是最重要的一步

不要试图一次就解决一个大问题,不然你可能会哭的。

相反,当你把这个问题进行拆分成一个一个子问题,这些子问题就更加容易解决了。

然后,逐个解决每个子问题,从最简单的开始。最简单意味着,你知道答案(或者更加接近那个答案)。

另外最简单的方法意味着子问题的解决并不依赖与其他问题的解决。

一旦你解决了每个子问题,再把这些点连接起来

连接所有“子解决方案” ,将为你提供的原始问题的解决方法!那么恭喜你,你做到了!

这种技巧呢,是解决所有问题的基石,请记住它(建议你重新再读一遍这个步骤)

如果我能交给每一个初学者一种解决问题的技能,那就是“减少问题这个技能” ,例如:假设你是一个新程序员,你被要求编写一个程序,读取10个数字,然后算出哪个数字是第三高的,对于一个全新的程序员来说,这可能是一项艰巨的任务,尽管它只需要基本的编程语法

如果你陷入困境,你就应该把问题简化。而不是专注在第三个高的数字上。如何在一个整体中先找到最高的那个数呢?还是太难了?那从三个数字中找到最大的那个呢? 还是太难? 那如果是寻找两个较大的那个呢?

将问题简化到你知道如何解决问题,并编写解决方案的程度。然后稍微展开问题,重新解决方案使其匹配,并继续进行,知道你回到你最开始的地方。— V. Anton Spraul

4、卡住了呢?

现在,你可能正坐在那里想,这几个步骤看起来还不错嘛,但如果我卡住了,设置不能解决子问题该怎么办?

首先,深呼吸。因为这个很正常!

别担心,朋友,每个人都会这样子!

不同之处在于,最好的程序员/问题解决者,对bug/错误更加好奇,而不是恼怒!

事实上,当你遭遇不幸时,有三件事情可以尝试:

  • 调试:逐步检查你的解决方案,试图找出哪里出错了。即调试程序。

(调试的艺术在于,找出你真正告诉你的程序去做了什么,而不是你以为你告诉它去做什么)

  • 重新评估: 后退一步,从另个一角度来看这个问题,有什么可以抽象成更加一般的方法吗?

(有时候,我们会对问题的细节太过沉迷,以至于忽略了再更一般的层面上解决问题的一般原则!)

经典的例子,求一长串连续整数的总和,1+2+3+4+...+ n , 利用一个简单的消元方法就可以很快的识别出这么一个公式:n(n+1)/2 ,从而避免了不得不做的加分。

(另一种重新评估的方式是重新开始。删除所有的内容,用全新的眼光重新开始。你会惊讶到这是多么有效。)

  • 搜索/研究 :你没看错,就是使用Google,不管你有什么问题,可能有人已经解决了。找到那个人/解决方案。事实上,即使你解决了问题,也要这样做!(你可以从别人的解决方案中学到很多)

(注意:不要寻找解决大问题的方法。只寻找子问题的解决方案,为什么呢? 因为除非你努力,(哪怕是一点点),否则你什么都学不到,如果你什么都没学到,那你就是在浪费时间

5、实践

不要期望仅仅一个星期就能变的很厉害,如果你想成为一个好的问题的解决者,就应该去解决很多问题!

练习、练习、练习!迟早你会认识到这个问题可以通过很轻松的方式来解决。

那么如何练习呢?其实也有很多选择的!

比如:国家象棋游戏、数学问题、数独、视频游戏、cryptokittiles ,bla bla bla .........

事实上,成功认识的一个普遍模式是他们练习“围观解决问题”的习惯。例如: 彼得.泰尔(Peter Thiel )下棋,埃隆.马斯克 (Elon Musk) 玩电子游戏....

拜伦.里夫斯(Byron Beeves)说,如果你想知道三到五年后商业领导力会是什么样子,那么久看看网络游戏正在发生什么吧

快进到今天。埃隆马斯克、雷德.霍夫曼、马克.扎克伯格和其他许多人都表示,游戏是他们称建立公司的基石。——Mary Meeker (2017年互联网趋势报告)

这意味着你应该只玩电子游戏? 也不全是。

但是这个到底跟电子游戏有什么关系呢? 没错,就是问题解决!

所以,你应该做的是,找到一个练习的出口,可以让你解决很多小问题的东西。(理想情况下,还是你喜欢的东西,那就更好了)

例如,我喜欢编程挑战,每天,我都试图解决至少一个挑战(通常在Coderbyte)https://coderbyte.com/

正如我所说,所有的问题都有相似的模式!

6、结论

现在,你知道“像程序员一样思考” 是什么意思了。

你也知道解决问题是一种难以置信的元技能。

如果这还不够,你肯定也知道了如何练习解决问题的技巧。

你看,这是不是看起很酷!

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

你没看错,至少现在你知道怎么解决了,同时,你将了解到,每一种解决方案都会使你得到改进!

“Just when you think you’ve successfully navigated one obstacle, another emerges. But that’s what keeps life interesting.
就在你认为已经成功跨域了一个障碍时候,另一个障碍有出现了,但这正是让生活变得有趣的地方。

Life is a process of breaking through these impediments — a series of fortified lines that we must break through.
生活是一个突破这些障碍的过程——一系列我们必须突破的防线。

Each time, you’ll learn something.
每次,你都会学会到一些东西。

Each time, you’ll develop strength, wisdom, and perspective.
每一次,你都将发展你的张力、智慧、和洞察力

Each time, a little more of the competition falls away. Until all that is left is you: the best version of you.” — Ryan Holiday
每次,更多的竞争就会消失。直到你成为最好的自己。——瑞安.霍利迪(障碍就是路)

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

哈哈,祝你好运~~


翻译原文:How to think like a programmer — lessons in problem solving

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容

  • 挣(二) 惠芳婶婶瞬间就有了一种被石化了的感觉——周身的寒毛林立,有嗖嗖的冷风沿着毛孔瞬间漫过了全身。 可就是这样...
    昭昭之辉阅读 691评论 13 13
  • 安望着镜子里终于长到及肩的长发,却怎么也笑不出来。好像生活中能让人快乐的事情都是被动制造的。我们没有心情去辨别一些...
    安妮啊_阅读 325评论 1 1