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

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

TeroVesalainen via Pixabay CC0

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

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

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

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

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

尽管如此,仍然有理由支持它。

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

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

但更进一步,理解至少编程的基础知识对于充分利用开源的好处非常重要。拥有可供审查、编辑和共享的代码(根据开放许可)固然重要,但如果您因自身无力进行所需的更改而被锁定,您真的能充分利用开放许可的全部力量吗?

双方都有充分的理由。

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

 

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

17 条评论

如果我们认为教育应该是关于开发年轻人的思想,那么编程有很多方面可以帮助你学习以逻辑方式思考和计划。它从分析问题开始,将其转化为逐步的过程,然后整理出逻辑上的垫脚石来组装解决方案。
最大的困难是,很可能很少有教师有任何编程经验,而且人们怀疑他们是否有兴趣学习它。

Greg,我同意。说得好。可以(并且已经)为技术知识的不同原因和不同方面提出论点……但是表达需求并制定解决计划的能力是许多人无法展示的 MUST。虽然这项技能源于 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 的人倾向于信息和计算机技术。其次,尽管编程在当今技术驱动的世界中至关重要,但在生活的许多方面,这种水平的计算机科学是可选的——所以,我认为候选人最终应该做出选择。虽然我发现如果没有一些自动化(最终需要编程/脚本编写技能),解决问题变得越来越难

Creative Commons License本作品采用 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.