5

明年秋天,我将教授一门关于编程基础的课程,第一年的计算机科学课程。在这样的课程中教授指针的优点和缺点是什么?(我的立场:应该教他们)。

编辑:我对“迎合你的听众”论点的问题是,在大学的头几年,我们(教授)不知道学生是否愿意成为科学家......我们希望我们知道,但我们有在那些将留在学校的人(4 年不是科学家做的)和那些将成为工程师的人之间取得平衡。

最终决定:至少是引用,但可能是没有指针运算的指针。

4

9 回答 9

13

至少你应该教授参考资料或一些等效的概念。我认为您可能应该对指针算术、c 数组和字符串等事情放轻松,但间接是计算机科学中一个非常重要的概念,应该向学生介绍它。

于 2009-03-18T23:50:36.990 回答
6

是的。

指针是其他高级语言中大量概念的基础,我坚信您需要教授一定数量的低级内容,以帮助我们更好地理解为什么我们会为更高级别的东西而烦恼全部。

一旦你了解了内存是如何分配的,以及它是如何用指针寻址和操作的,解释很多其他的结构就会变得更容易。例如,NullPointerException在 Java 中解释 a ,甚至在此类语言中解释引用的概念都是小菜一碟,如果你有人懂 C 中的指针(更好的是,如果他们也懂 C++ 中的引用)。

于 2009-03-18T23:51:29.657 回答
4

绝对教他们。理解间接对于编程来说是必不可少的,无论是指针、引用、动态绑定还是其他任何东西。现在显然不要从它们开始,但理解间接至少与理解控制流思想一样重要。

当然,缺点是有些人不会得到它,并且会表现不佳或辍学。如果这是为那些想成为 CS 专业的人开设的课程,那么不要担心,因为你只是在鼓励他们更早地而不是更晚地转换专业。如果它是为对编程感兴趣的人提供的更多或通用的课程,那么可能仍应介绍它们,但不要严厉或沉重地评分。

于 2009-03-18T23:53:30.947 回答
2

在我作为 CS 学生的第一年,我在秋季参加了 Java 课程,这是一般介绍。教授没有直接教指针,但他确实教了引用的概念,以及为什么你可以修改对象而不是当任何一个在参数中传递的原语时。

在我的第二学期,我参加了该系列的下一门课程,是关于 C 的,这门课非常依赖指针。

对于编程类的介绍,我想说只提到引用,而不是直接提到指针。

于 2009-03-18T23:53:52.847 回答
1

我认为“编程基础”课程至少应该涉及基本的处理器体系结构和汇编语言,如果是这样,你就不能真正提出不讨论指针的理由。如果您只教授高级(字节码)语言,那么我猜指针会使观众感到困惑。

于 2009-03-18T23:51:23.603 回答
1

优点:对机器使用内存的方式有深入的了解,堆上数据的指针与堆栈上的数据指针之间的区别(和缺陷),按地址传递方法等。

缺点:对于尚未了解(或没有足够时间吸收概念)计算机体系结构(包括什么是堆栈、什么是寄存器、调用约定等)的观众来说很复杂。

因此,总而言之,这在很大程度上取决于您的受众和您将处理的语言(指针在 LISP 或 Java 的上下文中将毫无意义),以及您愿意深入什么是堆的方向,什么是堆栈,范围如何转换为堆栈(即为什么从不返回指向局部变量的指针)等。

当我教授工程课程的指针时,我最终在一个简单的“hello world”程序上启动了一个调试器,并向学生展示了实际的机器代码、寄存器值和相应的内存转储,以及堆栈操作和参数传递等,但他们已经做好了准备。您的听众是否会接受这样的深入探索,以确保对幕后发生的事情有充分的了解,是否愿意这样做?:)

于 2009-03-18T23:58:14.727 回答
0

我认为你不应该教它。但后来,一旦获得了编程的基本概念。

一个很好的例子是 Stroustrup 的最后一本书:编程——使用 C++ 的原则和实践,他在其中教授如何制作解析器、I/O(流)使用和 GUI 使用,甚至在谈论指针之前!

我认为这将是一个很好的教学参考,因为它更自然地理解我们构建想法的方式,而不是我们必须同时处理多少约束(例如内存管理)才能使软件工作。我真的向您推荐这本书,让您对教授编程基础知识有一个全新的视角。

于 2009-03-18T23:54:05.750 回答
0

这实际上取决于您课程的目标 - 教授编程和教授计算机科学是两个独立的目标,虽然它们不是相互排斥的,但入门课程通常不能同时很好地教授两者。这是一个不同的例子:假设我们想学习如何对列表进行排序。C++ 编程课程将教您使用 std::sort 函数模板的语法,而家庭作业可能是编写几个比较函子。计算机科学课程将向您解释什么是合并排序,算法在伪代码中的样子,以及它的性能/空间特性,而家庭作业将是编写排序函数本身。

因此,如果您正在教授入门编程,那么是的,您应该教您的学生有关指针的知识。

如果您正在教授计算机科学,那么不,没有必要在入门级别上理解指针。

于 2009-03-19T00:19:20.650 回答
0

任何自称为优秀程序员的人都必须知道指针是如何工作的。成为一名优秀的程序员意味着他们不仅知道一种编程语言,而且他们知道编程语言的一般工作原理,从而使他们能够适应以前从未见过的编程语言。

然而,这并不意味着编程课程的基础知识应该是教学指针。

  • 如果您的目标是让这些人全面、全面地熟悉一般的编程语言,那么是的,指针应该是其中的一部分。
  • 如果你向他们介绍编程的方式是一开始使用一种编程语言,目的是在后续课程中涵盖其他语言,而指针与该语言无关,那么现在还没有必要谈论指针。

我认为仅以一种语言开始人们,而不是试图同时涵盖每种语言风格,这有很多话要说。

我的第一门编程入门课程使用了 Haskell。直到随后的使用 C 的课程才引入了指针(当我参加这门课程时,我已经是一名优秀的 C 和 C++ 程序员;这些科目是必修的)。

于 2009-03-19T01:38:36.373 回答