澎湃Logo
下载客户端

登录

  • +1

编程思维究竟是怎样解决问题的?如何培养孩子这方面能力?

2021-02-04 21:41
来源:澎湃新闻·澎湃号·湃客
字号

看点 拥有知识不是目的,是必要的基础和手段,解决问题才是目的!我们的现状是满脑子的知识和标准答案,而缺乏很多重要的能力。其中最重要的能力包括:生存能力、学习能力、思辨能力(批判能力)、创新能力等等。

我们从未接受过解决问题的训练,所以今天给大家推荐一种能帮助我们解决问题的思维方式:编程思维。

编程的核心,不是编程,不是语法,甚至不是算法或数据结构本身,恰恰是如何分解问题——发现规律建立解决问题模型,映射到合适的数据结构和算法上,最后才根据算法写程序实现。

什么是编程思维?

以下是美国计算机科学家、卡内基-梅隆大学教授周以真(Jeannette M. Wing)教授写的的一篇论文《计算思维(Computational Thinking)》。计算思维的覆盖面更广,也同样能够解释什么是编程思维。

它代表着一种普遍的认识和一类普适的技能,每一个人,不仅仅是计算机科学家,都应热心于它的学习和运用。

计算思维是每个人的基本技能,不仅仅属于计算机科学家。在阅读、写作和算术(英文简称3R)之外,我们应当将计算思维加到每个孩子的解析能力之中。正如印刷出版促进了3R的传播,计算和计算机也以类似的正反馈促进了计算思维的传播。

计算思维涉及运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为。计算思维涵盖了反映计算机科学之广泛性的一系列思维活动。

当求解一个特定的问题时,我们会问:解决这个问题有多困难?怎样才是最佳的解决之道? 计算机科学根据坚实的理论基础来准确地回答这些问题。表明问题的困难程度是为了考量机器——就是用来运行其解的计算工具之基本能力。我们必须考虑机器的指令系统、它的资源约束和它的操作环境。

为了有效地求解一个问题,我们可能要进一步问:一个近似解是否就足够了,是否可以利用一下随机化,以及是否允许误正或误负。计算思维就是把一个看来困难的问题重新阐述成一个我们知道怎样解的问题,如通过约简、嵌入、转化和仿真的方法。

计算思维采用了抽象和分解来迎战浩大复杂的任务或者设计巨大复杂的系统。它是关注的分离。它是选择合适的方式去陈述一个问题,或者是选择合适的方式对一个问题的相关方面建模使其易于处理。它是利用不变量简明扼要且表述性地刻画系统的行为。它是我们在不必理解每一个细节的情况下就能够安全地使用、调整和影响一个大型复杂系统的信心。它就是为预期的多个用户而进行的模块化,它就是为预期的未来应用而进行的预置和缓存。

计算思维是通过冗余、堵错、纠错的方式,在最坏情况下进行预防、保护和恢复的一种思维。它称堵塞为死结,叫合同为界面。它就是学习在谐调同步相互会合时如何避免竞争的情形。

(周以真Jeannette M. Wing教授)

—解释一下编程思维—

从本质上讲,它是一种更有效的解决问题的方法。在这篇文章中,我的目的是用这种方式告诉你什么是编程思维,同时你就会知道怎样才能更好的解决问题。

我们每天都会遇到很多问题,我们处理问题的方式有时候都是随机的,比如:先试着解决方案,如果不行就再试一次,再没有效果就重复第二步直到运气好的时候。

这样解决问题的方法是最糟糕的方法,也非常浪费时间!

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

—拥有编程思维的人如何解决问题?—

步骤如下:

01 理解

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

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

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

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

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

02 计划

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

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

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

03 拆分

这是最重要的一步,不要试图一次就解决一个大问题,相反,当你把这个问题进行拆分成一个一个子问题,这些子问题就更加容易解决了。然后,逐个解决每个子问题,从最简单的开始。最简单意味着,你知道答案(或者更加接近那个答案)。另外最简单的方法意味着子问题的解决并不依赖于其他问题的解决。一旦你解决了每个子问题,再把这些点连接起来,连接所有“子解决方案” ,将为你提供的原始问题的解决方法!

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

如果我能交给每一个初学者一种解决问题的技能,那就是“减少问题这个技能” ,例如:假设你是一个新程序员,你被要求编写一个程序,读取10个数字,然后算出哪个数字是第三高的,对于一个全新的程序员来说,这可能是一项艰巨的任务,尽管它只需要基本的编程语法。如果你陷入困境,你就应该把问题简化。而不是专注在第三个高的数字上。如何在一个整体中先找到最高的那个数呢?还是太难了?那从三个数字中找到最大的那个呢?还是太难?那如果是寻找两个较大的那个呢?

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

04 卡住了呢?

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

首先,深呼吸。因为这个很正常!别担心,朋友,每个人都会这样子!不同之处在于,最好的程序员(问题解决者),对bug(错误)更加好奇,而不是恼怒!

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

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

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

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

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

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

网络搜索:不管你有什么问题,可能有人已经解决了。找到那个人解决的方案。事实上,就算你解决了问题,也应该去多搜索其他人做的案例,你可以从别人的解决方案中学到很多。

(注意:不要寻找解决大问题的方法,只寻找子问题的解决方案。)

05 实践

不要期望仅仅一个星期就能变的很厉害,如果你想成为一个好的问题的解决者,就应该去解决很多问题!练习、练习、练习!迟早你会认识到这个问题可以通过很轻松的方式来解决。

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

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

人工智能时代,如何培养孩子的编程思维?

TED著名演说家同时也是程序设计人员——Linda Liukas给了我们答案。

她是如何开始学编程的?

Linda提到,她最早接触编程的时候,是在14岁,那时候,年少的她疯狂迷恋一个男子,她非常想将心中的爱慕之意表达出来,所以,她开始学习写代码,并为他创建了一个网站。

她将编程作为一种自我表达的方式,像小时候用蜡笔或者乐高搭建自己的梦想世界,长大后用诗歌,写作表达情感一样。

起初,她的父母不理解,经常会打断孩子学计算机的想法,在他们眼中,计算机是一种深奥古怪的学科,因为计算机会涉及到很多句法规则,控制程序,数据程序等知识。

但她并不这样认为,反而心中会有很多疑问,什么是冒泡排列算法?电脑如何知道效果的?如何遵循指令,实现效果?

她说道:“编程既不是魔法,也没那么复杂,它只是运转速度特别快,学习一系列编程知识,其实是在锻炼我们的模式识别技能,当我们对编程着迷时,其实是在遵循一些列象征性的指令,在计算机里实现英语与数学的连接。”

在这个互联网时代,孩子可以通过点击,滑动,缩放的方式认识世界,但是,如果不给他们提供工具,教他们用电脑创作,那我们只是在培养消费者而不是创作者。

所以,你应该做的是,找到一个练习的方式,可以让你解决很多小问题的东西。因为所有的问题都有相似的模式!

06 结论

现在,你知道“编程思维” 有多重要了吧!

祝你遇到很多问题。你没看错,这样你可以反复的练习如何解决问题,同时,你将了解到,每一种解决方案都会使你得到改进!

最后,以乔布斯的话来结尾:我觉得每个人都应该学习一门编程语言。学习编程教你如何思考,就像学法律一样学法律并不一定要为了做律师,但法律教你一种思考方式。学习编程也一样,我把计算机科学看成是教育,每个人都应该花至少1年时间学习编程。——Steve Jobs

来源:Robotutor青少儿编程、泉州青少年人工智能教育、易编玩

(声明:除STEAM在线原创文章外,STEAM在线分享和转载的文章皆为促进STEAM教育在中国的传播,仅做学习交流,非商业用途,都会注明来源,如文章、照片的原作者有异议,请联系后台快速处理或删除,谢谢支持。)

原标题:《编程思维究竟是怎样解决问题的?如何培养孩子这方面能力?》

阅读原文

    本文为澎湃号作者或机构在澎湃新闻上传并发布,仅代表该作者或机构观点,不代表澎湃新闻的观点或立场,澎湃新闻仅提供信息发布平台。申请澎湃号请用电脑访问http://renzheng.thepaper.cn。

    +1
    收藏
    我要举报

            扫码下载澎湃新闻客户端

            沪ICP备14003370号

            沪公网安备31010602000299号

            互联网新闻信息服务许可证:31120170006

            增值电信业务经营许可证:沪B2-2017116

            © 2014-2024 上海东方报业有限公司

            反馈