元能力:向程序员学习怎样有效解决问题

乔布斯曾说,每个人都应该学习编程,因为它能教会你思考。编程是程序员的工作,反应程序员的思考过程,体现他们解决问题的方法。

解决问题是一种元能力,是一个人最基本最核心的技能。当一个人没有解决问题的框架,在碰到一个问题时,通常这样(大部分新手程序员也这样开始学编程):

  • 1)尝试一种解决方法,

  • 2)失败,换一种再试,

  • 3)如果还不行,重复第二步,直到幸运女神降临。

有时候会很幸运,通过胡乱「试误」得到答案,但这是最没效率的方法,是对时间的极大浪费,就像一只苍蝇在瓶子里乱撞,不过凑巧碰到了出口。

个人的价值体现在解决问题的能力上,你能解决多大的问题,也意味着你有多大价值。几乎所有雇主都把解决问题的能力放在首位。如果你是创业者,顾客就是你的雇主,你提供的产品是解决方案,你能帮客户解决的麻烦越大,你的产品也越有价值,但是在提供方案前,先想你要解决的问题。

精益创业有句口号是:

爱上问题,而不是你的解决方案。

但很多人花时间学习知识,很少学习如何解决问题,资深程序员,自媒体作者 Richard Reis 认为优秀程序员解决问题时,会:

A)找到一个开发框架,B)在框架内不断练习。

下面是4个具体步骤:

1.理解

首先要理解问题。很多人一接触到问题,就急急忙忙开始找方法。这就如同我们上学做阅读理解,你不认真读原文,你就不可能找出正确答案。

如果你不能简单地解释一件事,你就没有理解它。

—— 理查德·费曼

检验你有没有理解事物的一个方式看你能不能清晰、准确的的表达它。经常会碰到有朋友过来提问题,在跟你讲解的过程中,突然说「我知道了,我知道该怎么做了」。

这就是通过给别人讲述,促进理解问题。大部分情况下,理解了问题,就能知道该如何解决。

不一定非要找一个人听你解释,我们可以自我解释,说给自己听,尝试用自己的语言复述问题,或者写出来,用图画出来,这也是费曼技巧的要点。

2.计划

一定要规划。我们说计划赶不上变化,没有一项战前计划能指挥作战行动。但计划还是很有必要,规划这个过程能进一步促使你理解问题,思考怎样做。它还让你梳理资源,确定要采取的对策以及明确时间节点。

计划的作用不是要你按部就班的执行,它更像迷路时的北极星,航海时的灯塔,帮助校正方向,行动过程中不要离题太远。

一个好的计划能够回答:如果输入X,采取什么步骤可以取得结果Y?

3.分解

我曾分享过模块化思考,这也是计算机处理问题的基本方法——分治。不要试图解决一个大的问题,要把它分解为更小的子问题,不断分解,直到这些子问题能够容易解决。

然后从最简单的开始,分别求解,最简单的意思就是,你知道怎样解决。最简单还意味着,它是独立的问题,不受其他问题影响。

当你解决了每个子问题后,将这些子问题的解整合,它就是原始问题的答案,这是一个综合的过程。而前面我们分解问题是分析。解决问题时分析与综合不断交错。

这一方法最早是笛卡尔提出来的,也是17世纪后,科技大爆发的主要原因。牛顿说他站在巨人肩上,这个巨人指的就是笛卡尔。

笛卡尔的这个科学方法论是解决问题的基石,解决所有的问题都要遵循这个技术,一定要理解并记住它。

4.卡壳

有时候,你顺畅地获得了答案。但很多情况下,你会卡住。这很正常 ,所有人都会卡,只有一种人不卡——从不解决问题的人。

卡住后,先舒一口气,冷静下来,如果你是一个积极进步的人,可能还有点兴奋,因为遇到了挑战。下面是卡壳后的三种正确姿势:

1)调试

调试是程序员的基本功,他们叫debug ,戏称捉虫。调试是一门通过试错寻找答案的艺术,这里的试错不同于前面新手一样的盲目试错,是一种「有纪律的试错」,善于解决问题的程序员都有一套高效的调试流程。

他们会对卡住的可能原因排好优先级,有纪律的调试。定位原因(这既要知识也需要经验),发现程序真正做了什么,而不是自认为应该需要程序做什么。

2)重新评估

退一步海阔天空,不妨尝试换一个角度,最初的切入角度是不是错了,或者我们太关注当前的细节,而忽视了更一般的原则。

甚至有时候,你得从头开始,推倒重来后,你可能会有柳暗花明又一村的感觉。

3)研究

研究就是搜索,借鉴其他人的解法。你遇到的问题,很可能是其他人也遇到过。找到那个人或者他的解决方案,看看他是如何处理的。

即使你解决了问题,也应该看看别人怎样做。你能从其他人的方法中学到很多。

注意:一定不要搜索大问题的解决方案,只搜索当前卡住你的子问题的解决方案,然后再逐步向上。只有当你自己努力解决问题时,你才是学习,直接使用别人的做法,吃现成饭,不能提升你解决问题的能力。

练习

不要指望一周后你就能是一个解决问题的高手。想要成为一个问题解决专家,你需要解决很多问题,你得做大量练习。程序员有个好处就是编程环境能够马上给予反馈,正确的代码能得出正确的结果,错误的代码立即报错。

我想这也是乔布斯为什么提议每个人都学编程的原因,因为试错成本低,想一想,这个世界上还有比写代码训练解决问题更低的成本吗?

你不想写代码也可以,你可以从你喜欢的,感兴趣的任何地方开始。解决问题的模式是相通的,算一道数学题,回答一个知乎问题,都是解决问题,你都可以用前面的四步法练习这个能力。

结语:

解决问题的能力是提升价值的元技能。它也是能够培养的一项技能。希望你遇到许多问题,你现在知道了怎样解决,而且每学到一个方法,你都前进了一步。

当你认为已经成功的克服了一个障碍后,另一个障碍出现了,这也是生活真正有趣的原因。生活就是不断解决问题,突破障碍的过程,每次你都能从中学到一些东西,你都会获得力量,智慧和洞察力。

相关文章:

思维模型No.52|一种保证效果的学习方法:费曼技巧

人人都能用:产品经理的优先级排序公式

(0)

相关推荐

  • 软件开发的那些真理,上大学时我怎么就没记住

    作者丨Ryland 很多开发者在编程多年以后,总是在实际工作的惨痛教训中学会了一些本该在大学时期就掌握的软件开发真理.我太难了,早干嘛去了-- 1.不要太在意"代码行数" 你可能听 ...

  • 像程序员一样思考——提高解决问题的能力

    在以前的文章中,曾经提过"技术人员的价值,不在于你能写出多么优美的代码,也不在于你能设计出一个多么大而全的高屋建瓴的架构,而在于你实实在在的解决问题的能力,在于你使用技术手段服务于业务的能力 ...

  • 最值得学的编程语言是什么?编程语言通用学习方法分享!

    如果您对编程有兴趣,想要以后致力于编程这个方向,那是肯定要下一番苦功夫的.说实话没有一门编程语言是好学的,要是那么简单就可以学会了,那是个人就是程序员了. 最值得学的编程语言是什么? 零基础学习编程首 ...

  • 《编程的修炼》:程序员的思维必修课

    <编程的修炼>:程序员的思维必修课 原创程序猿阿诺2021-01-13 16:55:05 引言 中国的互联网行业在过去二十年中,迎来了跨越式的发展,以至于能在世界上有一席之地.这一堪称奇迹 ...

  • 全球最火的程序员学习路线,没有之一!

    国外有一个爆火的开发人员学习路线,目前已经在 Github收获了 152 k+ star,Star 数量在 Github 所有仓库中排名第 9 .这个仓库有多火就不用说了吧! 作为程序员,如果你还不知 ...

  • 2021年Java程序员学习路线图大纲

    第一阶段 Java基础: 面向对象 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式. 集合 即集合是&quo ...

  • 没有适应能力的程序员,必定将被取代

    神译局 准备好改变--或者被改变. 神译局是36氪旗下编译团队,关注科技.商业.职场.生活等领域,重点介绍国外的新技术.新观点.新风向. 编者按:提到未来会被取代的职业,我们大多数能想到的都是司机.银 ...

  • 优秀程序员必备以下五点能力,你都符合吗?

    与30年前相比,现在互联网时代的程序员已经有了很多细分的研发方向,比如前端.后端.算法.桌面软件.人工智能等等,不同的细分方向,也都有不同的要求.但不论选择什么方向,一名优秀的程序员都应具备下面这五点 ...

  • 初级程序员,到高级需要学习哪些东西

    很多初学者,在一开始学习IT时都不知道如何入手,小编今天就根据自己的经验给大家说说,初学者最重要的三个问题. <计算机基础>学习 <计算机基础>,这是所有读者大学最开始都会上的 ...

  • 程序员思维修炼32:费曼学习法-最有效的深度学习方法

    程序员思维修炼32:费曼学习法-最有效的深度学习方法

  • 程序员的“终身学习”问题:如何持续而不感到倦怠?

    神译局  · 昨天 关注 尽量找到乐趣,以及可持续的长期动力.做好权衡,而不是遵循教条. 神译局是36氪旗下编译团队,关注科技.商业.职场.生活等领域,重点介绍国外的新技术.新观点.新风向. 编者按: ...

  • 程序员,不要急于学习编程语言,先学会如何解决问题

    这是一篇关于虚度青春的短篇回忆录. 多年来,我一直在学习编程语言,然后用它们来构建更好的投资工具.在建立预测和风险管理模型之余,编程方面的工作堆积如山. 但实际上,我并没有花太多时间在真正需要解决的问 ...