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

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

TeroVesalainen via Pixabay CC0

孩子们应该具备技术素养吗?当然!培养这项技能的最佳方式是让他们成为程序员吗?嗯,这是一个更棘手的问题。

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

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

第三,编程和计算机素养也不是同一回事。完全有可能成为计算机高级用户而不知道如何编程,也完全有可能成为程序员,但对他们正在使用的系统以及如何优化系统以供自己使用却知之甚少。

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

也就是说,仍然有理由支持它。

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

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

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

双方都有充分的理由。

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

 

标签
User profile image.
Jason 是 Opensource.com 的工作人员和红帽员工,任职时间为 2013 年至 2022 年。此个人资料包含他在该期间与工作相关的文章。其他贡献可以在他的个人帐户中找到。

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

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

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

我们需要培养一代黑客,他们可以成为我们所居住的网络世界的积极成员。

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

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

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

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

“教育”和“培训”之间存在很大差异。我的妻子是一位退休的 IT 培训师,她问人们“您希望您的女儿接受性教育,还是性训练?”

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

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

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

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.