Notes

The teaching assistant for the next class promised to pass by at 1:00
to pick up the projector, but he didn't show up until 2:00. I couldn't
leave the projector alone and the office was closed, so I ended up
waiting in the lab for an hour. I used the time to read through
lecture notes. Interesting handouts! I particularly liked the articles
from business magazines on decision support systems and change
management.

I also reviewed Excel features in preparation for my labs. It's such a
pity that the book I was reading was published in 1994. Yes, it's
_that_ old. Egads. I really need to find a newer book on Microsoft
Excel. Yes, guys, my job as a teaching assistant involves preaching
the goodness of Excel. It's not a bad tool, really. I like Solver and
I think PivotTables are really powerful in the right hands.
Microsoft Excel is abused far less often than Microsoft Word. (Hear
that, all you people sending DOCs when web pages or text files would
do?) It's also less insidious than Microsoft Powerpoint, which stunts
most people's presentation skills. Microsoft Excel is not a bad thing.

=)

I need to figure out a good way to do the labs. The room is a classic
computer lab with big monitors on rows and rows of desks. At 5'1/4", I
can barely be seen from the back row--and that's already with my
attention-getting red-and-orange outfit!

Demonstrations would also be hard to follow from the back. There are
far too many distractions: the hum of the airconditioner, the
clickety-clack of other keyboards, the glow of almost forty other
monitors... And it's 12 - 1 PM, too! Heck, _I_ felt kinda sleepy.

On the plus side, one student said she liked me because my voice was
loud enough to be heard. Hooray for drama in education, and hooray for
Toastmasters!

So.

How can I best help them learn?

What am I there to help them learn?

My job is to help them learn how to apply ideas from their decision
support systems lectures by using software such as Microsoft Excel,
Jess, and Weka.

I _could_ stand up there and demo everything, but I don't think
they'll walk away with important lessons. I want them to try out at
least one new feature: to know that it's there, why it's there, and
how to learn more about it. I want them to have time to work on their
project, too, but that's really something they're going to end up
working on outside class. I need to talk to Peter Shepard about how
much time they should budget for that project.

Self-paced lab exercises helped my first-year Java students back in
Ateneo de Manila University, and something like that just might work
here as well. I'll need to prepare interesting, engaging exercises
that will expose the students to various features of Excel. I can
spend 5 - 7 minutes (hah! A Toastmasters talk!) at the beginning of
the class to establish the importance of the topic and perhaps take
any questions, let them loose on the topics, and then wrap up at the
end. I'll need better feedback than waiting for questions. Maybe
comments on a blog or on the (very slow) course website? Little slips
of paper? Index cards? I don't know yet. I need to figure that out
before next week.

What a pity it is that you've never had a good teacher. A good teacher can help you grow immensely. I've had great teachers, and they really changed my life. Let me share with you some things I've learned from them and why I'm crazy about computer science.

When you meet a lot of brilliant people, you'll quickly realize that technical skills do not guarantee people skills and vice versa. One of the best ways to meet brilliant people is through open source. Look at Richard Stallman: undoubtedly a genius, but his personality rubs a lot of people the wrong way. (He's really cool, though.) On the other hand, there are people who combine both technical know-how with passion and great communication skills; these are the teachers who can change your life.

I owe so much to the teachers I've learned from inside and outside the classroom. The best teachers I've had taught me that I'm not limited to the classroom. They helped me gain the confidence to try things on my own. They showed me things I didn't know about and might not have discovered on my own. They questioned my assumptions and challenged me to do better. I remember when I was in first year college and I was slacking off in subjects like English; it was my computer science
teacher who told me that I should pay attention to details!

My teachers really helped me deal with my insecurities about our curriculum. I always kept my eye on schools abroad, and because I was already working on open source in college, I could see how people my age were doing really fantastic things like maintaining the Linux kernel or writing their own operating systems. My teachers helped me take advanced classes and get into extracurricular projects and
competitions. When I started working on things on my own, they gave me encouragement and great recommendations.

I've heard many, many stories about teachers who aren't as good as the ones I had, though. Most teachers don't seem to care about their students or their subjects. I want to help change that.

Computer science changes every day. The accelerating pace may make you think that it's impossible to keep up. The truth is, as things get faster and faster, a strong foundation becomes more and more important.

That's what I'd like to think I teach. I do not teach how to program in Java or C++ or Perl. I teach people how to _think_, how to break a problem down into solvable parts, how to learn more and more and more. My job is not to pour information into passive students, but rather I am here to show them the basics and then challenge them, make them hungry for more, guide them through questions and hints. I don't know everything, but I love sharing whatever I know, and I love learning new things from students and the world.

I messed up a lot as a beginning teacher, too. There were days when the explanations I prepared the night before didn't work and everyone was just confused. There were days when I'd just get so frustrated with my inability to express something or to convince people that copying isn't going to teach them as much as actually sticking it out and solving the problem. But still, there were days when I'd see students get that Aha! moment, and that made things worthwhile.

I enjoy computer science so much that I cannot think of _not_ teaching it. I want to get other people hooked. I want people to fall in love with learning and problem-solving. I want people to discover that they too are capable of mental wizardry; that they too can make the computer dance to their tune. I want to be a fantastic teacher. In order to do that, I'm working on not only getting the theoretical and practical background to share with my students, but also learning how to teach and teach well.

Let me tell you that computer science education doesn't have to be like what you're suffering. I know it can be good, and I want to make it even better.

What does this mean for you, now, while you're taking up your degree at Adamson University?

Well, if you can't do anything about your teachers right now, you have many ways of coping. Open source gives you an opportunity to test your knowledge and make a difference world-wide. Even as a student, you can work on really cool things! Come hang out with us, too. We can challenge you. We can help you stay enthusiastic and passionate about computers. When are you usually free?

CS21A: Dr. Sarmenta did the worm thingy for control. I need to find
a better way to explain that, as it seemed to have gone over most
people's heads. My class had fun with the while loop exercises, though.

CS110: More deque implementation. People are doing surprisingly
well, even those who weren't really paying attention in class.

Reviewed arrays and linked lists. Discussed array and linked-list
implementation of stacks by describing the behavior of a stack and
asking them to define push and pop. Mixed success, but seemed like a
good exercise. Next up: queues, deques, and sequences.

CS139.3: Told the class what was going to happen. Had a fruitful
review session of the past five problems. Made sure everyone knew
how to read input. Promised to discuss Arbitrage and Kissing Cousins
on Wednesday. Okay class session, although small.

Dr. Sarmenta finished the lecture on Java Basics and started
on Conditionals. I'm worried that the students might find the
discussion on preincrements and postincrements a bit too abstract, as
they don't have use for that yet. Dr. Sarmenta thinks it's wiser to
get the topics out of the way, and since he's senior for that section,
well... Anyway, I'm going to postpone that topic until I get to for
loops, where it really makes sense.

I'm also worried about the long discussion on conditionals and
grouping statements with braces. He spent a lot of time pointing out
possible bugs. I guess this is a good thing because otherwise the
students might pick up the bad habit of making small, random changes
to their programs in order to get things to work, but again, it
felt somewhat disconnected.

I started my MIS class with a quick overview of the exercise. I
explained a few of the quirks, then moved on to conditionals in the
context of the bank account exercise. I explained it in English and
then showed them the Java code to do it, which they dutifully copied
down. I also showed them how to use the debugger to investigate the
behavior of the if/else structure. I felt good about trying to follow
the BlueJ way of making exercises.

CS110

Armed with more examples, I went over methods of justification again.
They understood the contrapositive immediately when I used English
examples, and they were surprisingly familiar with the various
examples for proof by contradiction. Loop invariants are a little bit
clearer now, but they still need a lot of practice identify the
statement S and proving it holds true before, during, and after the
loop.

CS139.3

Mini-contest. Okay results; a number of people solved at least one
problem, and Mark got all 3. I should be moving into searching and
sorting soon. I guess I'll have to cover normal sorts so that people
using the Online Judge know what to do. I should also cover the
shortcuts...

CS21A: Both the CS and MIS classes appreciated having unit tests that
thoroughly checked their work. Almost everyone quickly got the hang of
the exercises, although I still need to make sure that a few people
review attributes thoroughly. I was happy to hear students laugh when
their code passed all the tests.

CS110: Bleah. Floundered in class. Must definitely make up lots of
layman's terms explanations.

CS139.3: Gave them two problems to think about and let them talk about
solutions. Lots of fun. Must remember to bring harder problems for the
advanced students.

CS21A: Dr. Sarmenta went through half of Java Basics. I did too.
Students nodding. Assigned bank account and converter as homework so
that they'll have questions on Friday.

CS110: Induction went more smoothly than I expected. Whee! I gave them
the sum(2n - 1) = n * n problem. They finished quickly. It was good
that I solved both problems in advance.

CS139.3: Fun discussion of the two problems from the minicontest.
Neill shared his solution. Learned something new. (He stored
everything as strings!) I told them about my hashtable/vector hack,
and got appreciative ooohs. Also taught them how to justify text
and read lines flexibly.

CS21A: (B) Intro to Java lecture. (G) Intro to Java lecture, lab
discussion. # I finished all of the feedback today. Yay! What
worked: the first lab went very well. What could be improved: Move
how-to-zip-files and demonstration to first week of classes.

CS110: Review of efficiency with a 5-point quiz. Many people need to
review. Hmm. What am I doing wrong? Maybe I should use more
exercises and fewer lectures. How can I make exercises easy to do in
class? Not sure if proceeding to next topic (correctness, ending
with induction) was the best thing to do.

CS139.3: Had fun finding two simple data structures problem.
However, Mark was the only one who could solve it within given
timeframe. Spent half an hour setting up PC2 and getting the hang of
things. Next time, won't have that problem. Should also release
notes on how to do input and output. Crash course in Java. Have
assigned problems for student discussion. Will probably allow
newbies to work in groups first.

Okay, I should be satisfactorily prepared for CS21A now. For Dr.
Sarmenta's class, I can walk through parts of the lab exercise and
challenge them with drawn figures on the board. For my class, I plan
to go through the post office simulation. If I have time after the
debriefing, I'll do an intro to the lab. The interactive part should
be doable.

CS21A-B: **OK:** The mail system simulation mostly worked,
although it could still be tweaked slightly. His slides were okay,
too. **NI:** People need to be assigned reasons
to use the mail system simulation.

CS21A-G: **OK:** My slides. Ended three minutes early, but
otherwise pretty okay. Got a few laughs. **NI:**
I could use a presentation chockful of filler material.

CS110-A: **OK:** I prepared slides with the outline. **NI:** I ended
much too early. Should always have the next session ready, I
suppose. Also, SHOULD NOT WRITE ON BOARD WITH PERMANENT MARKER.

CS139.3: **OK:** Again, brief overview with class outline and
policies. 3n+1 was a surprisingly enlightening problem. **NI:**
Brief primer on working with the online judge? Also, scared a number
of the students.

CS21A: Introduction to Computing I. Experimented with
BlueJ and an objects-first approach. Students liked the
interactive environment and had fun with the graphical and
game-based exercises. Reading exercises helped build confidence and
the students inferred the use of control structures from them. The
programming exercises also helped them appreciate methods. However,
I need to give them more opportunities for practice and I should
challenge them more.

CS21B: Introduction to Computing II. Students continued
working on their projects from last semester, with a twist: they did
_other_ people's projects. Some groups had a hard time working with
old code, but it looked like a pretty good learning experience for
everyone. Making reviewers for the final exam was also a fun
activity. They also picked up data structures easily, and their
advanced studies in threads and files last semester paid off.
Downside: Networking still difficult to test.

CS161: Operating Systems. I was initially worried about
teaching a traditionally book-centered course, but managed to
survive a semester of Powerpoint slides and departmental tests.
Weird analogies helped out. Made the CS finals more
computation-based, but students lacked practice. If I ever teach
CS161 again, I'd like to emphasize that aspect over the memorization
currently required.

Plans for next semester:

Heterogenity. Students come with different backgrounds and
proceed at different paces. I want to take advantage of that by
providing many exercises and examples for students to learn from so
that they can go at their own pace.

Progress. I want to be able to monitor student progress in a
spreadsheet or a website. I'd like to keep track of their
self-evaluation as well as my own evaluation.

Exercises. Students responded well to the fun and
creative exercises I came up with for CS21A and CS21B. I think I've
collected enough games and puzzles to demonstrate most of the major
points in CS21. Over the summer, I plan to write up these exercises
in a lab manual. The exercises will vary in difficulty so that
beginners can still find fun and exciting projects to work on.

Drills. I would like to spend 5-10 minutes on speed drills to
accustom students to solving written problems quickly. This will
help them prepare for the midterms and the final examinations.
Practicing for these drills will also keep them busy just in case
they have nothing else scheduled.

Students found it much easier to work with methods and parameters when
doing programming exercises. Also, ASCII drawing exercises drew their
attention. We should emphasize this in CS21A next semester.

Not that I'm too fond of focusing on structured programming, but
they're no longer worrying about syntax _and_ they feel challenged and
happy, so it can't be entirely a bad thing. They don't seem to mind
working on toy problems, either.

I'm hiding under my desk with a large box of assorted candies and a
laptop. It had been a particularly tiring CS21A session, with my
carefully prepared string exercises mysteriously unreachable - proxy
problems? host problems? - and... well... a student with a
surprisingly poor grasp of the subject matter, which made me feel bad
as a teacher - which is, once again, why I'm hiding under my desk. It
feels nice here.

I must remember that the discipline of problem-solving and the
structured logic of computer science do not come easily to other
people. I hear the frustration and shame in my students' voices as
they try to write the programs I ask them to do far more often than I
hear their exultation. With a sequence of exercises I strive to lead
him to the realization that loops are simply a way to repeat code
conveniently, to help them make it a part of they vocabulary.
Sometimes I feel like Anne Sullivan to stubborn Helen Kellers,
patiently repeating ignored hand-gestures while waiting for that one
spark of genius that will help them unlock their world.

I arranged my exercises in terms of difficulty, but I need even
simpler exercises to help them build confidence. I want so much to
make them see, to make them understand - but I must guide them slowly
and with questions so that this logic becomes an inseparable part of
them, not just something given to them to study now and forget later.
I want them to have a sense of control and accomplishment.

I want to unfold them, find the core of the problems that prevent them
from learning, stretch them, challenge them, transform them - but oh,
how difficult it is to even find a sequence that will be challenging
and yet at the same time encouraging! How much easier it would be to
not care, perhaps, or at least not bend to each person's needs - to
let people sink or swim according to their own efforts. How easy it
would be to just say that oh, perhaps a student is not meant for a
certain course. I would perhaps be doing a greater service to that
person's potential classmates and coworkers if I failed a student who
did not show potential. Yet such reflects on me, too. Perhaps it is a
conceit to think that I can reach even those whom most think are
unreachable...

I lack so much as a teacher. I love crafting exercises to guide people
along a path. I love finding out where a person is and trying to form
a personal study plan to help. I tutor, I mentor, I question, I
challenge. Do I teach? Rarely. I think of this as trying to help
people learn. Perhaps I'm meant to be more of a guide, more of a
tutor.

I love spending time with people and helping them understand
something. My CS21B class is incredible to watch - the people who had
such a hard time during the first semester seem to have caught up and
are doing quite well, and that helps me believe that it's worth it. It
must be worth it, must be worth times like this...

Students gain confidence by going through a number of reading
exercises before proceeding to programming exercises.

A combined group/individual exercise allows all the students to
cooperate while still giving them time to practice on their own.

Candy is a good thing, particularly during examinations.

All-or-nothing exams are easy to check and are particularly apt for
reading exercises. However, students need to be exposed to them
early on so that they become familiar with the stringent
requirements and so that mistakes can be dealt with early.

I should have a morning schedule so that I wake up early.

I greatly prefer having students work together on exercises than I
prefer lecturing, although I am getting the hang of lecturing because
of my CS161 class.

Quizzes at the beginning of a class are a bad idea unless they're
regular. Students don't get to study enough - context switch.

We started with programming today. I think that the reading exercises
helped significantly, as the students quickly remembered which
structures to use and how to use them. We should try that in the
future.

It's amazing. The class is practically running itself. The time I put
into making those exercises was definitely worth it. They're off
solving them or making up their own exercises. With documentation,
time to explore the system, and the freedom to make mistakes and ask
questions, the trainees learn almost entirely on their own.

When they do have questions, they tend to ask each other first before
asking me. I handle the questions they can't figure out from the text
and clarify things that are fuzzy.

It's really amazing. I hope they'll leave the training confident that
they can learn whatever else they need to - considering they learned
Perl nearly on their own! Because I'm more into getting lots of people
do Perl, I'm not worried about long-term profitability. After all,
what training center would do well if they kept encouraging students
to learn independently?

That said, it was a lot of work preparing the exercises, and I can't
count the number of times quick thinking and familiarity with UNIX
made things easier. For example,

and judicious use of ncftp's mput command (skipping the
already-uploaded files) allowed me to easily make Perl's documentation
available even though the server didn't have anything but perl(1).
Better than manpages, actually, as these were hyperlinked! =)

tar zcvf day2.tar.gz /usr/local/training/home/

will allow me to pack up all their work so that I can use my Emacs
keyboard macro to send it to their listed e-mail addresses. (I should
get around to making that a defun...)

Yesterday was my first day of corporate training. It was surprisingly
draining. On my feet almost the entire day, facing the same crowd,
waiting for their questions... After the training, I was so zoned out!
Fortunately, it was just a short walk to Powerbooks in Greenbelt. To
top it all off, I discovered a chocolate bar quite near there!

The trainees are remarkably independent, preferring to work on the
exercises on their own or in small, informal groups instead of
listening to me explain the solution. My role is more of a
facilitator. I point them to the documentation. I also walk back and
forth looking for people who are stuck at a problem or are faced with
a trivial bug they can't find and fix, and I give them small hints.

For this group, it seems very important to gain mastery of the basics
first - so we'll stick with the promised coverage and we'll have
plenty of exercises. That works out for them because they'll have time
to gain confidence. That works out for the training company as well
because they'll have an opportunity to do Advanced Perl Scripting.

It was a very good thing that I'm used to this style of teaching -
embedding lessons in exercises that build on each other and involve
several concepts. If I expected to lecture, I'd have been dead on the
first day! With that in mind, I had a lot of fun preparing more
exercises for them. I worked until one in the morning. A phonebook at
my side, I came up with all sorts of phone-related exercises. I hope
they take it well; they might just be sick and tired of anything that
looks like work after all!

I met Dominique yesterday and we swapped notes on training. From what
little I know of it, I rather like corporate training. It gives me a
chance to spread the good news of UNIX. ;) That said, I like school
teaching, too. Maybe I can do part-time teaching and part-time
training in the future.

It was a joy to teach brilliant and enthusiastic students who learned
by leaps and bounds. I hope I had in some way accelerated their
learning, widened their horizons and helped them enjoy computer
science even more.

Dearer to me, though, are students whose aha! moments are few and far
between despite their efforts. They were the reasons why I taught
before, and they are the reasons I want to return.

1st Sem 2003

CS21A

The non-textbook, real-life examples were useful.

The students prepared monthly summaries of what they learned in
bullet-point format. I compiled their notes and put them on the
website. I learned what they learned, found some misconceptions I
needed to correct, and helped them build collective knowledge.

I explored code analysis. Some of my exercises involved cutting and
pasting pseudocode before the corresponding Java code which used
unfamiliar statements. This should be followed up with a worksheet
that asks students to formalize what they know.

Many of my students had a hard time with growing arrays. We should
introduce an intermediate step - storing a variable number of
elements in an array. I think we should move this to later in the
course (or even CS110) to give students time to develop familiarity
with the language and skill in problem-solving.

We de-emphasized language features like switch in order to focus
more on mastering a subset of the Java language. I think this is
better than drilling syntax into them without developing their
comprehension.

The reviewers for different topics were creative. I'll pass them on
to the next batch of students.

Flash animations and self-guided tutorials helped during class and
consultation time. I should spend time learning how to use these
tools.

CS123

Although I still feel that I lack experience, I found myself
occasionally being insightful and informative. Must have picked up
_something_ from working on different projects. Still, I don't feel
prepared for CS123, and I'm glad Dr. Vergara is teaching it next
year.

Summer 2003, CS21A

Summer is short. I feel that I didn't fully take advantage of the
extra hours they have outside class, though. I need to learn how to
prepare good homework.

Students got tripped up by minor programming bugs in the beginning.
New topics should probably involve groupwork so that there are more
people debugging. The students learn more when they explain to each
other, too, and enthusiasm can be infectious.

I asked the students to introduce themselves to me through e-mail.
This allowed them to go into a lot of detail about their background,
interests, likes, and expectations. I replied to each of them. I
think it's a great idea, and I plan on doing it again in the future.

Maybe we should work on making a CS21A website that's well laid out,
searchable, and downloadable.

Tutorials on the Net are hard to learn from. The good AWT tutorials
seem to have disappeared and the Swing ones can be hard to
understand. We probably need to develop or at least compile a set of
topic-based lecture notes / slides / exercises / whatever. We
already have the Powerpoint slides from the last few sems, but they
could be supplemented with lecture notes and additional resources.

For each topic, we should have an archive of exercises arranged by
difficulty. I took some of the exercises from the Graded Problems in
Computer Science book in the library and I made up some of my own,
but I feel that this is an area that could still use a lot more
work.

It would probably be a good idea to have threaded discussions on
each topic, but I don't know of any content management systems that
make it easy to keep track of all the discussions going on at a time.
I'm tempted to write one.

Small group instruction seems promising, but I don't know how to
keep track of progress well enough. Maybe short online tests and
occasional points of synchronization? I can group topics into a unit
and give unit tests on scheduled dates, allowing them to take up the
unit's topics in any order (but with suggested trails, of course).

I'm tempted to do pre- and post-tests. Must be my inner grade
school teacher.

Students had a hard time getting Java to run at home. We provided
the J2SDK and docs on a CD, but we didn't prepare the CD well
enough. Students were confused by the list of files on the CD, and
they had a hard time setting up the path. Next time, we should
include a README or an autorun.

Students were confused by JCreator's output directory settings, but
they found the compilation error capture handy, as it allowed them
to scroll up and see the first error. I suggest the use of Gel - a
free, fast IDE that has Intellisense. Actually, I'm tempted to
suggest Emacs, but hey... ;)

An MSDOS primer would be handy - not a lecture, but maybe a handout
or webpage. It could explain how to create directories, use DOSKEY,
move files, that sort of thing.

The upgrade to Windows XP was rather strange. We had problems with
Java and with connecting to the Internet, so we stayed on Windows 98
instead. That said, it would be nice if they tried out a shell with
tab completion.

I'm more comfortable with having students do exercises on their own
or in small groups and then walking around to monitor their progress
and help them with difficulties than I am comfortable with
lecturing. I suspect that means I need to learn how to prepare
better lectures, but I never really liked lectures as a student. =)

I tried introducing Vectors before arrays, because the project I had
in mind didn't use fixed sizes. That made some things easier to
explain (addElement, removeElementAt), but my lecture notes for that
section really need to be rewritten. The old arrays-first way is
probably better.

I found it pretty easy to learn student names thanks to the seat
plan, and I made it a point to use the students' names whenever
possible. Then again, I was handling only one class. I wonder how
I'll do with the normal load.

I need to learn how to organize my lessons more.

Haven't gotten around to thinking about Linuxifying the labs. Oops.

Have we already formally stated what a student should be able to do
after CS21A? I found it hard to prioritize. Rubrics would be nice, too.

I have much to learn about teaching, and I'm looking forward to the
next sem! =)

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 [email protected] .

Page: Teaching Reflections

Updated: 2005-09-17

NOTE: ANTI-SPAM MEASURE NOW IN PLACE. Please answer the following question with the right number in order to send me your comment.