返回介绍

7.2 利用现有知识

发布于 2024-08-18 12:13:32 字数 1567 浏览 0 评论 0 收藏 0

派珀特在让学生们利用现有技能知识学习新技能时非常仔细。我们总是这样做,有时是自觉的行为,有时则不是。

把事物分成大脑足以容纳的几部分。

Try mind-size bites.

当面对一个棘手的问题时,你可以采用几种经典的方法。首先,能否把问题分成若干个更小的、更易于管理的部分?这种功能分解对软件开发人员非常实用:把事物分成大脑足以容纳的几部分。另一种流行的方法是想一想你之前解决过的类似问题。这个问题与那一个相似吗?你能使用类似的解决方案吗?还是用另一种方案解决这个新问题?

波利亚写过一本非常具有影响力的书,详细介绍了解决问题的若干经典技术,并描述了具体步骤(How to Solve It: A New Aspect of Mathematical Method [PC85],参见下面的概要)。

波利亚的解题方法

解决问题时,先提问自己。

- 未知量是什么?

- 已知量是什么?

- 条件是什么?

然后制定一个计划,执行之,回顾结果。波利亚建议的一些技巧(如下所示)听起来非常熟悉。

- 努力回想拥有相同或类似未知量的常见问题。

- 画一张图。

- 解决一个相关的或者更简单的问题,放宽限制,或者使用已知量的子集。

- 所有已知量和条件都用上了吗?如果没有,为什么?

- 尝试重新叙述这个问题。

- 尝试从未知量推到已知量。


波利亚的一个关键建议是寻找以前类似的解决方案:如果你解决不了这个问题,你知道如何解决类似的问题吗?也许相似点是完全一致的(比如“这就像我上周看到的bug”),或者是一种隐喻关系(比如“数据库的工作情况就像是一滩水”)。通过类似的方式,派珀特的学生能够利用现有的、心领神会的知识(健身操、社会交往、语言,等等),以此了解乌龟的微观世界和学习新的编程技能。

但是寻找类似点也有坏处。

你学习了一门新语言,概念与你的上一门语言相关。这就是为什么多少年来我看到如此多的C++代码看起来像C,如此多的Java代码看起来像C++,如此多的Ruby代码看起来像Java,等等。这是从一套技能到下一套技能的正常过渡。

危险就在于没有完成过渡和坚持混合的方式,当你没有完全接受新技能而是处于过渡状态中时,新老方式被混杂在一起,这时就有危险。你需要学多少就得忘多少。例如,从赶马车到开汽车,从打字员到使用计算机,从过程式编程到面向对象编程,从桌面的单应用到云计算。每一种转化,新的方式从根本上与旧的不同。既然是彻底不同,你就必须放弃旧的方式。

诀窍34

从相似点中学习,从差异中忘却。


另一个危险是你对以前“相似”问题的理解可能是完全错误的。例如,当尝试学习一门函数式编程语言时,如Erlang或者Haskell,很多你之前学习的编程知识会阻碍你的学习。从所有顶用的方面来看,它们与传统的过程式语言不同。

失败潜伏在每一个角落。这是一件好事,我们马上就会看到。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文