编辑:我对“迎合受众”这一观点的问题在于,在大学的前几年,我们(教授)不知道学生是否想成为科学家......我们希望我们知道,但我们必须在那些将留在学校(四年并不能让一个人成为科学家)和那些将成为工程师之间取得平衡。
最终决定:至少提及,但可能不包括指针算术。
至少你应该教授引用或一些等价概念。我认为你可能应该在指针算术、C 数组和字符串等方面放松一些,但间接寻址是计算机科学中非常重要的概念,学生应该被介绍到这个概念。
是的。
指针是其他高级语言中许多概念的基础,我坚信您需要教授一定量的低级内容,以促进对为什么我们要使用任何高级语言的理解。一旦您了解了内存如何分配以及如何使用指针进行地址和操作,解释许多其他结构就变得更容易了。例如,在Java中解释NullPointerException
甚至诸如此类语言中引用的概念就像儿戏,如果您有一个理解C中指针(并最好也理解C ++中引用)的人,那就更好了。
我认为,“编程基础”课程至少应该涉及基本处理器架构和汇编语言,如果是这样的话,你就不能不讨论指针的问题了。如果你只教授高级(字节码)语言,那么我猜指针可能会让听众感到困惑。
缺点:对于尚未熟悉计算机结构(包括堆栈是什么,寄存器是什么,调用约定等)或尚未有足够时间消化概念的受众来说,可能过于复杂。
因此,总的来说,这在很大程度上取决于您的受众和要学习的语言 (在LISP或Java的上下文中,指针将毫无意义),以及您愿意深入了解堆、栈、作用域如何被转换为栈(即为什么永远不要返回本地变量的指针)等内容的深度。
当我给工程班教授指针时,我最终在一个简单的“hello world”程序上启动了调试器,并展示了学生实际的机器代码、寄存器值和相应的内存转储,以及栈操作和参数传递等,但他们已经准备好了。您的受众是否愿意接受这样的深入了解,以确保对幕后发生的事情有牢固的理解,而您是否愿意付出这样的努力?:)
我认为你不应该把它放在第一位去教。而是等到学习编程的基本概念之后再进行。
一个好的例子是 Stroustrup 的最新著作: Programming -- Principles and Practice Using C++,在书中他先教如何制作解析器、I/O(流)用法和GUI用法,然后再谈论指针!
我认为这将是一个很好的教学参考,因为理解我们构建思想的方式比理解我们必须同时处理多少限制(例如内存管理)来使软件工作更加自然。我真的向您推荐这本书,以便从教授编程基础的全新视角来观察。
这真的取决于你课程的目标 - 教授编程和教授计算机科学是两个不同的目标,虽然它们并不互斥,但入门课程通常不能同时很好地教授两者。以下是一个例子:假设我们想学习如何对列表进行排序。C++编程课程将教您使用std::sort函数模板的语法,并且作业可能是编写几个比较函数。计算机科学课程将向您解释归并排序是什么,伪代码中算法的样子以及其性能/空间特性,作业将是编写排序函数本身。
因此,如果您正在教授入门级别的编程,则应该教授您的学生有关指针的知识。
如果您正在教授计算机科学,则没有必要在入门级别理解指针。
任何自称是优秀程序员的人都必须知道指针的工作原理;成为一名优秀程序员意味着他们不仅知道单一编程语言,而且知道编程语言的通用工作原理,使他们能够适应以前没有接触过的编程语言。
然而,这并不意味着基础编程课程应该教授指针。
我认为,让人们从一种语言开始入门,而不是试图一次性覆盖每种语言的风格,有很多值得探讨的地方。
我的第一门入门编程课程使用的是Haskell。直到后来使用C的课程中才介绍了指针(当我上课时,我已经是一名优秀的C和C++程序员;这些科目是必修的)。