学习编程之前一定要学习数学吗? - CACM

人们曾经认为:第一种编程语言很重要,但是现在上下文情况完全不同了,人们不必一定要学习数学以后才开始学习编程,而是可以直接从学习编程语言开始。

对于大多数学习者来说,学习第二语言并不容易。虽然通常会从一种编程语言转移到另一种编程语言,但这并不是无缝的。专家一直在研究当学生在 Python 和 Java 之间移动时哪些会转移,哪些不会转移(请参阅此处的论文);David Weintrop 研究了从基于块的编程转向文本编程的学生。

当我们考虑为非 CS 专业的学生编程时,第一种编程语言尤为重要。如果学生想成为数据科学家,R 或 Python 比学习 C 更有意义,但是,并非今天学习编程的每个人都希望或需要像计算机科学家那样轻松地切换语言的能力。

学习第一种语言需要发展语义概念和特定句法知识,而学习第二语言只涉及学习新的句法,假设他们都是保留相同的语义结构。学习具有完全不同语义的第二语言,例如 LISP 或 MICRO-PLANNER,则可能会发生与学习第一语言一样困难或更难。

为什么第一种编程语言无关紧要?

这里存在一种可能情况:当计算机科学这个领域还年轻时,”第一种编程语言很重要“的想法曾经是正确的。在 1960 年代后期首次定义 CS 课程时,重点是学习编程的数学基础。如果我们根据学生已经知道的数学来教授编程语言的语义,那么新的语法只是数学的新形式。数学家喜欢用不同的形式或不同的方法探索相同的想法。对于有很强数学背景的学生来说,第一种编程语言和未来的编程语言只是学生已经知道东西的不同符号而已。

但是如果编程学习者并没有学习过数学呢?如果是六年级学生在数学课上挣扎,而同时他正在上第一节 CS 课怎么办?如果图形设计师试图编写了PhotoShop脚本但避开数学课怎么办?如果编码学习者是一个“会话式程序员”(参见此处的论文),他只希望能够与程序员讨论他们的任务,但实际上并不想开发软件,该怎么办?现代编码学习者与 1970 年代的学习者大不相同。

我们不必让编程与数学相关,会话程序员很难找到让他们可以学习的资源,因为需要他们关注逻辑和数学(请参阅此处的论文),但我们正在开发帮助会话式程序员无需数学即可学习的方法(请参阅此处的论文)。如果我们不期望学生编程前首先了解数学,我们就可能能够教更多的人学习编程。

黑客新闻网友

如果你想淡化数学,也许你确实可以教更多人编程,但如果他们学习和使用数学,他们会成为更好的程序员。

不过,今天学习编程的大多数人都不想成为更好的程序员,大多数学习编程的人是 K12 学生、最终用户程序员或会话程序员。专业程序员和计算机科学家只是其中的一小部分。是的,他们可能需要数学才能擅长并发编程。不是每个人都会做并发编程。

在没有学习数学的情况下直接学习编程语言,最大问题是学生掌握以后就没有什么可比的,因此自然而然地认为该语言的设计决策反映了一些深刻的潜在真理,该语言是事情应该做的方式而不是其时代的产物和其设计师的特定目标。

为什么人们调查发现:学生在将他们的编程基础知识从一种语言转移到另一种语言时遇到困难呢,也许是因为他们似乎一开始就没有真正理解它们,这是教学和测试的失败,并不是因为没有学习数学而妨碍了他们转移。

另外一方面,“编程基础”因语言而异。难以想象,一个学习 Python 编程的学生会开发出与使用 C或 Haskell(对类型和语义理论的理解)的学生相同类型的基本理解。

大多数程序员并不是计算机科学家。即使大多数拥有计算机科学学位的人本质上也不是计算机科学家,他们强迫自己完成课程作业以便找到工作(主要是网络,几乎不使用他们所教的任何东西)。

第一语言非常重要,我通常推荐 javascript,原因如下

  • - 它是 / 高度 / 可访问的(任何带有浏览器的计算机都可以编译和运行 javascript - 你只需要让浏览器加载文件)
  • - 它与 C 风格语言共享许多语法(这使得迁移到其他语言更容易)
  • - 它在如何执行规则方面“放松”(现在,这是有争议的,是否应该允许学习者摆脱以后会困扰他们的错误,或者是否应该让学习者从一开始就步履蹒跚并被迫精确, IMO 前者比后者更容易让人们提高技能)
  • - 它(目前)具有商业价值(也就是说,你可以在你的简历上找到一份使用 javascript 的工作)

我的轶事经历:

  • 我在大学里上一节非常乏味的 Java 课:这太糟糕了!我梦想让计算机做一些有趣的事情,但结果证明编程很烂,而且学习起来很无聊!(我最终退出并走上了不同的道路)
  • 20 年后,我从各种免费的在线资源中自己学习 Python:这太不可思议了!我可以让计算机做任何事情,这一切都有意义!我还能学到什么?!?

对我来说,它需要拥有正确的入门语言和正确形式的资源才能完成(通过视频学习课程,因为我对某个主题很好奇,比课堂效果要好得多)。

作者似乎在暗示计算机教育正在进入这种状态,在这种状态下,学生成为专业人士的可能性很小。但我仍然认为,旧的语言教学系统仍有一席之地,并期待一些学生继续在前沿做出贡献。

第一语言应侧重于入门。Python 在这方面工作得非常好。启动最少,学生可以在几分钟内开始编写功能代码。

后续语言应与其类的内容和重点相匹配(即 C 用于数据结构和算法,C/C++/Rust 用于系统编程,Java/C#/C++ 用于 OOP 类,Haskell/Clojure/等用于函数式编程类等)

目前大学中的编程教学状况非常糟糕。大学现在的做法是,您可以用一种或两种语言获得一些超级基本的指导,然后剩下的一切都需要自己照顾。要么实际教编程,要么根本不打扰。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值