1
Abstract: The C++ language has a reputation of being a very powerful, fast, and expressive, but hard to learn language for beginners. My opinion though, is that we can always be improving our learning materials for beginners--that's why I teach the C++ programming language one pixel at a time. What does a pixel have to do with the language? It's not so much the graphics (though that is a motivating domain to use the C++ language), but in the ability for beginning programmers to visualize and see what they are programming. In this talk I reflect on how to not just teach C++, but how to motivate, inspire, and get beginners to build cool graphical projects while learning the Modern C++ language.
2
Abstract: The C++ language has a reputation of being a very powerful, fast, and expressive, but hard to learn language for beginners. My opinion though, is that we can always be improving our learning materials for beginners--that's why I teach the C++ programming language one pixel at a time. What does a pixel have to do with the language? It's not so much the graphics (though that is a motivating domain to use the C++ language), but in the ability for beginning programmers to visualize and see what they are programming. In this talk I reflect on how to not just teach C++, but how to motivate, inspire, and get beginners to build cool graphical projects while learning the Modern C++ language.
3
If I’m successful, both you and I will have a system for course construction that’s effective for our students.
(At the very least, you’ll have some neat assignment ideas to build off of)
Abstract: The C++ language has a reputation of being a very powerful, fast, and expressive, but hard to learn language for beginners. My opinion though, is that we can always be improving our learning materials for beginners--that's why I teach the C++ programming language one pixel at a time. What does a pixel have to do with the language? It's not so much the graphics (though that is a motivating domain to use the C++ language), but in the ability for beginning programmers to visualize and see what they are programming. In this talk I reflect on how to not just teach C++, but how to motivate, inspire, and get beginners to build cool graphical projects while learning the Modern C++ language.
4
For folks attending online, please feel free to use the Q&A, I’ll answer questions at the end.
For folks in the room, ask questions at any time, and I’ll repeat the question.
Who Am I?�by Mike Shah
5
6
HOW I TEACH MODERN C++ ONE PIXEL AT A TIME
7
This talk is about teaching C++ in a semester long University Course
Before we begin...a video
8
9
This should not be your style of teaching...almost anything*
10
*This video is of course a comedy
This should not be your style of teaching...almost anything*
11
*This video is of course a comedy
So, let’s set the stage here for teaching
Some Context - Who is being taught?
My Pre-Course Survey to understand my students
(Pro Tip: Always survey your students)
12
My Programming in C++ Course
13
My Course - Pre-Course Survey Data (1/6)
14
My Course - Pre-Course Survey Data (2/6)
15
My Course - Pre-Course Survey Data (3/6)
16
Not very comfortable
Very comfortable!
Average
My Course - Pre-Course Survey Data (4/6)
17
Not very comfortable
Very comfortable!
Average
My Course - Pre-Course Survey Data (5/6)
18
I’d say everyone is being brutally honest!
My Course - Pre-Course Survey Data (6/6)
19
Not very comfortable
Very comfortable!
Average
So here’s my audience. Folks who know some programming, but haven’t been exposed to C++
Not very comfortable
HOW I TEACH MODERN C++ ONE PIXEL AT A TIME
20
Now, I know how I teach. So I hope that will be interesting, but...
HOW I TEACH MODERN C++ ONE PIXEL AT A TIME
21
Now, I know how I teach. So I hope that will be interesting, but...
I want you to think about how you teach
HOW [YOU MIGHT] TEACH MODERN �C++ [NEXT] TIME
22
Now, I know how I teach. So I hope that will be interesting, but...
I want you to think about how you teach
HOW [YOU MIGHT] TEACH MODERN �C++ [NEXT] TIME
23
The talk will be more applicable if you reflect on your teaching--whether a teacher, professor, C++ trainer, manager, youtuber, etc.
Some Homework for the Audience
(Whether present, virtual, or in the future!)
24
Homework (Yes...I am a professor)
(Take a screenshot or take a few notes -- we’ll revisit this list today)
25
Homework (Yes...I am a professor)
(Take a screenshot or take a few notes -- we’ll revisit this list today)
26
Let’s begin!
Why do we need to think about how we teach C++?
27
(In my opinion) C++ Greatest Strength for a learner (1/2)
28
(In my opinion) C++ Greatest Strength for a learner (2/2)
29
Look at all of this cool stuff to learn!
(In my opinion) C++ Greatest Weakness for a learner
30
(In my opinion) C++ Greatest Weakness for a learner
31
(In my opinion) C++ Greatest Weakness for a learner
32
(Bringing back the original question (1/2))
^ This is our job as educators (whether a professor, teacher, trainer, colleague giving a tech talk, etc.) to guide our learners on a journey for learning how to use a programming language to solve problems.
33
(Bringing back the original question (2/2))
^ This is our job as educators (whether a professor, teacher, trainer, colleague giving a tech talk, etc.) to guide our learners on a journey for learning how to use a programming language to solve problems.
34
https://www.fluentcpp.com/getthemap/ �(Just for fun, a map of C++ STL Algorithms)
A good course, seminar, tech talk, etc. should guide the learner.
Our job, is to provide a ‘map’ that can be easily read and followed.
[Course Construction]
Where do we start?
What will students build?
What skills will students learn?
35
Here’s where I start (1/3)
36
Here’s where I start (2/3)
37
Here’s where I start (3/3)
38
Backstory
39
Here’s the article! (1/2)
40
Here’s the article! (2/2)
41
Let there be fire!
42
43
44
Let’s do a quick check on the ‘homework’ I gave everyone (myself included)
45
46
47
[Course Construction]
Where do we start?
What will students build?
What skills will students learn?
48
What will students build? (1/2)
49
What will students build? (2/2)
50
So now, began my search for cool 2D effects (beyond the DOOM Fire) that would inspire and engage students while learning C++. Some inspired from my real world experience, others examples that look neat.
Edge detection and other Image Processing Techniques
51
Procedural Textures and Noise
52
8 Bit & '8 Bitish' Graphics-Outside the Box
53
Parallax Scrolling
54
Falling Sands Game
55
2D Lighting (Raycasting)
56
Daniel Shiffman The Coding Train - https://www.youtube.com/watch?v=TOEi6T2mtHo
2D Splines
57
Quad Trees
58
2D Game with lighting effects
59
Enough Ideas--Time to think about the execution
60
[Course Construction]
Where do we start?
What will students build?
What skills will students learn?
61
[Course Construction]
Where do we start?
What will students build?
What skills will students learn?
62
Wait...not so fast on that checkmark
Question to Audience (1/2):
63
Question to Audience (2/2):
^ Yeah, all of the above break my second item here.
64
Each idea here could be split to multiple assignments...
65
And I want the students to own each project (i.e. not give them starter code)
66
About half of these are going to go (they’ll be future assignments for a game programming class or rotated into this class in the future)
67
Now our course is more appropriately scoped
68
Now our course is more appropriately scoped
69
[Course Construction]
Where do we start?
What will students build?
What skills will students learn?
70
Okay, now I get my checkmark--now let’s think about the skills students are going to learn building everything
What skills will students learn? (1/2)
71
What skills will students learn? (2/2)
72
So I spent some time thinking, and inspiration would arrive...from Twitter!
74
75
Kate Gregory’s talk in 2015 -- inspires me to teach debugging (1/3)
76
Kate Gregory’s talk in 2015 -- inspires me to teach debugging (2/3)
77
Kate Gregory’s talk in 2015 -- inspires me to teach debugging (3/3)
78
Kate Gregory’s talk in 2015 -- inspires me to teach debugging (3/3)
79
So...what skills will students learn (1/5)
80
So...what skills will students learn (2/5)
81
So...what skills will students learn (3/5)
82
And not just ‘discuss’, but actually practice!
So...what skills will students learn (4/5)
83
So...what skills will students learn (5/5)
84
Embracing the STL - Containers
85
Embracing the STL - Algorithms
86
pssst -- and sometimes I show them in Godbolt!
87
So...what skills will students learn (1/2)
88
So...what skills will students learn (2/2)
89
SFML Library - Compiling and Linking
90
So...what skills will students learn (1/2)
91
So...what skills will students learn (2/2)
92
Modern C++ versus old constructs
93
I do choose a few ‘old’ constructs first
94
Summary - So...what skills will students learn
95
[Course Constructed]
Where do we start?
What will students build?
What skills will students learn?
96
So we know where to start, what to build, and the skills students should acquire. Let’s see the course
Course Modules
97
What is being taught
(The curriculum and assignments)
98
99
100
The first lecture is 100% inspired by CppCon 2015: Kate Gregory “Stop Teaching C" [in a C++ class]
101
102
103
104
105
106
107
108
109
110
��
111
112
113
114
So here’s a subset of what students end up with!
115
Summary so far
116
So far in this talk... (1/2)
But there’s something missing, something very important, a key ingredient I believe to teaching...
117
So far in this talk... (2/2)
But there’s something missing, something very important, a key ingredient I believe to teaching...
Maintaining the excitement and enthusiasm of your students!
118
Excitement!
119
Here’s was Last Pre-Course Survey Question I asked (1/2)
120
Here’s was Last Pre-Course Survey Question I asked (2/2)
121
Teaching Wisdom #1
122
Teaching Wisdom #2
123
Teaching Wisdom #3
124
A Few Teaching Notes as we Wrap Up
125
A Few Strategies for Teaching (1/2)
126
A Few Strategies for Teaching (2/2)
127
A Few Strategies for Teaching (3/3)
128
https://medium.com/taking-note/learning-from-the-feynman-technique-5373014ad230 More ideas on teaching and ‘the Feynman Technique’
Live Coding
129
Couple more ground rules when you’re teaching students
130
What is Next?
(Next iteration of the course)
131
What’s next
132
Things I want more of in the next iteration
133
For Non-Academics | How would I compress this into a one or two day workshop?
134
Final Check
135
Final Check on our Homework
136
Final Check on our Homework
137
Post Class Survey
138
Post Class Survey
139
140
Thank you for listening to my talk!
141
Rough Outline
142