Friday, May 28, 2010

CRV 2010

The Seventh Canadian Conference on Computer and Robot Vision (CRV 2010) is being held right here in Ottawa next week, and I'll be attending at least a couple of the days. A paper I wrote based on some of my Masters work was accepted to be presented there, and I was also invited to give a tutorial on feature detection for the free tutorial day happening on Sunday.

In the paper, I talked about using supplemental information to help make existing SURF and MSER feature descriptors a bit more unique. I found that adding this information didn't help SURF descriptors a whole lot in many cases, but always seemed to improve MSER performance. (If none of that makes any sense to you, basically I just did some stuff to make matching features in images a little bit easier.)

The tutorial is just an overview of some of the different feature detectors and doesn't get into much detail at all. It's only 15 minutes including questions, so there's no point in trying to get too deep into it. My slides are very visual and minimal, but I made a PDF copy of them that includes many notes to be posted on the web.

You can see the Tutorial Day schedule, or look at my slides from the main CRV website. My paper isn't online anywhere yet, but if you want to download and look at my 20 MB thesis file, you can.

Thursday, May 27, 2010

Tech Mommies

A friend of mine is expecting her first baby in the next couple of months. She asked me if I could do some maternity shots with her. The criteria? Nothing cliché! In fact, she was hoping to even bring some geekiness into it so she could be a role model for the CU-WISE community.

My idea was to make use of her cute little teeny laptop. Perhaps using her belly as a table? Well, she loved this idea, and luckily she remembered to bring the computer to our outdoor photo shoot. I'm really glad she did because some of the cutest photos are with the laptop and her glasses on.

This one doesn't do the table thing, but it shows her perfect round belly really well. Gorgeous!


Thanks, Natalia, for letting me put your photo online so you can be an inspiration to us all - we love you!

GHC10 Talks

It's that time of year again! My travel scholarship application is in, our committee on online communities is starting to make headway, and the results of our talk submissions are out. Grace Hopper Celebration of Women in Computing 2010 to be held in October in Atlanta, Georgia is in season.

I was involved with a couple of submissions this year, but unfortunately only one got in (but I'm still excited to be a speaker in some capacity!). The panels I organized were on making the most of grad school. The concept was that there are lots of risks and rewards for going beyond the research, and not everyone is aware of them, nor does everyone know about the extra-curricular opportunities available. The topics and panelists I gathered together were really amazing, but our submission document probably needed some work. For instance, it looked like we had too many panelists and topics for a one hour slot. I learned a lot from the reviewers and will definitely try again next year.

The other panel I'm on came out of the blue, and I'm really excited to meet and work with the other ladies on that one. It's going to be on outreach using video games, but with a particular focus on attracting girls to the programs in the first place. I've had good luck with my mini-course, but other groups have had a harder time with recruitment, so what is it that makes them give it a chance?

This conference always reinvigorates me and makes me that much more motivated to be the best I can in my graduate program. This time I'll be more or less just starting my PhD research when I attend, and expect that I'll have many interesting conversations with chances to mentor and be mentored. I can't wait for October!

Friday, May 21, 2010

CSTA Voice

If you are interested in CS Education and haven't heard of CSTA's Voice newsletter (CSTA = ACM's Computer Science Teachers Association), go check it out!
The CSTA Voice is a quarterly publication for members of the Computer Science Teachers Association. It provides analysis and commentary on issues relating to K-12 computer science education issues, resources for educators, and information for members. The newsletter supports CSTA's mission to promote the teaching of computer science and other computing disciplines.
You can even get PDF's of the newsletter free online.

Plus, as a bonus, if you go read the current issue (Volume 6, Number 2), you'll get to read an article by me. Just scroll to page 6 and read a short article about my mini-course on computer science and games.

Thursday, May 20, 2010

Feedback Before Assessment

Continuing my reflections on Ken Bain's What the Best College Teachers Do (started here), I wanted to touch on a couple of things in the chapter on preparing to teach. The chapter largely contains 13 questions that the best teachers ask themselves as they prepare for their classes.

The question I marked while reading the book was this:
How will I find out how students are learning before assessing them, and how will I provide feedback before - and separate from - any assessment of them?
The part about giving feedback before assessment is something I rarely see in computer science. The first time I ever got feedback was when I got back my first assignment, already graded. I suppose the more recent introduction of tutorials in first year courses helps address this, though few courses have the resources to offer this. There is little interaction between students and instructors in most classes, and even if there is, it doesn't really have to do with providing feedback on abilities.

I'm taking a Graduate University Teaching Skills (GUTS) certificate program at Carleton, and we recently saw a video that I think demonstrates perfectly how science instructors can give feedback during class:

Thinking Together features three distinct models of collaborative learning -- a large introductory physics lecture, a small class in celestial navigation, and a section in physical chemistry -- filmed at Harvard. In each course, students discuss problems and devise solutions with the help oftheir instructors and peers. The results are greater student engagement and greater depth of learning.
A more modern version of this concept, which uses clickers, is shown in this video excerpt.

There are many basic, fundamental concepts that are so easy to misunderstand during computer science lectures. What a great way to clear those up before moving on.

Friday, May 14, 2010

Applying How We Learn to Computer Science Classes

While reading What the Best College Teachers Do by Ken Bain, I felt excited about how much the knowledge contained within could make computer science education better. Although it seems that change is very slow, I do see some professors trying very hard to improve their courses, often using the techniques described within.

I plan to write several posts over the next while that will hopefully capture the essence of what I found the most useful in this book, and how I have seen it put into practice in computer science (or imagine how it might be done). This is, of course, no substitute for reading the book, and since it's under $20, you may as well hit the link above and buy it!

So without further ado, let's get into the first chapter, What Do They Know About How We Learn. One of the main takeaways is a list of four key concepts that came up when studying America's best college professors. They represent that which transcended disciplines and were "cobbled together from their own experiences working with students." And, as some may notice, they are "conceptions of human learning that are remarkably similar to some ideas that have emerged in the research and theoretical literature on cognition, motivation, and human development."

1. Knowledge is Constructed, Not Received

This is probably the biggest point that needs to be explored by many CS educators. The thing is, it's not an easy thing to know how to help students construct their own knowledge about programming languages and algorithm analysis rather than simply tell them all the details. Sure, classes on these topics have assignments and sometimes even tutorials, but lectures almost always follow the same old formula of going through many, many Power Point slides each class. There's little interaction, and almost no thinking required by students. I'm usually pretty good at paying attention, but even I drifted away in classes like this.

I did have some professors who could help us construct our knowledge at least minimally. I remember my very first university class on Java, where I learned to program for the first time. Our professor often built applications in class step by step, encouraging us to figure out what we had to do next. I often wonder if I would have stuck with computer science had I had a different professor for that first class.

How can we take this idea of constructing knowledge even further in computer science?

2. Mental Models Change Slowly

To achieve deeper learning, students need to
(1) face a situation in which their mental model will not work (that is, will not help them explain or do something); (2) care that it does not work strongly enough to stop and grapple with the issue at hand; and (3) be able to handle the emotional trauma that sometimes accompanies challenges to longstanding beliefs.
Creating a program in class is a perfect opportunity to challenge students' mental models. Teachers can gently lead them to answer and suggest the next step based on their current mental models, follow through with the idea, and show that it doesn't work. This would be followed by an explanation/discussion on why it didn't work.

This could easily be used in algorithms classes, too - especially those that need to use probability. Our mental models of how probability works don't seem to be all that accurate in general. A short exercise to be done in small groups in class could be given, and when the answered are shared the misconceptions would hopefully arise and then be discussed.

I think one reason these kinds of techniques aren't used more during lectures is that they take time. Less material can be covered when time is spent on discussions and activities. I would suggest, though, that if the main idea can be well understood through these kinds of things, then the 'other stuff' can be easily reviewed quickly or as homework. In the end, I may not have memorized as many things in this sort of class, but I definitely understand the topic better.

3. Questions are Crucial

"Some cognitive scientists think that questions are so important that we cannot learn until the right one has been asked."

I'm not sure why so few questions were asked in most of the computer science classes I took. Was it because of that time issue mentioned above? Was it because nobody was able to synthesize the information fast or well enough to know what questions to ask by the end of the lecture? Are professors just not receptive enough to questions?

I have noticed in my first two lectures of my course Introduction to Computers for Arts and Social Sciences that students ask a lot of questions. I don't know if it's because I take the time to answer them in a way that I think will help everyone, or if arts students are just more used to asking. I do tend to conduct my lecture as one big tutorial with some slides, some activities, and some discussion, whereas most computer science courses are strictly lectures with slides. Maybe that helps.

4. Caring is Crucial

Students need to care about the material to remember it. They need to care about what the answer will be when they ask a question. This makes sense, but how do we make them care? When it comes to code, I figure you can't just go through lecture after lecture of syntax and expect anyone to care. Yet I've had classes like this. Why can't we have some examples that seem like they could be coming from the real world? Why can't we hear some personal stories of problems professors have encountered in their own careers so we know we are learning how to avoid having to the face similar issues?

A recently hired instructor in our School of Computer Science is currently revamping a couple of courses by making the material within them actually matter. I think she's doing a great job of bringing what she learned from years in industry into these courses. She'll be able to tell students why what they're learning matters because now it actually does. There are more than a few other courses that could use the same makeover, but it remains to be seen whether enough people have the will to take it on.

Tuesday, May 11, 2010

Connecting Computer Science

I taught the first lecture of my first undergrad course last night. As I've mentioned before, it's a class called Introduction to Computers for Arts and Social Sciences, and it's not a required course, though many students use it to fulfil their science credit.

In the past, the course has focused on learning the basics (very basics) of computer usage, and delved fairly deeply into the advanced features of MS Word, Excel, and Access. While I don't want to say that these things aren't useful, I felt like there was a serious lack of actual science in this course. The students take it specifically because it is easy (and many were willing to admit this).

I also thought that, as a student, I would find it painfully boring to sit and watch an instructor go through the slides used in the past. I don't want to suggest that this reflects poorly on the previous instructors of this course in any way; in fact, the slides are really detailed and make amazing references. That's why I took the time to not only post them on our WebCT page, but also list the topics covered in each set of slides so students could see what might interest or help them. But I had a vision of a much more interactive class where higher learning would take place. The in-class slides have very little text (but do have some in the notes section), and I've even been using CS Unplugged activities with good success so far.

All this to set up the reasoning behind the first assignment I created for the students. This assignment is all about picking a topic of interest, like a hobby, and researching links between this topic and computer science. My vision was to make students feel like computing was actually interesting when looked at through the right lens.

Here is the basic description of the assignment:
- Choose a topic of interest. The most obvious choice is some hobby of yours, but you can also choose an area that is related to your degree or anything else you'd like to learn more about.

- Find out how computing can help. For example, photographers might benefit from the advanced image capabilities of the latest version of Photoshop.

- Look for specific connections to computing. Some questions to ask to get you started: What kinds of problems are faced? What can't be done easily by hand, or what is very tedious to do manually? Are there algorithms that can help solve these problems? What kinds of computer systems and/or software packages are used? How might people benefit from learning to think logically or computationally?

- Use Internet and library resources, and ask people who know a lot about the topic to find out more.

- Write a report of at least 1000 words summarizing your findings. Submit your report in Microsoft Word or PDF format, and be sure to include a bibliography.

- Be sure to preview the 'grading form' above to see how your work will be assessed.

Struggle with writing? Book an appointment right away with Carleton's Writing Tutorial Services.

Struggle with research? Get help at the library.
The grading form covers five main areas: creativity, writing style (spelling/grammar/flow), description of the topic, links to computing, and bibliography.

Students have already been checking with me that their ideas are ok, and so far, I have to say... they are great! I'm really happy to see the creativity happening, and am looking forward to reading some of the results. Maybe some students will give me permission to post their reports here.

Saturday, May 8, 2010

Scratch and Eighth Graders

I finished teaching the third round of my mini-course on Friday, and was so exhausted (in a good way) that I accidentally fell asleep at 9pm.

This year, I tried Scratch as a platform for making our game projects instead of Game Maker. One of the biggest factors in this decision was the community on the Scratch website; I figured the girls would be more likely to continue playing around with Scratch because of it. Game Maker users seem to have minimal sharing of projects in comparison.

On the first day in the lab, I had the girls look at the Getting Started Guide from the Scratch website. Then I got them to go through a few tutorials on Shall We Learn: Sprite Interaction via Variables, Working with the Stage, and The Pong Game. I provided a few links to useful resources like the Scratch forums and reference guide, but I'm not sure anyone looked at those.

As I walked around watching them try the tutorials, I noticed how quickly they were willing to start exploring on their own. Many were already drawing their own graphics and playing with the many code blocks available to them. I could be remembering wrong, but I don't recall that sort of confidence with Game Maker.

As the week progressed, I was really impressed with what I was seeing. However, there were a few snags that we hit with Scratch that would not have been a problem with Game Maker. For example, one group wanted to make a side scrolling game, which requires a lot of extra work and thinking with Scratch. Another girl wanted to be able to shoot bullets from a plane, but Scratch's sprites don't appear to be objects, but rather tied more precisely to instances. In other words, you can't have more than one instance of a sprite.

At the end of the week, I got the girls to complete survey, which included questions about how much they liked Scratch. Some seemed to think it was a great choice, others... not so much. I'd guess that those who were more limited in what they were trying to accomplish probably didn't love their Scratch experience. Some even suggested using Game Maker again next year.

Assuming I am able to do the course again next year, I have not yet decided which software I will use. Both have their pros and cons. I may wait and see how using Scratch for my upcoming introduction to computers class for arts/social science students goes first before figuring it out.

You can see the mini-course material and some of the games that were made this week (many of which are not yet totally done) on the web page I gave the girls to look at throughout the week.

Tuesday, May 4, 2010

First Course Outline

Is everyone this excited about their first course outline? I'm not sure why, but I'm feeling sort of giddy about it. I mean, sure, I've TA'ed before, and taught younger students for outreach and my mini-course, but this is the first full course I'll have ever taught. It's called Introduction to Computers for Arts and Social sciences, and I wrote a bit about it before.

The outline is available online on our School of Computer Science website. I wouldn't say it's 100% complete yet; I plan on finalizing it this weekend after I'm finished with the mini-course. I will also be organizing material on the course's WebCT page, and will have to link to that. I've also made up a schedule of topics and assignments separately, but I'll need to fill in the details soon and get ready for the first class.

As a bonus, I also just learned that this is not a required course for students (I thought it was). About half of the students are there because they really want to be, and the other half because it's an easy credit to fulfill their science requirement. I'm definitely happy with that!

I'll post some of my material as time goes on, and hopefully remember to record how well it went.