By the way, I've also posted my teaching entry for 2003.06.25 .
- I arrived a bit early for class - around 15 minutes early, I think.
I started off by quickly scanning through the news items on Slashdot and then walking around while the early students browsed personal stuff. Small attempt to get them to start thinking about objects - basketball example, I think.
While walking around, I noticed one of the students reading the Java tutorial, and that prompted me to ask all the students to read through the introduction to object-oriented concepts in the Java tutorial. Everyone found the tutorial and started reading, and this gave them some background before the discussion.
- Instead of giving the definitions of "object", "class", "attribute",
"behavior", and "method", I used brainstorming to bring out the desired definitions from the class. I wrote down "object" and "class" on the whiteboard, and I asked them for associated words. We discussed "object" first. The students volunteered four or five keywords and I wrote them down. I asked the students what each word meant and how it related to "object", and then related their explanation to objects in computer science.
After that, we did "class". They gave good keywords such as "category", "structure", and "kind". A question from one of the students brought out the difference between a class and an object, and I related it to the restaurant simulation they did during the plenary.
- The boardwork from the previous class looked like some kind of class
and interaction diagram, so I ad-libbed that into the discussion. There was a bit of vagueness first. I had originally planned on going straight into the single-class implementation because this echoed the very first spaghetti example, but decided to give them a choice after seeing Dr. Sarmenta's boardwork. I lost a few minutes on a rather vague decision process and decided to go ahead with the bigger-picture diagram when I realized it was more natural. My bad. Must prepare better, and must think of these cool things to help them understand!
Anyway, we went through the script again, but the interaction diagram was not quite standard UML (meep) and it was somewhat fuzzy. We need to work on making the interaction clearer and maybe more balanced, as Waiter is twice as long as either Cook or Cashier, and the back-and-forth between objects isn't very clear.
The diagrams also let me talk about methods and the importance of agreeing on a design. =)
- After we went through the diagrams (a slightly more formal version
of their scripts), I started on the lab assignment I had prepared the night before. I knew that the lab assignment needed a fair bit of explaining, so we briefly discussed the first half. I based the assignment on both food examples - a Cook that knows how to prepare spaghetti bolognese based on the spaghetti example we did on the first day. I explained the class definition by referring to the spaghetti algorithm and the cook script, and they understood the method definition when it was explained in non-CS terms.
I explained object creation by drawing on the board. First I drew a big blob on the board representing the memory of the computer. Then, pointing at new Cook(), I took a chunk of that memory and drew a cook (complete with funky hat), giving the cook a script (Cook.class). After that, I did the usual box and arrow for variables. That allowed me to explain object usage - calling methods on objects - in terms of following the arrows and reading the script. Maybe we should make this a computer-based animation in the future. =)
- We stopped at a pretty good boundary in the lab assignment. I knew I
needed to discuss the magical part (lots of new concepts), but the other parts of the lab assignment are pretty straightforward and don't need any more funky animations. Not bad. =) The plenary session last Wednesday also ended almost exactly on time, and during the Wednesday morning session before then, we also ended neatly. It seems that even though I've been trying to yield as much as I can to the students, it doesn't cause us to fall way behind... (That said, Dr. Sarmenta seems a little bit advanced. Hmm.)
- I used the whiteboard eraser instead of the side of my hand.
- I think I can give them a quiz on predicting the output of a
program that uses one class and a few methods - tracing! =)
- I will probably spend the whole Monday session discussing whatever
lessons they learned from the lab assignment. If they finish that quickly, then I can either:
- proceed to method parameters and another lab assignment, or
- ask them to practice defining classes and upload them to a folder on the Yahoogroups so that the other students can learn from them (and maybe we'll even use those as the basis of another system later on)
Advice needed! (1) will mean faster coverage, but (2) may help them gain more confidence. Actually, hmm, I have a third option
- send a notice to the mailing list asking them to do (2) and have them submit that as purely optional (but quite helpful/fun) work, incorporate the uploaded classes into discussion whenever possible, and do (1) if there's time.
- Plan for the big picture as part of the lesson instead of giving
them a rather vague choice that doesn't make sense. It does make a lot more sense for them to see the big picture through diagrams first - an activity that flows naturally from the scripts they made in the plenary - rather than jump into the implementation of a single class in Java.
- Prepare diagrams beforehand, or find some way of creating clean
class diagrams and interaction diagrams while incorporating student input. My boardwork can be a bit messy.
- Have pretty animations that show objects more clearly. I illustrated
object interaction (the script) and object creation (new) on the board, but students can't capture the board work, so they can't easily replay it at home. This looks like a job for Powerpoint, Macromedia Flash, or even Java.
I'll make that a TODO, then.
- I need to find some way to keep better track of the people who
recite so that I can nudge the people who aren't reciting as much. My problem (if it is one!
) is that
- I haven't memorized everyone's names yet
- So many people volunteer to recite
- If I ask them for their names and mark their participation down, it interrupts the flow of discussion.
I'm thinking of picking five or six students per session and making sure they recite, possibly calling on them to do so. This will help me make sure that everyone recites at least once in the course.
- I didn't give the quizlet I thought about last time. I'm thinking of
giving a quizlets at the very beginning of each session - it'll be like attendance. I can give them around 5 minutes to answer one or two topic-related questions and a general comments/questions/suggestions part that will give them an easy way to earn at least one point just by showing up. =) That will also help me get feedback. If anonymous feedback is important, they can submit an extra 1/4 sheet of paper.
- I should probably have extra activities that early birds can do
so that I can help them "warm up" for CS21A.
- I should work on applying PP 8, the "lab-discussion-lecture-lab"
pattern described at http://www-lifia.info.unlp.edu.au/ppp/ . (should look for the exact URL; maybe make it an interwiki link here) Right now, I don't really have any follow-up labs, and that means that they're not really applying the knowledge that they've gained to something new. I will also need to work on the initial labs a lot more.
- Revise the syllabus? We appear to have found a way to introduce
objects and classes much earlier than we expected.
In fact, maybe in the future we can have them doing class diagrams and interaction diagrams in week 3 or 4...
- We'd like tips on classroom management, please. =) My class is
actually really nice, but I'd like to learn how to make it even better - find a way of making participation smoother, maybe?
- I can't wait for the Cersa orientation to be over. Some of the
dormers in my class look completely zonked out. If they're still like that next week, maybe I'll help them figure out a way to manage their time...
- Oopsie about the ORP thing.
For class today: concept map
PP 43 will help me teach UML diagrams. Maybe I really should go into CRC next time.
1. www.azillionmonkeys.com : 09:09
2. Game Engine Anatomy 101 : 11:15
3. Performance tuning in Java : 11:16
4. Some readings : 12:42
5. Horde for Cyrus : 12:46
6. Mail taming : 21:45
7. CompSAt : 21:59
Note about solar simulation and double buffering in class a long long time ago. Fanny knows the story. =)
I'd love to hear about any questions, comments, suggestions or links that you might have. Your comments will not be posted on this website immediately, but will be e-mailed to me first. You can use this form to get in touch with me, or e-mail me at firstname.lastname@example.org .