How to teach a crash course on C++?
几周后,我们将直接在大学里为Java程序员教授一门速成课程。他们很少或没有经验,但C或C++。
本课程之前的版本仅为1或2个半天的课程,涵盖的主题包括:
- 新的语言功能,例如
- 标题与实现
- 指针和引用
- 内存管理
- 运算符重载
- 模板
- 标准库,例如
- C库标题
- 基本流
- 基本STL
- 使用库(标题、链接)
- 他们将使用Linux,所以
- 基本Linux控制台命令
- GCC以及如何解释其错误消息
- 生成文件和自动工具
- 基本调试器命令
- 他们问的任何话题
在课程中,每个人使用新引入的功能分别编写、编译、运行和调试简单的程序。这是最好的学习方式吗?
你认为哪些主题最重要?应添加或删除哪些主题?哪些主题在短时间内无法充分涵盖?
我只能再一次指向stroustrup和布道:不要教C子集!这很重要,但不适合初学者!C++是足够复杂的,并且标准库类,尤其是STL,比C++的C子集更为重要和(至少表面上)更容易理解。
顺便说一下,指针和堆内存分配也是如此。当然,它们很重要,但只有在教过STL容器之后。
另一个重要的概念是新学生必须了解不同的编译单元、一个定义规则(因为如果你不知道它,你就无法解密错误消息)和头。这实际上是一个相当大的障碍,必须尽早突破。
除了语言特点外,最重要的事情是如何理解C++编译器和如何获得帮助。在我的经验中得到帮助(即知道如何搜索正确的信息)是关于C++的最重要的事情。
我过去对这种教学顺序有过相当好的经验。
/编辑:如果你碰巧认识一个德国人,请看一下http://madrat.net/coding/cpp/skript,这是我的一门课程中使用的非常简短的介绍的一部分。
如果它们来自Java世界,则用于垃圾回收。因此,我可能会花一些时间讨论智能(引用计数)指针,以及它们与垃圾收集的比较方式。
我想补充一点,您应该确保指出在哪里可以找到语言和API引用。在Java中,API和语言规范在Java.Sun.com上是在线的。用C或C++,它不是那么简单和容易找到参考文献。
每当我在C或C++中做某事时,那是我最大的问题…试图找到我需要的。我通常求助于cplusplus.com,它通常有我需要的,否则我会用谷歌搜索。如果你有一套你使用的参考资料(在线或以书籍的形式),列出它们并告诉他们你使用每个参考资料的目的。
如果你打算把很多Java程序员直接从大学里写出生产代码,我会说你首先要关注的是指针和内存管理。
实际上,那些直接来自托管代码的人很少有调试与指针相关的异常的技能,更不用说正确地使用它,甚至不知道他们的语言/工具是如何使用它的。
Pointers is how you think not just write code.
框架和编码实践可以作为提示和注释进行教学。
但是,在编写C代码时,如果不理解指针,那就只是在等着射自己的脚,如果不是头部。
我会花一整天的时间来讨论如何在C++中编写一个好的类。DEITEL&DEITEL可作为参考。
- 何时调用构造函数?
- 何时调用赋值运算符?
- 何时调用析构函数?
- const foo&a foo有什么意义?
内存管理(指针、分配等)、STL和模板的基础知识(因为STL使用模板)。我认为STL很重要,因为在C++中缺少了JavaSE类库的丰富性。
你应该花点时间来管理内存,尤其是RAII。