文档开发者中心
我的

编程到底需要哪些能力?


编程到底需要哪些能力?



1 引子


计算思维(Computational Thinking CT)是近10多年来一直很热门的话题, 因为它涉及到各行各业,面向所有人和所有地方, 它和编程息息相关,涵盖了编程所要求的各项能力,所以科技公司像微软,谷歌,面书都意识到CT的重要性并大力资助CT能力的培养。




2 定义


维基百科的定义是:一组解决问题的方法,该方法涉及以计算机可以执行的方式表达问题及其解决方案。


它的特点的一种表示为3A循环阶段:Abstraction抽象,问题制定:例如某样东西是如何工作的;使用一张纸上的图表来可视化问题,使用计算机对于启动计算思维过程来说并不是必须的。-》Automation自动化,解决方案表达:解决方案的明确精准的表达,以便通过计算机编程,计算机可以执行它。-》Analysis分析,解决方案执行和评估:计算机执行解决方案,显示思维的直接结果


1.png


这三个阶段描述了不同比例的人和计算机责任。解决方案执行主要是计算机的责任,而解决方案的表达主要是人的责任。虽然问题提法通常只被认为是人类的责任,但可以说,它也许更多的是一种混合。计算机也可以帮助支持概念化过程,例如,通过促进视觉思维。简而言之,计算思维是一个迭代过程,通过将人的能力与计算机的能力综合在一起来描述计算思维。


我觉得CMU教授 Jeanette Wing等人2006 对CT的定义更通俗和接近本质:“CT是问题解决过程(Process of Solving Problems),是使用计算机科学概念来解决任何领域的问题,它是每个人应掌握的基本技能,就像阅读、写作和算术一样…CT是人的思维不是计算机的思维,计算思维是人类求解问题的一条途径,但决非试图使人类像计算机那样地思考。计算机枯燥且沉闷;人类聪颖且富有想象力。我们人类赋予计算机以激情。配置了计算设备,我们就能用自己的智慧去解决那些计算时代之前不敢尝试的问题,就能建造那些其功能仅仅受制于我们想象力的系统.” CT的核心目标应该是为人解决问题, 在找到解决方案之前,你必须理解人和从他们的角度了解你正在解决的问题。否则,你伟大的技术解决方案可能毫无用处, CT 的瓶颈是人的好奇心和创造力。


3构成


国际教育技术学会 (ISTE) 和计算机科学教师协会 (CSTA) 与高等教育、工业和  教育的领导者合作,通过调查收集了近 700 名计算机科学教师、研究人员和从业人员的反馈,认为CT是解决问题的过程包含但不限于6部分:


·       问题制定(Formulating Problem)以使我们能够使用计算机和其他工具帮助解决问题

·       逻辑组织和分析(Logically Organizing and Analyzing)数据

·       通过模型和模拟等抽象(Abstractions)方式表示数据

·       通过算法思维(Algorithmic Thinking)自动实现解决方案(一系列有序的步骤)

·       识别、分析和实施(Identifying, Analyzing and Implementing)可能的解决方案,以实现最高效、最有效的步骤和资源组合

·       将问题解决过程概括并延伸(Generalizing and Transferring)到各种问题


具体CT过程分为4个阶段:


1 分解问题(Decomposition): 分解就是将问题分解成更小、更易于管理的部件,然后专注于解决每个较小的问题。


我们可以分解一个复杂的问题,直到较小的部分变得如此简单,变得容易解决。每个更小、更简单的问题的解决方案都建立了我们最初解决的大问题的解决方案。分解有助于使大问题变得不那么可怕。分解是创建可在计算设备上实现的算法和流程的重要技能,因为计算机需要非常具体的指令。他们需要被告知,为了做事,他们需要遵循的每一个微小的步骤。


例如,制作蓝莓蛋糕的总体任务可以分解为3个较小的任务,每个任务都可以轻松执行。


1.烤蛋糕

Ø 将原料放入碗中(黄油、糖、鸡蛋、面粉)

Ø 混合搅拌

Ø 倒入锡纸

Ø 放入烤箱30分钟

Ø 从锡纸中拿出来


2.制作蓝莓结冰


3.放在蛋糕上


2模式识别(Pattern Recognition):注意到相似性、差异、属性或趋势


还是以做蛋糕为例:品尝下蛋糕店的蓝莓蛋糕,并记下其特殊品质和可能的成分。然后,留下些做备用。接下来,找到相关的烹饪书或进行互联网搜索,寻找蓝莓蛋糕的食谱,留意相似之处。基于搜集的数据(Gather of Data)和研究,烤几个蛋糕试试,在味道最像的配方中列出常见成分,并研究每种成分是如何配置的。 这可能显示这些蓝莓蛋糕食谱中的常见模式。


3 概括(Generalization)和 抽象 (Abstraction): 一般化和简化


概括是将问题的解决方案(或解决方案的一部分)进行一般化处理,以便将其应用于其他类似的问题和任务。由于计算机科学中的解决方案是算法,这意味着我们采用一种算法,并使其足够通用,可用于一系列问题,这样我们可以更快更有效的生成解决方案。此过程涉及抽象,因为要使某些内容更一般,我们必须删除与特定问题或情况相关的不必要的细节,但对算法如何工作并不重要的部分,抽象就是简化事物,帮助我们管理复杂性,如果我们把问题准确的无歧义表示出来了,解决方案很多时候就自然呈现出来了。合理的抽象需要确定问题最重要的方面是什么,并隐藏我们不需要关注的其他具体细节。重要方面可用于创建我们处理的原始事物的模型或简化表示形式。然后,我们可以使用此模型来解决问题,而不必一次处理所有琐碎的细节。计算机科学家通常使用多个抽象级别。我们在日常生活中经常使用抽象,例如当我们使用地图时。地图通过排除不必要的细节(如公园中的每个树的位置)向我们展示了一个简化的世界版本,并且只保留地图阅读器所需的最相关的信息,如道路和街道名称。数字设备一直使用抽象; 他们试图向用户隐藏尽可能多的不必要信息。这就是好的算法如 Dijkstra 算法在机器人导引,TCP路由,GPS导航等领域都有广泛应用是因为它的概括性和抽象性好。


我们做蛋糕的模式可以概括抽象后用来做烤制的Cookie,点心等


4 算法设计(Algorithm Design):构建可重复的、分步的过程来解决特定问题


算法是计算思维和计算机科学的核心,哥伦比亚大学教授 Al Aho教授甚至认为:CT是制定问题时涉及的思维过程,以便其解决方案可以表示为计算步骤和算法。因为在计算机科学中,问题的解决方案不仅仅是一个答案,它们是算法。算法是解决问题或完成任务的分步过程。如果正确遵循算法的步骤,即使对于不同的输入,也会找到正确的解决方案。例如,我们可以使用算法在地图上查找两个位置之间的最短路径;相同的算法可用于任何一对起始点和终点点,因此解决方案取决于算法的输入。如果我们知道解决问题的算法,那么我们可以随时轻松解决这个问题,而无需思考。我们可以按照步骤操作。计算机不能自己思考,所以需要给予他们算法来做事。算法思维是算法创建的过程。当我们创建一个算法来解决问题时,我们称之为算法解决方案。在判断我们的解决方案时,我们需要考虑一系列因素。例如,这些过程(算法)需要多长时间才能解决问题,它能否可靠地解决问题,或者在某些情况下,它会以非常不同的方式执行。我们有不同的方法可以评估我们的算法解决方案。我们可以通过在计算机上实现来测试它们的速度;或者,我们可以通过计算或计算它们可能采取多少步骤来分析它们。我们可以测试我们的算法解决方案是否正常工作,给他们很多不同的输入,并检查它们是否按预期工作。当我们这样做时,我们需要考虑我们测试的不同输入,因为我们不想检查每个可能的输入,但我们仍然需要知道我们的算法解决方案是否适用于所有输入。我们通常不能测试每一个可能的输入,我们也应该尝试用逻辑推理(Logic Reasoning)来评估一个系统。跟踪程序中的 Bug 还需要逻辑思维,找出程序中出错的位置和原因。当试图解决问题时,我们需要逻辑地思考。逻辑推理就是通过观察、收集数据、思考你所知道的事实,然后根据你已经知道的事实来找出事情发生的原因。它帮助我们利用现有的知识来制定规则并检查事实。在更深的层次上,计算机完全基于逻辑构建。


以做蛋糕为例,我们可以写一个食谱:一个分步指南,使蛋糕,包括成分,每个成分如何处理,以什么顺序等。做蛋糕要成功,可以和朋友分享,以获得一些真实的反馈。如果做的不是很成功,要确定为什么不成功。实验和测试对于任何有效算法或蛋糕配方的开发都至关重要。逻辑判断和处理来识别问题和改进是非常重要的,这样我们可以持续优化我们的算法。



4 相关因素


Jesús Moreno-León 等学者2018年在IEEE 全球工程师教育峰会上发表的论文显示, 影响CT技能的可识别的2大领域是人的秉性(Personality Factors)和主要心智能力(Primary Mental Abilities). 非常有意思的是IEEE的软件人员能力模型SWECOM(Software Engineering  Competency Model)也有类似观点:认为技术技能的关键2块有行为特征和技能(Behavioral Attributes) 和认知技能(Cognitive Skills)


2.png


IEEE SWECOM认为秉性部分包括:


天分,主动,热情,工作道德,愿意,可信,文化敏感度,沟通能力,团队参与能力,技术领导能力


在秉性方面,国际教育技术学会 (ISTE) 和计算机科学教师协会 (CSTA)认为有:


·       有信心处理复杂性

·       坚持解决难题

·       对歧义的容忍度

·       处理开放式问题的能力

·       与他人沟通和合作以实现共同目标或解决方案的能力


对公司而言,秉性的部分我认为可以通过招聘,绩效牵引和文化熏陶等方式来识别和培养有CT潜质的人。


主要心智能力方面(Cognitive)IEEE SWECOM 认为有: 逻辑推理(Reasoning),分析(Analytical Skills),解决问题(Problem Solving)和创新(Innovation).具体的认知过程例子如比较、排序、搜索,分类、递归等。


巴丁大学教授Hatice YildizDurak 等人在2017年9月的《计算机和教育》杂志上发表的论文显示,CT的影响因素有很多:数学类学术成功,对数学类课程的接受度,教育水平,科学类学术成功,信息技术学术成功,对信息技术类态度,性别,IT使用经验,每日互联网时期使用和对科学类课程的接受度,等。根据模型分析结果,认为思维方式(Ways of Thinking)直接影响计算思维。得出在有效模型中预测计算思维能力的最有效变量是思维方式的结论。这个结论非常符合常理,因为程序员是脑力工作者,能不能想的明白是程序员成败的关键所在,例如想的是不是系统,有没有逻辑性,够不够严密,能不能抓住核心和重点等。只有勤于思考,想的明白,设计的精准,写的清楚的程序员才是好的程序员,在产品是第一竞争力的时代,一个程序员的真正价值也在于他的思考能力和思考能力所表现出来的创造力和想象力。



5与编程的关系


CT不等于编程,但很多研究表明目前编程是训练和模拟CT的有效工具和重要手段,北航教授尹宝林在2019的中国计算机学会论文中通过人的认知规律和历史经验中得出结论: 编程是培养计算思维的必由之路。从另一个角度来说,计算思维是按照计算机科学的基本概念和方法,用来理解需求、设计系统、实现编程、解决问题的思维方法。其实,计算思维就是计算机科学家是如何思考的。思维方式和解决问题的思路,我们认为这个是程序员的基本功,计算思维能力弱,功能再强大的编程语言也无济于事。



总结:


CT至关重要,其核心是算法思维的合理抽象,高效解决问题。编程是有效训练CT的手段。CT受人的秉性和认知能力等方面影响,在提升认知能力方面,应当重点关注优秀的思维方式的建立,在人的秉性方面,可以通过有效招聘,绩效牵引,文化熏陶等方式识别和培养CT潜质。

点赞
1
收藏
2
回复
3
分享
举报
浏览1035 编辑于2019-10-18 01:37未知归属地
全部评论
最多点赞
最新发布
最早发布

亲测,回答的没问题


3楼回复于2019-10-19 04:02 未知归属地

相当好的总结,细读后受益匪浅,感谢大牛

2楼回复于2019-10-18 02:02 未知归属地

欢迎加入开发者联盟论坛!


这篇文章要好好研读一下

1楼回复于2019-10-18 01:39 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。