撰写课程
在编写课程时,重要的是要清晰详细,同时也要从简单开始,逐步增加复杂性。
我们必须假设读者对该主题没有先前的经验。
学习 C++ 是一个复杂的过程。请注意,刚开始时,很容易选择一个可能超出学习者当前知识水平的主题。这就是为什么课程的顺序和结构对于提供流畅和渐进的学习体验至关重要。它有助于通过逻辑和有组织的方式引入新概念来避免混淆和挫败感。结构合理的学习过程将导致对语言及其功能的扎实理解,这是我们项目的目标。
文档结构
每节课都应以对所涵盖内容的简要描述开始。
动机
引言之后,我们立即进行动机说明。向读者展示他们即将学习的内容的重要性至关重要。一种有效的方法是提供在未应用本课程中教授的概念时失败或出现问题的代码示例。这有助于学习者理解如何将其用于解决 C++ 编程中的常见问题。通过看到概念可以帮助解决的实际益处和现实问题,读者更有可能参与并积极学习。
循序渐进
在说明动机之后,我们应该开始构建概念。在教授新概念时,从尽可能简单的示例开始,然后逐渐增加复杂性至关重要。这种方法对于您学习的任何主题都很重要。我们将以 Lambda 表达式为例。一个好的起点是演示一个简单的 Lambda 表达式,它将两个数字相加,在本地定义作为常规函数的替代方案
auto add = [](int a, int b) {
return a + b;
};
std::cout << add(2, 3) << '\n';
这使学习者能够理解 Lambda 表达式的基本语法和用法,然后才能进行更复杂的示例。随着我们的进展,我们可以涵盖更具体的示例,例如添加显式返回类型并捕获一个或两个变量
//explicit return type
auto add = [](int a, int b) -> int {
return a + b;
};
int x = 10;
auto addToX = [x](int a) {
return x + a;
};
// ...
int y = 5;
auto sumWithXAndY = [x, y](int a, int b) {
return a + b + x + y;
};
std::cout << sumWithXAndY(2, 3) << '\n';
通过从简单的示例开始并逐步构建,学习者能够充分掌握概念并理解如何在更高级的场景中应用它。
探索更广泛的上下文
随着学习者开始理解和掌握一个新概念,重要的是要让他们接触更广泛的用法。这包括确定概念应该和不应该应用的领域,以及将其与其他已知的概念联系起来。例如,在学习 C++ 中的 Lambda 表达式时,最好演示如何在 `std::transform` 算法中使用它们进行高效的数据操作。
// transforming numbers to their squares
std::vector<int> data{1, 2, 3, 4, 5};
std::transform(data.begin(), data.end(), data.begin(), [](int x) { return x*x; });
重要的是要记住,有些主题可能非常复杂,将更高级的用法留到读者可以在课程后期参考的另一个文档中是合理的。这使他们能够专注于掌握基础知识,然后再深入研究更复杂的用法。
struct Student {
std::string name;
double grade;
//other fields
};
std::vector<Student> students = ...;
std::ranges::sort(students,
[](const Student& a, const Student& b) {
return a.grade > b.grade;
}
);
常见问题
让读者了解最常见的问题至关重要。这包括了解不注意时可能出现的问题。特别是初学者往往会忘记简单的事情,然后花费大量时间试图修复它。这就是为什么尽早让学习者了解最常见的问题至关重要,这样他们就可以避免这些问题并专注于掌握概念。
例如,在使用 Lambda 表达式时,一个常见的错误是缺少分号,这可能导致编译错误
auto add = [](int a, int b) {
return a + b
}
另一个常见问题是忘记捕获变量
int x = 10;
auto addToX = [](int a) {
return x + a;
};
我们也可以提到忘记方括号
int x = 10;
auto add = (int a, int b) {
return a + b;
};
练习
帮助学习者掌握新概念的一种有效方法是为他们提供有意义且具有挑战性的练习。这些练习应旨在促使学习者批判性思考,并以新的和多样化的方式应用他们所学到的知识。
我们已经在开发一个测验组件来帮助解决这个问题,但目前我们只能使用一个简单的练习列表。
总结
在本节中,我们将回顾本课程涵盖的要点和主要概念。它将帮助学习者巩固他们的理解并提供课程内容的概述。