高中生应该必修编程课程吗?

编程是数字素养的关键吗?还是我们需要在未来的领导者身上培养更重要的技能?
201 位读者喜欢这篇文章。
question mark in chalk

TeroVesalainen via Pixabay CC0

孩子们应该具备技术素养吗?当然!将他们培养成程序员是教授这项技能的最佳方式吗?嗯,这是一个更难回答的问题。

首先,坦率地说,在世界上的许多地方,即使在富裕地区,学校也没有能力处理这项任务。除了缺乏物理技术外,许多学校还缺乏足够的师资资源来教授编程课程。

其次,重要的是要注意计算机科学和编程不是同一回事。两者都很重要,但在学术课程中,根据学生希望学习的课程,教授计算机科学和形式逻辑可能同样有用。

第三,编程和计算机素养也不是同一回事。完全有可能成为计算机高级用户而不会编程,也同样有可能成为程序员,但实际上对他们正在使用的系统以及如何针对他们的用途进行优化知之甚少。

第四,教学时间是有限的。并非每个人最终都会在日常工作中使用计算机编程,那么从其他科目中抽出时间真的会带来最佳结果吗?

话虽如此,仍然有理由支持它。

未来是数字化的,软件正在吞噬世界。要从根本上理解当算法而不是人类做出决策时世界是如何运作的,就需要对算法是什么以及它是如何创建的有一些基本的了解。编程不仅仅是制造东西,而是理解东西是如何制造出来的。

坦率地说,世界需要更多的程序员。需要编写和管理的代码比以往任何时候都多,虽然人工智能和自动化可能会改变程序员的工作内容,但这不会改变对他们的需求。

但更进一步地说,理解至少是编程的基础知识对于充分利用开源的好处非常重要。拥有可供审查、编辑和共享的代码(根据开放许可)非常重要,但是如果您因为自己无法进行希望进行的更改而受限,您真的能充分利用开放许可的全部力量吗?

双方都有充分的理由。

你怎么看?今天的每个孩子都应该学习编程吗?为什么?或者为什么不应该?

 

标签
User profile image.
Jason 是 Opensource.com 的工作人员,也是 2013 年至 2022 年的 Red Hatter 成员。此个人资料包含他在那段时间内与工作相关的文章。其他贡献可以在他的个人帐户中找到。

17 条评论

如果我们认为教育应该是关于开发年轻人的思维,那么编程有很多东西可以帮助你学习以逻辑的方式思考和计划。它首先分析问题,将其转化为一个循序渐进的过程,然后梳理出逻辑上的垫脚石来组装解决方案。
最大的困难是,可能很少有教师有编程经验,而且人们怀疑他们是否会有兴趣学习编程。

Greg,我同意。说得好。可以(并且已经)为技术知识的不同原因和不同方面提出论点……但是,表达需求并制定解决方案计划的能力是许多人无法展示的“必须”。虽然这项技能源于 IT 行业,但它在我们生活的各个方面都很有价值,而不仅仅是在处理计算机时。可悲的是,世界已经变成了一个情感和直觉反应占主导地位的地方,而“解决方案”往往充其量是短视的,在许多情况下是完全错误的。能够有效地找到快速的战术解决方案作为可持续解决方案的垫脚石比大多数人意识到的更有价值。

回复 作者:Greg P

“它首先分析问题,将其转化为一个循序渐进的过程,然后梳理出逻辑上的垫脚石来组装解决方案。”

这听起来像是所谓的计算思维。学习 BASIC 编程可以培养这种思维模式;计算机科学专业的学生必须摒弃这种思维模式,才能通过分解而不是按顺序进行逻辑思考和编程。你将如何教授并行编程?

回复 作者:Greg P

我投了反对票,原因有二。首先,我通常对将中等教育用作职业培训手段持怀疑态度。其次,正如您指出的那样,编程与计算机素养不同。计算机素养在 2018 年是一项至关重要的技能。编程则不然。我宁愿看到逻辑课成为必修课,而不是编程课。

无耻的自我推销:几个月前,我在我的博客上写了一篇更长的评论 https://funnelfiasco.com/blog/2018/06/07/everyone-needs-programming/

“计算机素养是一项至关重要的技能”

计算机素养到底是什么?这听起来像是必须学习几种编程语言,然后通过研究比尔·盖茨的生平和阅读他编写的所有程序来完成博士论文。不如莎士比亚有用。

信息学(计算机科学)是应用数学的一个分支,编程是其中的很大一部分。我绝对支持中等教育中的数学,如果老师顺便教一点编程,数学可能会更有趣。

“而且世界确实需要更多的程序员。”

世界需要的是更少的程序员,但它确实需要可以编程的计算机科学毕业生。问题是,当前的所谓程序员无法编写出没有错误的代码,因此他们的代码应该是非法的。虽然计算机科学教授声称有一种编程方法,但到目前为止,他们还无法将其教给 IT 行业。

回复 作者:bcotton

计算机素养绝对应该在成年人口中普及,并希望在所有青少年人口中普遍发展。我不确定编程素养是这种素养最重要的组成部分。虽然旧谚语“要么编程,要么被编程”有一定道理,但我目前更关心公众的数据素养水平。围绕反恐、执法等方面的公共政策讨论充满了关于“跨部门信息共享”的讨论,而受到广泛关注的消费者问题包括“隐私政策”、“数据经纪人”和据称已剥离“个人身份数据”的数据集。作为一种预防或公共卫生措施,我建议开设一门高中课程,强烈鼓励(如果不是强制要求)介绍数据库概念,也许可以使用 SQL(在我看来,SQL 的学习曲线平缓且直观,但我的经验可能不典型)。我希望这种介绍至少能让学生掌握表连接的概念。这是因为(在我看来)这是 SQL “魔力”发生的地方。这就是为什么访问两个数据集比访问一个数据集赋予的信息力量(信息“就是”力量)多两倍以上。我建议的数据素养课程的练习会提出以下问题:

* 您将如何尝试从这个已剥离身份信息的数据库记录中推断出个人身份?

* 您将如何设计一个系统来计算此数据集中每个[人、产品、地点等]的数字“分数”,您的目标是更高的分数可能预示着更高的[犯罪发生、贷款拖欠、消费者购买等]概率?

* 您将如何构建推荐引擎?同样,我希望重点更多地放在数据的选择以及数据关系上,以便融入推荐,以及以何种方式融入推荐。

还有一件事:我参加过的太多编程课程(在传统学院和大学中)过分依赖于过于简化和不切实际的准商业问题。我似乎记得一个“为一个简单的假设航空公司编写一个简单的预订系统”之类的东西。难怪没有入门级工作。我希望数据素养课程的数据集是经验性的,也就是说,真实世界的数据。我也希望至少有一些数据集是比较大的。请记住,(不幸的是,出于我的目的)信息不想免费,一些课堂作业可能是数据收集作业,也许是派学生出去进行一些调查,或者保持食物日记,或者进行一些 GPS 测量等等。

我认为基本了解什么是编程,以及进行一些简单的(应用级)编程的能力很重要。我认为试图让每个人都成为系统程序员是毫无意义的。

为了比较,考虑另一个领域 - 汽车维修。试图让每个高中生都成为 ASE 认证的机械师是没有意义的。但是每个人都应该了解汽车工作原理的基础知识,以及如何执行基本的维修/维护工作(例如,如何更换轮胎、如何更换空气滤清器、更换前灯或尾灯等)。即使这个人长大后会成为一个打电话给汽车俱乐部来加注清洗液的人,但重要的是要理解这没什么神奇的,而且如果他愿意,他可以自己完成这项工作。

我认为这尤其重要,因为我们日常使用的技术如此先进,以至于对许多人来说,它与魔法没有什么区别。我不希望人们认为他们完全无法理解计算机、手机或互联网是如何工作的。他们不需要能够设计设备或网络,但他们应该能够理解基本的操作原理,以及如何执行日常任务(例如,如何设置家庭 LAN 路由器,或者知道当您加载网页时您的数据包会去哪里)。

这必然包括少量编程,但我认为这是一件好事 - 它可以揭开技术的神秘面纱,并表明这是任何人都有能力理解的东西。

当然,它也会激励一些人想要深入学习技术 - 这些孩子将成为下一代发明家和开发者。

我们需要再次将宪法和法律设为必修课。我们需要将银行、利率如何运作、货币如何运作设为必修课。编码在课程变得有用之前就会发生变化。

您说到了点子上。这里的根本问题是我们的孩子需要成为有效的公民。尽管我喜欢编程,但公民教育是有限的课堂时间更好的利用。

回复 作者:Marty Buchaus (未验证)

我投了“视情况而定”,因为我看到 K-12 编程教学中存在一些下意识的反应。我认为强调批判性思维和问题解决能力,并使用编程(无论是 Scratch、Python、Javascript 还是其他任何东西)的课程是一个好方法。我认为编程必须有一个背景。我认为将编程与数学、科学,更具体地说是数据科学联系起来的学校正在为他们的学生提供真正的服务,但太多的学校只是为了编程而编程,而没有背景。使用 Python 让数学、科学甚至语言艺术生动起来会很酷。使用 Scratch 教授动画。使用 Python 和/或 Minecraft 教授游戏开发。这只是我的一些想法。很棒的文章,很棒的问题,也很棒的讨论。

我认为学习编程有很多价值。我不在乎你以后是否在 IT 行业工作,但是学习一点编程可以消除很多人对技术的“它是魔法”的印象。

一个月前,我在一次关于人机共生的演讲中谈到了这个话题。

在这里你可以找到带有幻灯片和视频链接的文字记录:http://www.tesio.it/2018/10/06/the-intelligent-symbiosis.html

能够编程是“现在”公民身份的先决条件。

我们的政治家不断地被他们的无知所操纵。
我们的儿子也是如此。

我们需要培养一代黑客,让他们能够成为我们生活的控制论世界的积极成员。

我投了反对票。我认为培养批判性思维能力更为重要。如果一个人能够批判性和逻辑性地思考问题,那么教一个人如何用特定语言的语法表达想法或可能的解决方案就会容易得多。

似乎如果在学习批判性思维之前先学习编程语言,就更难意识到学习的编程语言可能不适合所有问题。一切都不是对象。函数式编程无法解决世界上所有的问题。如果你只有一把锤子,那么一切仍然不是钉子。

我看到一些关于批判性思维/问题解决的评论。这就是基本编程所教的。我非常赞成将逻辑编程作为任何计算机科学课程的第一步。它教会学生如何找到问题的解决方案,而不仅仅是学习语法。事实上,我上的第一门编程课程是从伪代码开始的。多年以后,我仍然遇到一些大学生无法理解解决方案的概念。所以他们永远无法编写代码。另一个学习解决问题的好课程是物理学。

是的,还有许多其他主题,例如合同法、家庭法和消费者法的概述,以及制定这些法律的立法程序。教育的目的是为您提供在社会中navigate的技能,而不仅仅是获得高薪职业。

“教育”和“培训”之间有很大的区别。我的妻子是一位退休的 IT 培训师,她问人们“你希望你的女儿接受性教育,还是性培训?”

我故意避免讨论“价值观教育”的烂摊子,因为无论你站在哪一边,它都可能是洗脑的同义词。

计算机科学不仅仅是编程。
我是一名老牌计算机科学工程师(五年制学位),显然我了解编码原则和一些较旧的语言,但我最近从未编写超过 40 行代码 :-)

首先,由于大多数订阅 opensource.com 的人倾向于信息和计算机技术,因此这项民意调查的结果很可能对程序员有利。其次,尽管编程在当今技术驱动的世界中至关重要,但在生活的许多方面,这种程度的计算机科学是可选的——所以,我认为候选人最终应该做出这个选择。尽管我发现,如果没有一些自动化(最终需要编程/脚本编写技能),解决问题变得越来越困难

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.