Pages

Thursday 9 April 2015

Icecold: Review, week 5

This week was dominated by the superbly challenging prime factorisation problem, which basically all students at least attempted.

Tutorial:
- In the tutorial, I chose to focus my examples on teaching skills to solve the first three (easier) exercises, and just ignore the prime factorisation exercise for now. I believe this was a mistake - we got through the examples in barely half an hour, and for a brief moment I wasn't sure how to continue.




I polled the class on any other topics they wanted to cover in the tutorial, and one person said: "Advanced examples!" As there were no other suggestions, I jumped into some more advanced examples, which may have been a mistake. My advanced examples had nested loops, of which I underestimated the difficulty. While I was able to show them a more advanced example, I feel as if most of them had trouble understanding it, and it would be the rare person who would be able to reproduce the code.

After I attempted an advanced example (finding all primes up to a certain number), and failed to engage more than a quarter of the class, I quickly backtracked and looked for examples in between to help demonstrate nested loops. I went for the prescribed tutorial question about printing a triangle of stars. Should be pretty simple, I thought.

I was wrong again. I immediately backtracked further and went to an example for printing a square. Surely this was teachable, I thought.

The example for printing a square of asterisks took up the rest of the tutorial.

Is the code simple? Absolutely. for i in 1..n (for j in 1..n (print *) print \n). But explaining it? No way in hell could I do that effectively. I greatly underestimated the complexity of explaining how nested structures work - it's a schema that I didn't account for when explaining how to print a square.

On reflection, there are much better ways of doing this. There are lots of cool examples I could have used to explain nested structures and how to print a square of asterisks. But I was too overconfident from successfully covering a prime number algorithm, and so I jumped into exercises without thinking very hard about the prerequisite skills for the exercises.


- I didn't feel particularly confident presenting the examples that I chose. I think this was because I didn't think them through well enough before the tutorial. However, the response was good. I think one of the better examples I covered during the tutorial was the prime numbers example, where I found prime factors, and later extended this to a "Is this number prime?" example. The students found it relatively easy to follow since I built up the prime number example from simple examples, and it was easy to see that the program was somewhat interesting and useful.


- Most people were happy to actively participate. Even the early guy, who usually never participates and only spectates, decided to contribute a bit to the class discussion. I think this was because this week's examples delved into more challenging material, such as printing out a triangle of asterisks.

I feel like a lot of the class is on the same level now. Many people come up with ideas and actively participate. I think that showing code and sourcing improvements and suggestions from the class, or intentionally making mistakes, is an effective strategy for making sure that people are participating and paying attention, and also interacting with the code.

As the semester goes on, I suspect that the simple syntax errors that I make in the code are going to become boring and repetitive. I suspect that I will have to step up the complexity of the errors I make during the demonstrations.


- I didn't feel particularly good about this tutorial, after the fairly successful first half hour. The first half hour felt very successful - I demonstrated finding prime numbers and prime factors, and showed them some different simple ways of solving the same problem. Most people were following and were willing to volunteer answers. The class was very engaged. However,

Before the tutorial, I need to think more carefully about my examples, and make sure that the students can understand them easily given their current knowledge and abilities. I need to be precise, to be accurate.

Coming up with good tutorial examples is so very hard.


Lab:
- Most people are doing ok on the lab exercises. I had little issues with the first few exercises until we reached the prime factorisation exercise, which effectively killed everyone. Also of note was that I had three additional people who were helping me out in this lab - I think they were definitely really useful. I will continue by describing the behaviour of each student, as well as I can remember.


- Early Student: Finished early and left early, as usual. Managed to finish prime factorisation before the lab even started, with a decent solution. In fact, I don't know much about this student at all. He hasn't said anything in tutorials (up to this one), and always finishes the lab early. I make the assumption that he is a very strong student who won't really need much help for the rest of the semester. I feel like I've seen this before.

My main concern with this student is that he is not challenged enough. Unlike the other students, he has the capability to do far more interesting and advanced exercises. This is not a huge problem in labs - labs are done at your own pace, and you're not doing anything slower than necessary. However, tutorials are where the problem exists. If I pace the tutorials for the remainder of the students, he will quickly become bored and find it difficult to engage with the tutorial. Which could be fine - he'll still do well. But if he's not completely engaged with the tutorial, then he is losing time which he could be improving his (admittedly impressive) skills and learning more. Additionally, the more bored you are with a course, the more negative your impression of it is - doing work in the course becomes less pleasant, you are less inclined to do it, and generally become more unmotivated with the coursework.

I think I can pace tutorials a little faster - the foundational content in the first few weeks is the most important, so it's great

My general strategy for coping with advanced students in freeform courses like compass is to ask the volunteers to give them extension exercises in the same topic area - so that they are being challenged, but they are still doing the same topic as all the other students. Unfortunately, I do not have that liberty with courses like icecold - Not everyone brings their laptop to school, and it is difficult to have them do exercises on computers.

When I taught the protactinium course in Semester 1 last year, the tutorials eventually turned into people bringing their laptops in and doing code exercises. Most people brought laptops to class anyway, so it was not difficult to implement, and the students got to do actual coding, which is much more engaging than listening to some dude out the front speak.

I'm wondering now whether my approach is really correct or not. Is it that computer-based practical tutorials are far more effective than traditional classroom-desk tutorials, or is it that I am not selecting the correct interactive exercises and activities and demonstrations to suit the classroom-style tutorial? Is my learning atmosphere wrong?

In the following weeks, I think I will try to experiment a bit new forms of activity - more interactive stuff, more participative stuff. Target tutorial activities towards the middle two quartiles of students, make sure they are getting something valuable out of it.

Nowadays I am much less enthused about group activities - they did not work well for me, and I don't think they're working terribly well for the students in either of my classes. When I ask students to pair up or get into a group and work on a problem, some students prefer to work alone, and I feel like it's really not worth the friction of getting them to work together.

Teamwork is beautiful when it's successful. But it works so much better for some students than others. Ideally the students are already friends, or are similar people, with similar abilities. Getting dissimilar people to work together is like trying to teach by shoving printouts down the students' throats (in that it is ineffective).


- Dual: These two guys are competent, and every lab before this one, they've kept up with the Early Guy and handed in all their work at the start of the lab. They didn't find them very difficult. However, this time prime factorisation

I left these two students mostly up to my assistant TAs this lab, which I think was a good decision - it is easy to explain things to stronger students, so there is no risk leaving a stronger student to be helped by someone else.

I'm thinking now that I didn't give them enough of a warning about the lab. I do try to focus my tutorial exercises on concepts that they would need in the lab, but in this case I tried to be conservative and aim at the first three (simpler) exercises, thinking that most people would not attempt the advanced exercise.

This decision was fine, I think. Perhaps covering factorisation exercises would have helped lot. Perhaps covering code examples from the lectures would have helped a lot. Perhaps doing complex exercises would have helped. But I needed to tell them about the difficulty of the prime factorisation exercise before they attempted it, so that they would be ready for a challenge. So that they would put thought into it, and plan around it. So that they would not be dismayed when they cannot find a simple solution, when they spend an hour debugging to no solid result.


- Swirl: She did not turn up to the lab today and left the last lab citing a headache, but she eventually submitted her activities on time. I will send her an email telling her she did not miss much in last class, and that I will mark her labs when she gets back to the following tutorial. Good to keep in contact with the students, and provide an option in their mind in help, etc, etc.

I am not a very rule-following person. The rule for the course is that the lab must be submitted in the same week it is released or the week after, but especially in the early weeks of the course, I prefer to be lenient. I could deduct marks, leave a bad impression on the student, and they would never catch up a missed lab again, because there is no incentive. On the other hand, I could give the student the lab mark, they would feel good about themselves

The students are good at following deadlines by themselves - I will not enforce them unless the student has a tendency to miss multiple labs and leave a lot of work stacked up. In summary, I will enforce lab submission deadlines enough to keep students up to date with the course. Which, as of now, has involved zero enforcing of lab deadlines.


- 4k: I am extremely impressed and surprised at this guy's pace of improvement. At the start of the course, he was the one struggling with the C syntax and finishing before everyone else. Nowadays, he is the guy finishing before other people and solving problems by himself, with little help from me. He solved prime factorisation by himself , in the lab, what the hell. I quite like this dude, because he's usually cheerful as well, and is pleasant despite minor language problems. He has started answering more difficult questions during tutorials.

I wish that I could say that it was me that helped him improve, but I know that it is his own intellect that drives his pace of improvement. As with all classrooms, the teacher is only the guide, and the learning has to be driven by the students. This student is just a great learner.

Do I need to do anything to adapt to this guy? Not really. He'll cope with pretty much anything I throw at him, I think.


- 3.9k: He works with 4k and the partnership is quite good, because they both speak the same language and seem to have been friends from before the tutorial. However, he isn't doing as well as 4k, and had a great deal of trouble doing the prime factorisation exercise. This, again, was my fault for not giving a warning of how difficult the task would be. He struggled a bit through the first few activities as well, but those were productive struggles, not struggles in which you make little progress.

His English is not bad, although his Chinese is probably better. I'm not sure if he's following properly in tutorials - I do not recall him answering any questions. This is a difficult one to answer - perhaps I should be introducing more basic exercises in tutorials that he can connect with?

I'm hoping 4k can keep him up to date, but I'm just not sure. Not sure about this one.


- Fish: He is by far my most problematic student. He has extremely poor English, and I had big problems communicating with him. The previous lab, I thought I had solved my problems - I emphasised non-verbal communication heavily and tried to teach by demonstrating rather than by explaining. I tried to emphasise using actions over words to communicate concepts. Last lab, he successfully finishing the lab exercises in time, along with all of the other students. I thought that he was a success.

But I was too late. This lab, perhaps lacking confidence, after writing the first three programs he plagiarised the prime factorisation program. I told him I would give him the benefit of the doubt in this one instance, but he should practice more in future. I'm not sure he understood what I said, but regardless, he bugged me for the rest of the lab. Which was surprising - I had told him I gave him full marks for the lab activity.

I asked him, what do you want from me? He said something along the lines of, I just want you to know that I am not someone who just copies other people's works (in broken English). This was a bit surprising - you wouldn't think someone who plagiarises work would care that much of what other people think of them. I told him, okay, you're right, and he calmed down for a few minutes.

At the end, he challenged me, telling me that he didn't see me giving him the mark, and wanted to confirm I had given him the mark. I repeated a few times that I had given the mark, and after I could successfully recall his name, he gave up.

I honestly don't know much about this guy. I don't know what he's thinking, I don't know how he learns, and I don't know what sort of schooling he's had in the past. He was smiling creepily and looking at his phone during the tutorial, a bit strange.

Perhaps I shouldn't have challenged him - it only leaves a bad impression and makes it more difficult to give him advice in the future. Now I seem like an antagonist to him, which is definitely not what you want. But I feel like it had to be done eventually - the first time you get away with plagiarism sets a precedent for you to do it again and again in the future, and there's no way you'll pass the practical exams or the theory exams without solid practice programming.


- The remaining students vary from average to struggling, and I don't have many useful thoughts on them yet. Perhaps in future classes I will get some useful insights.


Between tutorials:
- Inter-tutorial tasks (see other post)

Next tutorial:
- Speed up the pace a bit. Make sure advanced students are sufficiently challenged (e.g. extension questions about programs or something)
- Experiment with new activities in tutorials. focus on interesting + educational + extensible.
- Try to make tutorial examples persistent - make sure students can access them later.
- Warn students about complex lab activities

No comments:

Post a Comment