I know that the last semester at university is over for almost a month, but today I thought about writing a post about it. What can I say after another year of 'professional' teaching?
So I have 2 years of leading labs and almost 5 years of giving presentations/lectures on various topics. I am aware of the fact that a lot of people try to avoid didactics and want to do some other work (like experiments, science, etc.) - this is especially seen at Universities. But somehow I like teaching (more than doing science actually :) )
So what can I say... ?
So what can I say... ?
Teach to learn
This is probably the most important aspect of teaching. When I prepare for classes I learn a lot of new things! Sometimes you have the feeling that you know some topic well. But when you try to prepare a presentation about it you notice some deeper layers, some unknown areas.
For instance, texturing. At first sight it is a quite simple thing: load data from a file, create the texture object, upload the data to the GPU and then add texture coordinates to the drawn object. But this is only its practical side. What happens in the background? How are texels mapped to mesh fragments? How does the filtering work? In a couple of minutes you realize that you are going deeper and deeper, even into raw signal processing (and this might get very complicated!).
In the end you somehow manage to gather all those pieces of information (from different layers) and you try to present this knowledge to other people. Even if your students were sleeping at this presentation something magical happened because you've just learnt a bit more in that area.
And this experience is not restricted to the first time a lecture is given. Even after giving the same lecture for the Nth time you can learn something more, maybe from some other perspective.
For instance, texturing. At first sight it is a quite simple thing: load data from a file, create the texture object, upload the data to the GPU and then add texture coordinates to the drawn object. But this is only its practical side. What happens in the background? How are texels mapped to mesh fragments? How does the filtering work? In a couple of minutes you realize that you are going deeper and deeper, even into raw signal processing (and this might get very complicated!).
In the end you somehow manage to gather all those pieces of information (from different layers) and you try to present this knowledge to other people. Even if your students were sleeping at this presentation something magical happened because you've just learnt a bit more in that area.
And this experience is not restricted to the first time a lecture is given. Even after giving the same lecture for the Nth time you can learn something more, maybe from some other perspective.
Prepare well, but...
It is very significant to do the classes well. But I noticed that sometimes I put too much energy into that process and after 2 or 3 hours of teaching I was very tired. One cannot create perfect materials and exercises. You need to put as much effort as needed but not more because it can hurt you. In the long term it can even lead to a burnout.
So please relax a bit :) (Unfortunately it is easier said than done :) )
So please relax a bit :) (Unfortunately it is easier said than done :) )
Labs with coding
What is the best method of leading programming labs? I do not know but at my classes I tried to duplicate (and improve) method that I saw during my studies and that worked well for me.
For instance when doing OpenGL: There is a task - "create app that will do... ". I provide the finished app and some source code/project. The final app is only in the binary format, which gives a chance to see what the result should look like. The source code is not complete and in many places there are TODOs. That way there is no need to create the app from scratch and students can focus on selected parts of the project. Another benefit is that such app can be (re)created during 1.5h of classes. It would be almost impossible if we started writing it from the ground up.
I found this system working quite well, but of course I need to pay attention not to create too easy (or too hard) tasks. Unfortunately it involves a lot of time to prepare them.
For instance when doing OpenGL: There is a task - "create app that will do... ". I provide the finished app and some source code/project. The final app is only in the binary format, which gives a chance to see what the result should look like. The source code is not complete and in many places there are TODOs. That way there is no need to create the app from scratch and students can focus on selected parts of the project. Another benefit is that such app can be (re)created during 1.5h of classes. It would be almost impossible if we started writing it from the ground up.
I found this system working quite well, but of course I need to pay attention not to create too easy (or too hard) tasks. Unfortunately it involves a lot of time to prepare them.
Where to put the bar?
You cannot force people to learn (assuming you are at studies and you work with adults). You cannot set the level too high as well (and also too low). If the bar is too high many students will became discouraged and simply will stop learning. They may try for some time, but when there are no positive feedback they usually give up.
In the beginning of classes there are some assumptions about the level, but that should be adjusted to the level of the group with the time. This will not be so easy because the group may have tendency to lower their skills.
In the beginning of classes there are some assumptions about the level, but that should be adjusted to the level of the group with the time. This will not be so easy because the group may have tendency to lower their skills.
Some (new) ideas
- Contest. Once I've made a contest at classes. students were divided into groups and they had to make some graphic effects (particles and 2D postprocessing). The best team got a bar of chocolate sponsored by me :) It was very funny and in the future I will try to introduce more of such 'improvements'. Such method is good for a round-up and for the review.
- Problem based learning (PBL). It is a general way of teaching by giving practical examples and tasks. This method encompasses, for instance a task where there is a broken/buggy application and the students have to find the problem and fix it. Another example of a task compatible with the PBL method is one in which students choose tools/technology for the projects.
- A mix of lecture and classes. People usually are able to focus on one task for around 30 minutes. So when there is a 90-minute lecture most of people will not listen at the end (even in the middle!). If you have a chance then it is good to mix lecture part and the lab part. Maybe 30 minutes of talking and then some small task to perform? I know that this will be hard in lecture hall.
- Discussions. Programming is an art of communication between people in the team (plus some coding :)). So if there is a time maybe it is worth conducting some discussions on a given topic. What technologies are best for this particular task? Why? Prove this? Are there any disadvantages? There are many possibilities and instead of just coding we can talk and also solve some problems.
Image from: openclipart.org