@@ -4,6 +4,86 @@ The course has been expanded and improved by tons of volunteers like you! Thank
4
4
you for that! To help ensure a consistent style throughout the course, we have
5
5
written down some guidelines for you to follow.
6
6
7
+ ## Course Philosophy and Design
8
+
9
+ To contribute effectively, it's helpful to understand the core design principles
10
+ of Comprehensive Rust. This is not a self-study book; it is a set of slides and
11
+ notes for an ** instructor-led course** .
12
+
13
+ ### Target Audience
14
+
15
+ The course is designed for an audience of experienced software engineers who are
16
+ new to Rust. We assume they have 2-3 years of experience in an imperative
17
+ language like C, C++11+, Java 7+, Python, or Go.
18
+
19
+ We ** do not** assume familiarity with functional programming concepts or
20
+ features from more modern languages like Swift or Kotlin. Course material should
21
+ build upon the concepts that are likely to be familiar to this audience.
22
+
23
+ ### Goals
24
+
25
+ The goal of the course is to provide a solid foundation in Rust within a bounded
26
+ time frame. This prepares students to continue learning effectively as they
27
+ begin to apply their new skills on the job.
28
+
29
+ ### Pedagogical Principles
30
+
31
+ We follow a few key principles to make the material effective for learning:
32
+
33
+ - ** Build on a Foundation:** New Rust concepts should be connected to what a
34
+ learner already knows, either from their prior language experience or from
35
+ earlier parts of this course.
36
+ - ** Provide a Working Mental Model (The "No Magic" Rule):** As much as possible,
37
+ avoid telling students to accept syntax or behavior that will be explained
38
+ later. For everything that appears on the slides or in exercises, we must
39
+ provide a working mental model that allows the student to understand and use
40
+ the concept.
41
+ - ** Use a [ Spiral Approach] ( https://en.wikipedia.org/wiki/Spiral_approach ) :** To
42
+ avoid overwhelming the learner, it is highly encouraged to introduce a concept
43
+ by first providing basic facts and a simplified mental model. The topic can
44
+ then be revisited later to provide more detail. For example, very early in the
45
+ course we explain the basics of ` println! ` , mention that it is a macro so the
46
+ usage syntax is a bit unusual, but we don't go into details of format strings
47
+ or macros. We explain details of format strings later, once we have covered
48
+ traits and can mention the ` Debug ` and ` Display ` traits.
49
+
50
+ ### Pacing and Structure
51
+
52
+ The course is designed for approximately 5 hours of teaching per day, typically
53
+ split into a 3-hour morning session and a 2-hour afternoon session.
54
+
55
+ This pacing is important context for contributors. Material should be structured
56
+ to fit this rhythm, with clear sections that can be taught in roughly 45-50
57
+ minute blocks to accommodate short breaks and Q&A.
58
+
59
+ Each slide must include a ` minutes ` field in its frontmatter, which specifies
60
+ the estimated teaching time for that slide. This helps ensure the overall pacing
61
+ of the course remains consistent.
62
+
63
+ ### Course Structure
64
+
65
+ The course starts with a core ** Rust Fundamentals** curriculum, followed by a
66
+ collection of specialized ** deep dives** . All students take the Fundamentals
67
+ course and can then opt into any deep dives that are relevant to them.
68
+
69
+ #### The Rust Fundamentals Course
70
+
71
+ The ** Rust Fundamentals** course provides a solid foundation in a strictly
72
+ bounded, four-day time frame. This duration is firm, and its scope is carefully
73
+ managed to focus on the most essential concepts for new Rust programmers.
74
+
75
+ The overall progression of the course starts with the parts of the Rust language
76
+ that should be conceptually familiar to most students from other languages. Then
77
+ we move on to more difficult parts (for example, enums with payloads and
78
+ generics), and parts that are unique to Rust (lifetimes and the borrow checker).
79
+
80
+ Contributors should keep this structure in mind. The four-day schedule for the
81
+ Fundamentals course is completely full, leaving no time slack for new topics.
82
+ Proposals to add material to the Rust Fundamentals course must also include a
83
+ plan to shorten or remove existing content. Refinements to existing topics are
84
+ always welcome. Topics that are not essential for all new Rust programmers
85
+ should be proposed as new deep dives.
86
+
7
87
## Course Slides
8
88
9
89
Please take the following into account when updating the course material.
@@ -26,6 +106,24 @@ Use the rectangle as a rough guide for how much you can fit on a single slide.
26
106
If you find yourself adding too much detail, move the details to the speaker
27
107
notes (see below).
28
108
109
+ ### One Core Idea Per Slide
110
+
111
+ Ideally, each slide should focus on a single, clear takeaway. If a slide
112
+ introduces a core concept and then explores an important but distinct tangent
113
+ (e.g., a limitation or an advanced use case), that tangent should be moved to
114
+ its own slide. This keeps the presentation focused and easier to follow.
115
+
116
+ Consider the instructor's workflow. If the speaker notes require a long or
117
+ complex series of live edits, it can be difficult for the instructor to execute
118
+ well every time. It may be better to add a new slide that presents the desired
119
+ state of the code.
120
+
121
+ ### Pedagogical Flow
122
+
123
+ When introducing a new concept, start with a simple, relatable, and concrete
124
+ example. A good opening example grounds the concept for the learner and provides
125
+ motivation for the more detailed explanation that will follow.
126
+
29
127
### Rust Code
30
128
31
129
When showing Rust code inline, please use the same spacing as ` rustfmt ` : ` 3 * x `
@@ -45,40 +143,96 @@ Enclose the code block in `<!-- dprint-ignore-start -->` and
45
143
` <!-- dprint-ignore-end --> ` to suppress the automatic formatting. Please use
46
144
this sparingly.
47
145
146
+ #### Use Meaningful Examples
147
+
148
+ Code samples on the slides should be short and do something meaningful. Avoid
149
+ using generic placeholders like ` Foo ` , ` Bar ` , and ` Baz ` . Using descriptive names
150
+ from a real-world, even if simplified, domain makes the code easier to
151
+ understand and relate to.
152
+
153
+ #### Interactive Code Snippets
154
+
155
+ All Rust code blocks in the course are not static text but are live, editable
156
+ playgrounds. An important teaching method is for the instructor to edit these
157
+ snippets live to demonstrate concepts, introduce and fix errors, and explore
158
+ variations based on student questions.
159
+
160
+ Contributors should design their slides with this interactivity in mind. The
161
+ initial state of the code should be a good starting point for a live
162
+ demonstration.
163
+
48
164
### Language and Tone
49
165
50
166
The courses are written in American English, so write "initialize", not
51
167
"initialise".
52
168
53
169
Use an informal, friendly, and concise tone. Remember that the courses are meant
54
- to be taught by an experienced programmer to other experienced programmers. We
55
- expect familiarity with programming, typically in a statically typed language
56
- like Java or C++. We don't explain common concepts known from that family of
57
- languages, but we cannot assume familiarity with things like functional
58
- programming.
170
+ to be taught by an experienced programmer to other experienced programmers. When
171
+ possible, prefer terminology used in
172
+ [ the official Rust Book] ( https://doc.rust-lang.org/book/ ) . If a less common but
173
+ necessary term is used, provide a brief definition.
174
+
175
+ ## Exercises
176
+
177
+ At the end of some sections, learners will actively engage with the material by
178
+ completing a small exercise. The goal of an exercise is to provide hands-on
179
+ practice with the concepts just taught.
180
+
181
+ Please keep the following principles in mind when creating or updating
182
+ exercises:
183
+
184
+ - ** Focused Scope:** An exercise should focus on the topic of the preceding
185
+ section. It should not require knowledge of concepts that have not yet been
186
+ taught.
187
+ - ** Short Duration:** An exercise should be solvable by the target audience in
188
+ approximately 10-15 minutes. The goal is a quick, successful application of
189
+ knowledge, not a complex project.
190
+ - ** Clear Instructions:** The problem description should be clear and
191
+ unambiguous.
59
192
60
193
## Speaker Notes
61
194
62
195
We have extended ` mdbook ` with support for speaker notes: content added between
63
196
` <details> ... </details> ` tags is rendered in a special box that can be
64
197
collapsed or removed entirely from the slide.
65
198
66
- - Unlike the main content, the speaker notes don't have to fit on a single
67
- slide.
199
+ - Speaker notes suggest a narrative structure for the instructor.
68
200
69
201
- The speaker notes should expand on the topic of the slide. Use them to provide
70
202
interesting background information for both the instructor and for students
71
203
who look at the material outside of a class. Remember that many more people
72
204
will read the course by themselves, so make the notes complete and useful even
73
205
when there is no Rust expert around.
74
206
207
+ - For slides with evolving code examples, the notes provide a clear,
208
+ step-by-step flow for how the code is modified and presented. This is a
209
+ suggested flow for the instructor's live-coding session within the slide's
210
+ interactive playground. This includes:
211
+
212
+ - The order in which to introduce concepts, how to motivate them.
213
+
214
+ - Framing of the code example: the problem it tries to solve, if not obvious.
215
+
216
+ - How to demonstrate variations of the code example (e.g., code that does not
217
+ compile or illustrates a bug).
218
+
219
+ - How to change the code on the slide to illustrate the concepts being taught.
220
+
221
+ - Where to pause and engage the class with questions.
222
+
75
223
- Speaker notes are not a script for the instructor. When teaching the course,
76
224
instructors only have a short time to glance at the notes. Don't include full
77
225
paragraphs for the instructor to read out loud.
78
226
227
+ - Nevertheless, include all of the necessary teaching prompts for the instructor
228
+ in the speaker notes. Unlike the main content, the speaker notes don't have to
229
+ fit on a single slide.
230
+
79
231
### More to Explore
80
232
81
- Move extended explanations in the notes to a "More to Explore" section:
233
+ Use the "More to Explore" section for valuable topics that are outside the main
234
+ scope of the class. The content should be placed within the ` <details> ` block as
235
+ shown below:
82
236
83
237
``` markdown
84
238
<details>
@@ -92,7 +246,11 @@ Move extended explanations in the notes to a "More to Explore" section:
92
246
</details>
93
247
```
94
248
95
- The material there is outside the scope of the regular class.
249
+ This section can contain a deeper explanation of a concept or provide specific
250
+ pointers to external resources. A link should be accompanied by a brief
251
+ explanation of what the resource contains and why it is relevant. A vague
252
+ reference is not helpful, but a specific one can be a great tool for
253
+ self-learners.
96
254
97
255
## Translations
98
256
0 commit comments