Per Ola Kristensson | Blog

Other Stuff

Archive for the ‘computer science education’ Category

AIED 2011 conference report

Tuesday, July 12th, 2011

Queen Street, Auckland

I recently attended the 2011 Artificial Intelligence in Education (AIED 2011) conference in Auckland, New Zealand.

The main focus of the AIED conference series is various approaches to designing and evaluating intelligent tutors. An intelligent tutor is basically a computer program that uses AI techniques (such as planning algorithms) to teach students new concepts or techniques based on a model of what the students already know, or are supposed to know. The conference is quite old, this was the 15th biannual conference. The conference is organized by the International AI in Education Society. It also seems that the AIED conference is liaised with the Intelligent Tutoring Systems conference (ITS) so that ITS runs every even year and AIED runs every odd year. Collectively ITS and AIED publish the vast majority of new research in the intelligent tutoring field.

I was at AIED to present a poster on the first steps towards designing intelligent tutors for text entry methods. The idea is to increase user adoption of novel text entry methods by using highly effective and engaging intelligent tutoring. I wouldn’t classify myself as an intelligent tutoring researcher so attending this conference was a good opportunity to get an insight into the field’s frontier.

AIED conference proceedings

The conference was held at the Faculty of Engineering at the University of Auckland’s city campus. The conference had a poster session, an interactive event, and three parallel paper tracks. In my opinion the overall organization of the conference and the program worked out very well.

The presented papers fell into three categories: systems, user studies, or data mining. I learned that the latter is apparently so popular that people have felt the need to start a conference on just that, the Educational Data Mining conference (EDM). I also found that machine learning is becoming increasingly popular in intelligent tutoring systems. Some of the machine learning techniques people used were POMDPs and Bayesian models. An interesting concept I didn’t know about before was Open Learner Models (OLMs). OLMs exploit the fact that while a student is using an intelligent tutor the system develops a model of the student. The idea behind OLMs is to figure out how to present the entire model (or aspects of it) to the student. Presumably this can aid the student’s learning.

Some of the papers presented intrigued me. In particular a paper on motivational processes seemed to point in good directions and another paper on confusing students (!) had led to some rather surprising results. I also found out that another active research area is authoring tools for ITSs, some which use techniques from the end-user programming field.

Overall I very much enjoyed going to this conference. It was refreshing to learn about an area of research outside of my comfort zone. Time will tell if I will submit a full paper to AIED 2013!

Using Objective-C to teach object-oriented programming?

Monday, September 6th, 2010

I am programming in Objective-C right now. It is an interesting programming language, essentially a smaller and simpler alternative to C++. However, unlike C++, Objective-C is a strict superset of ANSI C, which means any valid C code can be compiled by an Objective-C compiler, something that a C++ compiler cannot guarantee (for instance, the need to cast void-pointers is different in C and C++).

What Objective-C does is add additional well-needed abstractions to ANSI C, such as classes, interfaces and inheritance. I have to admit, coming from mostly C and Java programming, I was initially annoyed by the Smalltalk-inspired syntax (and I’m still not convinced it makes any sense).

However, I am starting to think that Objective-C might be a good teaching language for an ambitious programming class. Unlike Java and C++, Objective-C’s syntax clearly differentiates between standard function calls and instance method invocations (message expressions). The syntax also differentiates between method declarations and function declarations.

The theory is that by having distinct syntax for these and other aspects of the programming language the learner is forced to conceptualize the differences. Syntax is enforced by the compiler and conceptual misunderstandings will lead to compilation errors that the learner has to correct. In other words, conceptual misunderstandings are explicitly pointed out to the learner by the compiler. If the learner does not satisfy the compiler the program won’t compile, let alone run. For example, the Objective-C syntax makes it impossible to call an instance method and not realize that this is message passing and not a static function invocation.

Another potential advantage of using Objective-C as a teaching language is that it is somewhere in the middle between Java and C++. It is closer to the hardware than Java. For instance, when an object is created in Objective-C, the idiom is to first explicitly allocate memory for it and thereafter initialize it (e.g. the expression UIButton *button = [[UIButton alloc] init]; first allocates memory for a structure to represent the button, and then initializes it). This first step of allocation and memory management is hidden for Java programmers. However, computer science students obviously need to understand memory management. Yet Objective-C is not as convoluted as C++. For instance, it doesn’t have operator overloading, templates and multiple inheritance. Hence it is not too daunting for the beginning programmer.

This tutorial succinctly highlights the differences between Objective C and C.