Showing posts with label Education. Show all posts
Showing posts with label Education. Show all posts

Wednesday, December 5, 2012

Review / Think Like a Programmer: An Introduction to Creative Problem Solving

Programming involves a particular flavour of problem solving. If you're a beginner trying to get better at it, an educator teaching beginners, or just someone who enjoys thinking about thinking, then I may have just the book for you: Think Like a Programmer from No Starch Press.


This book is, as its subtitle promises, an introduction to creative problem solving.  It starts with a chapter on general problem solving techniques such as breaking problems into smaller pieces and looking for answers in what you already know.  It then devotes a chapter to solving non-programming problems with code.  After that, most of the book covers some of the basic problem types all programmers encounter, including arrays, dynamic memory, class design, recursion, and code reuse.  The last chapter summarizes general techniques for thinking like a programmer.

I read this book as someone interested in computer science education, particularly for beginners.  But despite the fact that I'm an experienced programmer of ten years, I actually enjoyed readinf about things I already know how to do.  It ended up being an interesting exercise in thinking about thinking, and it brought my attention back to some of the details about programming that I now take for granted.

The author has an easy-to-understand, approachable, discussion-based style of writing.  There is a good progression through topics — as a course instructor, you could certainly mirror the flow of the book even if you didn't want to use it as the official text.  The numerous diagrams are clear and genuinely useful.  I also love that good programming practices are embedded in the discussion, and that many other aspects of CS (for example, data structures) make an appearance in a natural way.

One of the chapters I was most curious about is the one on recursion, given how difficult this topic can be to teach.  I liked that this topic was introduced with a detailed real-life example of head and tail recursion. I'm not sure if I was never explicitly taught these concepts or if I've come to take them for granted by now, but I have at the very least not thought about the difference in a long time.  I appreciated bringing these ideas back to my conscious mind, and felt like the discussion should be helpful to beginners.  I also liked the suggestion to solve problems as if there was no recursion, and to just trust the recursive call to do its thing.  (Incidentally, you can read this chapter online, where it is offered as a sample.)

There were a few things I didn't like as much, such as the unnecessarily long paragraphs.  I also thought some of the sample problems were cliched and rather dull (how many of us actually care about keeping track of student records?).  Each chapter begins with a very fast review of relevant C++ syntax, and while I understand why this is done, I find it ends up being too sparse to be useful to anyone who actually needs it.

Probably the thing I struggle with the most is the choice of C++.  I actually think C++ is a reasonable early language for computer science majors (at least in terms of what's currently available), and the rationale for choosing it for the book is sound.  However, I don't really know of many post-secondary programs that teach C++ first.  The problem is that the book would become a lot less relevant after the first course or two in a good CS program since the concepts will already have been covered, but it's difficult to make use of it unless you already know some C++.

Nonetheless, given to a new programmer at the right time, I think the book has the potential to be very valuable.  It comes highly recommended in my mind.

Thursday, October 25, 2012

Research Snapshot for Fall 2012

Now that I'm back in school full time, it's a good time to have a look at where I am research-wise.  Here are some of the projects I'm working on and what progress I've made.  (My last snapshot was from Fall 2011, before I went on maternity leave, and has more detail about some of these projects.)

Cognitive Advantages of Augmented Reality

My work in this area was finally published with a learning spin at E-Learn.  You can check out the final abstract and paper on my website or read about it on this blog to see some possible future directions others can take.

Gram's House

Since last fall, this project has moved forward a bit.  One of our team members ran a pilot project that just wrapped up.  The study compared a slightly updated version of Gram's House that tracks player stats, and a new game created by my colleague's students.  It will be very interesting to see the data that was collected during the study.

In the meantime, we are also finding some new researchers who want to try for an NSF (or other) grant to further develop the project.  We've got a few ideas on how to make our project stand out among the many trying to do things like this with games, and I'm excited to see where we go!

Although not everything is public right now, you can track the project on my website.

Teaching and Learning Computer Science With Story

This project centred on the study we did in this past year's mini-course.  The study went well and we learned some interesting things (like the fact that story had little or not benefit over context).  However, the paper we submitted to SIGCSE was not accepted.

We are in the process of deciding what to do next, but I am leaning toward taking what we learned, doing a follow up study, and submitting to next year's conference.  I am not sure if I'd like to stick to the middle school age group or try something in an undergrad class.

Nonlinear Story in Games

This is the thread of research that will be my thesis.  In fact, my supervisor liked the ideas I had put together while on leave, so I have a good, solid direction now! In a nutshell, I want to use procedural rhetoric as a way to break apart story episodes in a reasonable way, and learning theory to dynamically arrange those pieces as well as entire episodes.

Before delving too deeply into my specific ideas, however, I'm going to finish some work I started last fall.  We're looking at nonlinear stories (that is, stories whose events are presented out of chronological order) and comparing them to nonlinear stories in games.  We are trying to see why games shy away from more sophisticated uses of nonlinear stories, which may lead to new ideas on how to do it.