A Late Post On Deadlines, Amusingly Enough

Currently still under a big cloud at the moment but I’m still teaching at Singapore on the weekend so I’m typing this at the airport. All of my careful plans to have items in the queue have been undermined by having a long enough protracted spell of illness (to be precise, I’m working at about half speed due to migraine or migraine-level painkillers). I have very good parts of the day where I teach and carry out all of the face-to-face things I need to do, but it drains me terribly and leaves me with no ‘extra’ time and it was the extra time I was using to do this. I’m confident that I will teach well over this weekend, I wouldn’t be going otherwise, but it will be a blur in the hotel room outside of those teaching hours.

This brings me back to the subject of deadlines. I’ve now been talking about my time banking and elastic time management ideas to a lot of people and I’ve got quite polished in my responses to the same set of questions. Let me distill them for you, as they have relevance to where I am at the moment:

  1. Not all deadlines can be made flexible.

    I completely agree. We have to grant degrees, finalise resource allocations and so on. Banking time is about teaching time management and the deadline is the obvious focal point, but some deadlines cannot be missed. This leads me to…

  2. We have deadlines in industry that are fixed! Immutable! Miss it and you miss out! Why should I grant students flexible deadlines?

    Because not all of your deadlines are immutable, in the same way that not all are flexible. The serious high-level government grants? The once in a lifetime opportunities to sell product X to company YYPL? Yes, they’re fixed. But to meet these fixed deadlines, we move those other deadlines that we can. We shift off other things. We work weekends. We stay up late. We delay reading something. When we learn how to manage our deadlines so that we can make time for those that are both important and immovable, we do so by managing our resources to shift other deadlines around.

    Elastic time management recognises that life is full of management decisions, not mindless compliance. Pretending that some tiny assignment of pre-packaged questions we’ve been using for 10 years is the most important thing in an 18 year old’s life is not really very honest. But we do know that the students will do things if they are important and we provide enough information that they realise this!

I have had to shift a lot of deadlines to make sure that I am ready to teach for this weekend. On top of that I’ve been writing a paper that is due on the 17th of November, as well as working on many other things. How did I manage this? I quickly looked across my existing resources (and remember I’m at half-speed, so I’ve had to schedule half my usual load) and broke things down into: things that had to happen before this teaching trip, and things that could happen after. I then looked at the first list and did some serious re-arrangement. Let’s look at some of these individually.

Blog posts, which are usually prepared 1-2 days in advance, are now written on the day. My commitment to my blog is important. I think it is valuable but, and this is key, no-one else depends upon it. The blog is now allocated after everything else, which is why I had my lunch before writing this. I will still meet my requirement to post every day but it may show up some hours after my usual slot.

I haven’t been sleeping enough, which is one of the reasons that I’m in such a bad way at the moment. All of my deadlines now have to work around me getting into bed by 10pm and not getting out before 6:15am. I cannot lose any more efficiency so I have to commit serious time to rest. I have also built in some sitting around time to make sure that I’m getting some mental relaxation.

I’ve cut down my meeting allocations to 30 minutes, where possible, and combined them where I can. I’ve said ‘no’ to some meetings to allow me time to do the important ones.

I’ve pushed off certain organisational problems by doing a small amount now and then handing them to someone to look after while I’m in Singapore. I’ve sketched out key plans that I need to look at and started discussions that will carry on over the next few days but show progress is being made.

I’ve printed out some key reading for plane trips, hotel sitting and the waiting time in airports.

Finally, I’ve allocated a lot of time to get ready for teaching and I have an entire day of focus, testing and preparation on top of all of the other preparation I’ve done.

What has happened to all of the deadlines in my life? Those that couldn’t be moved, or shouldn’t be moved, have stayed where they are and the rest have all been shifted around, with the active involvement of other participants, to allow me room to do this. That is what happens in the world. Very few people have a world that is all fixed deadline and, if they do, it’s often at the expense of the invisible deadlines in their family space and real life.

I did not learn how to do this by somebody insisting that everything was equally important and that all of their work requirements trumped my life. I am learning to manage my time maturely by thinking about my time as a whole, by thinking about all of my commitments and then working out how to do it all, and to do it well. I think it’s fair to say that I learned nothing about time management from the way that my assignments were given to me but I did learn a great deal from people who talked to me about their processes, how they managed it all and through an acceptance of this as a complex problem that can be dealt with, with practice and thought.

 


Stages of Acceptance

Another short post while I get my head back from the migraine sequence I’ve been in.

I was speaking to someone from industry about some interesting ideas in networking and we had a great meeting because we were constantly agreeing on the resistance to new ideas. There’s a pretty standard set of responses, indicating the evolution of acceptance over time:

  1. It will never work.
  2. It may work but it won’t work here.
  3. Of course we should do that.

What we were discussing was currently in the stage 1/2 phase. Even where people could see its utility, they had a really good reason why it wouldn’t happen here. The first is straight out denial, of course. The second is special pleading, where a set of circumstances are identified as to why a general case (or accepted idea) does not apply here. The last is just plain old Human nature – I told you so.

We see so much separation between the different communities of practice across the disciplines and, regrettably, it’s possible for teaching practitioners to be (effectively) at stage 1 when the educational researchers and designers are at stage 3. Returning to Gladwell’s three requirements for the stickiness of idea, the environment in which the idea is presented and received makes a big difference: context is everything.

I suspect that next year will be one of building bridges for me, between one community and the next. Bridge building is essential if people will be able to walk from one state to another. The term Pontifex (bridge builder) is disputed in origin and is co-opted by churches now, but the existence of the term, whether it originally referred to roads or bridges, emphasises the importance of the role of the joiner, the people who brings things together.

Oh, good, another challenge. 🙂


Place holder post – my apologies

Hi everyone,

I’m home sick today and have been suffering from a string of migraines (really the same one but coming in hard) over the past few days. I’ve been too busy to take time off and, unsurprisingly, I haven’t been able to shake the actual condition, I’ve been treating the symptoms. One of the things about migraine, for those who get them, is that they don’t just make your head hurt, they shake up your brain. Because of this I accidentally released a post this morning that should have stayed queued until the person quoted had had a chance to review it. I’ve made that post private, pending any changes, and apologise for any inconvenience caused.

I may have to take some time off posting long things while I get better but I hope to be back to normal posting soon. (And, if you’re wondering, this took me about an hour to write. If you’re sick, stay home and rest before it goes crazy, people!)

My best wishes and ‘safe’ thoughts to those who are in the path of Sandy.

Regards,
Nick.


Another semester over – what have I learned?

Monday the 29th marks the last official teaching activities, barring the exam and associated marking, for my grand challenges in Computer Science course. It’s been a very busy time and I’ve worked very hard on it but my students have worked even harder. Their final projects are certainly up where I wanted them to be and I believe that the majority of the course has gone well.

However, I’m running some feedback activities this week and I’ll find out how I can make it better for next year. At this stage we look like we’re going to have a reasonably large group for next year’s intake – somewhere in the region of 10-20 – and this is going to change how I run the course. Certain things just won’t work at that scale unless I start to take better advantage of group structure. I’ve already learnt a lot about how hard it is to connect students and data and, in our last meeting, I commented that I was thinking about making more data available in advance. Well, maybe, was the reply from students but we learned so much about how the data in the world is actually stored and treated.

Hmm. Back to the drawing board maybe – but also I’m going to wait for all of the final feedback.

Do I have students who I would happily put out in front of a class to run it for a while, doubly so for a community involvement project, with the confidence that they’ll communicate confidently, competently and with passion? Well, yes, actually – although there’ll be a small range. (And now I’ve just made at least three people paranoid – that’s what you get for reading my blog.)

There is so much going on that the next two months are going to be pretty frantic. Next year is already shaping up to be a real make-or-break year for my career and that means I need to sit down with a list of things that I want to achieve and a list of things that I am and am not prepared to do in order to achieve things. The achievement list is going to be a while coming, as goal lists always are, but the will/won’t/want list is forming. Here’s a rough draft.

  1. I still want to teach and be pretty involved in teaching. That’s easy as I’m not senior or research-loaded enough to get out of teaching. (I don’t really have a choice.
  2. I need to have more time to work on my non-work projects. I’ve just spent all of a Sunday working and the only reason I stopped was that I couldn’t spell constructivist reliably any more. (Yes, that just took three tries.)
  3. I want to have enough time to spend time with my students and not looked rushed or feel guilty about the time.
  4. I want to have the time to be able to help out any colleagues who could use my assistance AND I want to have the time to be able to seek help from my colleagues!
  5. I don’t want to take on anything that I have to give up on, or push to the sidelines for next year.

So, obviously, it all boils down to time, planning and allocation of priorities. With that in mind, I’ll wish you a happy Monday or good weekend. I’m going to have some dinner.


I am a potato – heading towards caramelisation. (Programming Language Threshold Concepts Part II)

Following up on yesterday’s discussion of some of the chapters in “Threshold Concepts Within the Disciplines”, I finished by talking about Flanagan and Smith’s thoughts on the linguistic issues in learning computer programming. This led me to the theory of markedness, a useful way to think about some of the syntactic structures that we see in computer programs. Let me introduce the concept of markedness with an example. Consider the pair of opposing concepts big/small. If you ask how ‘big’ something is, then you’re not actually assuming that the thing you’re asking about is ‘big’, you’re asking about its size. However, ask someone how ‘small’ something is and there’s a presumption that it’s actually small (most of the time). The same thing happens for old/young. Asking someone how old they are, bad jokes aside, is not implying that they are old – the word “old” here is standing in for the concept of age. This is an example of markedness in the relationship between lexical opposites: the assumed meaning (the default) is referred to as the unmarked form, where the marked form is more restrictive (in that it doesn’t subsume both concepts) and it is generally not the default. You see this in gender and plural forms too. In Lions/LionessesLions is an unmarked form because it’s the default and it doesn’t exclude the Lionesses, whereas Lionesses would not be the general form used (for whatever reasons, good or bad) and excludes the male lions.

Why is this important for programming languages? Because we often have syntactic elements (the structures and the tokens that we type) that take the form of opposing concepts where one is the default, and hence unmarked, form. Many modern languages employ object-oriented programming practices (itself a threshold concept) that allow programmers to specify how the data that they define inside their programs is going to be used, even within that program. These practices include the ability to set access controls, that strictly define how you can use your code, how other pieces of code that you write can use your code, and how other people’s code can use it, as well. The fundamental access control pairs are public and private, one of which says anyone can use this piece of code to calculate things or can change this value, the other restricts such use or change to the owner. In the Java programming language, public dominates, by far, and can be considered unmarked. Private, however, changes the way that you can work with your own code and it’s easy for students to get this wrong.  (To make it more confusing, there is another type of access control that sits effectively between public and private, which is an even more cognitively complex concept and is probably the least well understood of the lot!) One of the issues with any programming language is that deviating from the default requires you to understand what you are doing because you are having to type more, think more and understand more of the implications of your actions.

However, it gets harder, because we sometimes have marked/unmarked pairs where the unmarked element is completely invisible. If we didn’t have the need to describe how people could use our code then we wouldn’t need the access modifiers – the absence of public, private or protected wouldn’t signify anything. There are some implicit modes of operation in programming languages that can be overridden with keywords but the introduction of these keywords just doesn’t illustrate a positive/negative asymmetry (as with big/small or private/public), these illustrate an asymmetry between “something” and “nothing”. Now, the presence of a specific and marked keyword makes it glaringly obvious that there has been an invisible assumption sitting in that spot the whole time.

One of these troublesome word/nothing pairs is found in several languages and consists of the keyword static, with no matching keyword. What do you think the opposite (and pair) of static is? If you’re like most humans, you’d think dynamic. However, not only is this not what this keyword actually means but there is no dynamic keyword that balances it. Let’s look at this in Java:

public static void main(String [] args) {...}
public static int numberOfObjects(int theFirst) {...}
public int getValues() {...}

You’ll see that static keyword twice.Where static isn’t used, however, there’s nothing at all, and this (by its absence) also has a definite meaning and this defines what the default expectation is of behaviour in the Java programming language. From a teaching perspective, this means that we now have a default context, with a separation between those tokens and concepts that are marked and unmarked, and it becomes easier to see why students will struggle with instance methods and fields (which is what we call things without static) if we start with static, and struggle with the concept of static if we start the other way around! What further complicates is this is that every single program we write must contain at least one static method, because it is the starting point for the program’s execution. Even if you don’t want to talk about static yet, you must use it anyway (unless you want to provide the students with some skeleton code or a harness that removes this – but now we’ve put the wizard behind the curtain even more).

One other point I found very interesting in Flanagan and Smith’s chapter was the discussion of barriers and traps in programming languages, from Thimbleby’s critique of Java (1999). Barriers are the limitations on expressiveness that mean that what you want to say in a programming language can only be said in a certain way or in a certain place – which limits how we can explain the language and therefore affects learnability. As students tend to write their lines of code as and when they think of them, at least initially, these barriers will lead the students to make errors because they haven’t developed the locally valid computational idiom. I could ask for food in German as “please two pieces ham thick tasty” and, while I’ll get some looks, I’ll also get ham. Students hitting a barrier get confusing error messages that are given back to them at a time when they barely have enough framework to understand what these messages mean, let alone how to fix them. No ham for them!

THIS IS AN IMPORTANT QUESTION!

Traps are unknown and unexpected problems, such as those caused by not using the right way to compare two things in a program. In short, it is possible in many programming languages to ask “does this equal that” and return an answer of true or false that does not depend upon the values of this or that, but where they are being stored in memory. This is a trap. It is confusing for the novice to try to work out why the program is telling her that two containers that have the value “3” in them are not the same because they are duplicates rather than aliases for the same entity. These traps can seriously trip someone up as they attempt to form a correct mental model and, in the worst case, can lead to magical or cargo-cult thinking once again. (This is not helped by languages that, despite saying that they will take such-and-such an action, take actions that further undermine consistent mental models without being obvious about it. Sekrit Java String munging, I’m looking at you.)

This way of thinking about languages is of great interest to me because, instead of talking about usability in an abstract sense, we are now discussing concrete benefits and deficiencies in the language. Is it heavily restrictive on what goes where, such as Pascal’s pre-declaration of variables or Java’s package import restrictions? Does the language have a large number on unbalanced marked/unmarked pairs where one of them is invisible and possibly counterintuitive, such as static? Is it easy to turn a simple English statement into a programmatic equivalent that does not do what was expected?

The authors suggested ways to dealing with this, including teaching students about formal grammars for programming languages – effectively treating this as learning a new language because the grammar, syntax and semantics are very, very different from English.(Suggestions included Wittgenstein’s Sprachspiel, language game, which will be a post for another time.) Another approach is to start from logic and then work forwards, turning this into forms that will then match the programming languages and giving us a Rosetta stone between English speakers and program speakers.

I have found the whole book very interesting so far and, obviously, so too this chapter. Identifying the problems and their locations, regrettably, is only the starting point. Now I have to think about ways to overcome this, building on what these and other authors have already written.


Imagine that you are a raw potato…

Tuber or not tuber.

The words in the title of this post, surprisingly, are the first words in the Editors’ Preface to Land, Meyer and Smiths 2008 edited book “Threshold Concepts within the Disciplines”. Our group has been looking at the penetration of certain ideas through the discipline, examining how much the theory social constructivism accompanies the practice of group work for example, or, as in this case, seeing how many people identify threshold concepts in what they are trying to teach. Everyone who teaches first year Computer Science knows that some ideas seem to be sticking points and Meyer and Land’s two papers on “Threshold Concepts and Troublesome Knowledge” (2003 and 2005) provide a way of describing these sticking points by characterising why these particular aspects are hard – but also by identifying the benefits when someone actually gets it.

Threshold concept theory, in the words of Cousin, identifies the “the kind of complicated learner transitions learners undergo” and identifies portals that change the way that you think about a given discipline. This is deeply related to our goal of “Thinking as a discipline practitioner” because we must assume that a sound practitioner has passed through these portals and has transformed the way that they think in order to be able to practice correctly. Put simply, being a mathematician is more than plugging numbers into formulae.

As you can read, and I’ve mentioned in a previous post, threshold concepts are transformative, integrative, irreversible and (unfortunately) troublesome. Once you have passed through the hurdle then a new vista opens up before you but, my goodness, sometimes that’s a steep hurdle and, unsurprisingly, this is where many students fall.

The potato example in the preface describes the irreversible chemical process of cooking and how the way that we can use the potato changes at each stage. Potatoes, thankfully unaware, have no idea of what is going on nor can they oscillate on their pathway to transformation. Students, especially in the presence of the challenging, can and do oscillate on their transformational road. Anyone who teaches has seen this where we make great strides on one day and, the next, some of the progress ebbs away because a student has fallen back to a previous way of thinking. However, once we have really got the new concept to stick, then we can move forward on the basis of the new knowledge.

Threshold concepts can also be thought of as marking the boundary of areas within a discipline and, in this regard, have special interest to teachers and learners alike. Being able to subdivide knowledge into smaller sections to develop mastery that then allows further development makes the learning process easier to stage and scaffold. However, the looming and alien nature of the portal between sections introduces a range of problems that will apply to many of our students, so we have to ready to assist at these key points.

The book then provides a collection of chapters that discuss how these threshold concepts manifest inside different disciplines and in what forms the alien and troublesome nature can appear. It’s unsurprising again, for anyone teaching Computer Science or programming, that there are a large number of fundamental concepts in programming that are considered threshold concepts. These include the notion of program state, the collection of data that describes the information within a program. While state is an everyday concept (the light is on, the lift is on level 4), the concentration on state, the limitations and implications of manipulation and the new context raise this banal and everyday concepts into the threshold area. A large number of students can happily tell you which floor the lift is on, but cannot associate this physical state with the corresponding programmatic state in their own code.

Until students master some of these concepts, their questions will always appear facile, potentially ill-formed and (regrettably) may be interpreted as lazy. Flanagan and Smith raise an interesting point in that programming languages, which are written in pseudo-English with a precise but alien grammar, may be leading a linguistic problem, where the translation to a comprehensible form is one of the first threshold concepts that a student faces. As an example, consider this simple English set of instructions:

There are 10 apples in the basket.
Take each apple out of the basket, polish it, and place it in the sink.

Now let’s look at what the ‘take each apple’ instruction looks like in the C programming language.

for (int i  = 0; i < numberOfApples; i++) {
  // commands here
}

This is second nature to me to read but a number of you have just looked at that and gone ‘huh’? If you don’t learn what each piece does, understand its importance and can then actually produce it when asked then the risk is that you will just reproduce this template whenever I ask you to count apples. However, there are two situations that humans understand readily: “do something so many times” and “do something UNTIL something happens”. In programs we write these two cases differently – but it’s a linguistic distinction that, from Flanagan and Smith’s work “From Playing to Understanding”, correlates quite well with an ability to pick the more appropriate way of writing the program. If the language itself is the threshold, and for some students it certainly appears that it is, then we are not even able to assume that the students will reach the first stage of ‘local thresholds’ found within the subdomain itself, they are stuck on the outside reading a menu in a foreign language trying to work out if it says “this way to the toilet”.

Such linguistic thresholds will make students appear very, very slow and this is a problem. If you ask a student a question and the words make no sense in the way that you’re presenting them, then they will either not respond (if they have a choice) as they don’t know what you asked, they will answer a different question (by taking a stab at the meaning) or they will ask you what you mean. If someone asks you what you mean when, to you, the problem is very simple, we run the risk of throwing up a barrier between teacher and learner, the teacher assuming that the learner is stupid or lazy, the student assuming that the teacher either doesn’t know what they’re saying or doesn’t care about them.

I’ll write more on the implications of all of this tomorrow.


A Difficult Argument: Can We Accept “Academic Freedom” In Defence of Poor Teaching?

Let me frame this very carefully, because I realise that I am on very, very volatile ground with any discussion that raises the spectre of a right or a wrong way of teaching. The educational literature is equally careful about this and, very sensibly, you read about rates of transfer, load issues, qualitative aspects and quantitative outcomes, without any hard and fast statements such as “You must never lecture again!” or “You must use formative assessment or bees will consume your people!”

Not even your marching bands will be safe!

I am aware, however, that we are seeing a split between those people who accept that educational research has something to tell them, which may possibly override personal experience or industry requirement, and those who don’t. But, and let me tread very carefully indeed, while those of us who accept that the traditional lecture is not always the right approach realise that the odd lecture (or even entire course of lectures) won’t hurt our students, there is far more damaging and fundamental disagreement.

Does education transform in the majority of cases or are most students ‘set’ by the time that they come to us?

This is a key question because it affects how we deal with our students. If there are ‘good’ and ‘bad’ students, ‘smart’ and ‘dumb’ or ‘hardworking’ and ‘lazy’, and this is something that is an immutable characteristic, then a lot of what we are doing in order to engage students, to assist them in constructing knowledge and placing into them collaborative environments, is a waste of their time. They will either get it (if they’re smart and hardworking) or they won’t. Putting a brick next to a bee doesn’t double your honey-making capacity or your ability to build houses. Except, of course, that students are not bees or bricks. In fact, there appears to be a vast amount of evidence that says that such collaborative activities, if set up correctly in accordance with the established work in social constructivism and cognitive apprenticeship, will actually have the desired effect and you will see positive transformations in students who take part.

However, there are still many activities and teachers who continue to treat students as if they are always going to be bricks or bees. Why does this matter? Let me digress for a moment.

I don’t care if vampires, werewolves or zombies actually exist or not and, for the majority of my life, it is unlikely to make any difference to me. However, if someone else is convinced that she is a vampire and she attacks me and drain my blood, I am just as dead as if she were not a vampire – of course, I now will not rise from the dead but this is of little import to me. What matters is the impact upon me because of someone else’s practice of their beliefs.

If someone strongly believes that students are either ‘smart enough’ to take their courses or not, they don’t care who fails or how many, and that it is purely the role of the student to have or to spontaneously develop this characteristic then their impact will likely be high enough to have a negative impact on at least some students. We know about stereotype threat. We’re aware of inherent bias. In this case, we’re no longer talking about right or wrong teaching (thank goodness), we’re talking about a fundamentally self-fulfilling prophecy as a teaching philosophy. This will have as great an impact to those who fail or withdraw as the transformation pathway does to those who become better students and develop.

It is, I believe, almost never about the bright light of our most stellar successes. Perhaps we should always be held to answer (or at least explain) for the number and nature of those who fall away. I have been looking for statements of student rights across Australia and the Higher Education sites all seem to talk about ‘fair assessment’ and ‘right of appeal’, as well as all of the student responsibilities. The ACARA (Australian Curriculum and Reporting Authority) website talks a lot about opportunities and student needs in schools. What I haven’t yet found is something that I would like to see, along these lines:

“Educational is transformational. Students are entitled to be assessed on their own performance, in the context of their opportunities.”

Curve grading, which I’ve discussed before, immediately forces a false division of students into good and bad, merely by ‘better’ students existing. It is hard to think of something that is fundamentally less fair or appropriate to the task if we accept that our goal is improvement to a higher standard, regardless of where people start. In a curve graded system, the ‘best’ person can coast because all they have to do is stay one step ahead of their competition and natural alignment and inflation will do the rest. This is not the motivational framework that we wish to establish, especially when the lowest realise that all is lost.

I am a long distance runner and my performances will never set the world on fire. To come first in a race, I would have to be in a small race with very unfit people. But no-one can take away my actual times for my marathons and it is those times that have been used to allow me to enter other events. You’ll note that in the Olympics, too. Qualifying times are what are used because relative performance does not actually establish any set level of quality. The final race? Yes, we’ve established competitiveness and ranking becomes more important – but then again, entering the final heat of an Olympic race is an Olympian achievement. Let’s not quibble on this, because this is the equivalent of Nobel and Turing awards.

And here is the problem again. If I believe that education is transformative and set up all of my classes with collaborative work, intrinsic motivation and activities to develop self-regulation, then that’s great but what if it’s in third-year? If the ‘students were too dumb to get it’ people stand between me and my students for the first two years then I will have lost a great number of possibly good students by this stage – not to mention the fact that the ones who get through may need some serious de-programming.

Is it an acceptable excuse that another academic should be free to do what they want, if what they want to do is having an excluding and detrimental effect on students? Can we accept that if it means that we have to swallow that philosophy? If I do, does it make me complicit? I would like nothing more than to let people do what they want, hey, I like that as much as the next person, but in thinking about the effect of some decisions being made, is the notion of personal freedom in what is ultimately a public service role still a sufficiently good argument for not changing practice?


Heading to SIGCSE!

Snowed under – get it?

I’m pretty snowed under for the rest of the week and, while I dig myself out of a giant pile of papers on teaching first year programmers (apparently it’s harder than throwing Cay’s book at them and yelling “LEARN!”), I thought I’d talk about some of the things that are going on in our Computer Science Education Research Group. The first thing to mention is, of course, the group is still pretty new – it’s not quite “new car smell” territory but we are certainly still finding out exactly which direction we’re going to take and, while that’s exciting, it also makes for bitten fingernails at paper acceptance notification time.

We submitted a number of papers to SIGCSE and a special session on Contributing Student Pedagogy and collaboration, following up on our multi-year study on this and Computer Science Education paper. One of the papers and the special session have been accepted, which is fantastic news for the group. Two other papers weren’t accepted. While one was a slightly unfortunate near-miss (but very well done, lead author who shall remain nameless [LAWSRN]), the other was a crowd splitter. The feedback on both was excellent and it’s given me a lot to think about, as I was lead on the paper that really didn’t meet the bar. As always, it’s a juggling act to work out what to put into a paper in order to support the argument to someone outside the group and, in hindsight quite rightly, the reviewers thought that I’d missed the mark and needed to try a different tack. However, with one exception, the reviewers thought that there was something there worth pursuing and that is, really, such an important piece of knowledge that it justifies the price of admission.

Yes, I’d have preferred to have got it right first time but the argument is crucial here and I know that I’m proposing something that is a little unorthodox. The messenger has to be able to deliver the message. Marathons are not about messengers who run three steps and drop dead before they did anything useful!

The acceptances are great news for the group and will help to shape what we do for the next 12-18 months. We also now have some papers that, with some improvement, can be sent to another appropriate conference. I always tell my students that academic writing is almost never wasted because if it’s not used here, or published there, the least that you can learn is not to write like that or not about that topic. Usually, however, rewriting and reevaluation makes work stronger and more likely to find a place where you can share it with the world.

We’re already planning follow-up studies in November on some of the work that will be published at SIGCSE and the nature of our investigations are to try and turn our findings into practically applicable steps that any teacher can take to improve participation and knowledge transfer. These are just some of the useful ideas that we hope to have ready for March but we’ll see how much we get done. As always. We’re coming up to the busy end of semester with final marking, exams and all of that, as well as the descent into admin madness as we lose the excuse of “hey, I’d love to do that but I’m teaching.” I have to make sure that I wrestle enough research time into my calendar to pursue some of the exciting work that we have planned.

I look forward to seeing some of you in Colorado in March to talk about how it went!

Things to do in Denver when you’re Ed?


Recursive Tutorial: A tutorial on writing a tutorial

I assigned the Grand Challenge students a slightly strange problem for yesterday’s tutorial: “How would you write an R tutorial for Year 11 High School Students?” R is an open source statistics package that is incredibly powerful and versatile but it is nowhere near as friendly to use or accessible as traditional GUI tools such as Microsoft Excel. R has some menus and buttons on it but most of these are used to control the environment, rather than applying the statistical and mathematical functions. R Studio is an associated Integrated Development Environment (IDE) that makes working with R easier but, at its core, R relies upon you knowing enough R to type the right commands.

Discussing this with students, we compared Excel and R to find out what the core differences were and some of them are not important early on but become more important later. Excel, for example, allows you to quickly paste and move around data, apply some functions, draw some graphs and come to a result quickly, mostly by pushing buttons and using on-line help with a little typing. But, and it’s an important but, unless you write a program in Excel (and not that many people do), re-applying all of that manipulation to a new data source requires you to click and push and move across the screen all over again. You have to recreate a long and complicated combination of mechanical and cognitive functions. R, by contrast, requires you to type commands to get things to happen but it remembers them by default and you can easily extract them. Because of how R works, you drag in data (from a file, say) and then execute a set of manipulation steps. If you’re familiar with R then this is straight-forward. If not, then steep learning curve. However, re-using these instructions and manipulations on a new data source is trivial. You change the file and re-run all of the steps.

Why am I talking about new data sources? Because it’s often the case that you want to do the same thing with new data OR you realise that the data you were working with was incomplete or in error. Unless you write a lot of Visual Basic in Excel (and that no longer works on Macs so it’s not a transferable option), your Excel spreadsheet with changed data requires you to potentially reapply or check the application of everything in the spreadsheet, especially if there is any sorting of data, creation of new columns or summary data – and let’s not even start talking about pivot tables! But, for single run, for finance, for counting stuff, Excel is almost always going to be more easy to teach people to use than R. For scientists, however, R is better to use for two very important reasons: it is less likely to do something that is irreversible to your data and the vast majority of its default choices are sensible.

The students came up with a list of things that Excel does (good and bad): it’s strongly visual, lay-user friendly, tells you what you can do, does what it damn well wants to, data changes may require manual reapplication. There’s a corresponding list for R: steep learning curve, visual display for R environment but command-line interface for commands, does what you tell it to do (except when it’s too smart). I surveyed the class to find out who was using R rather than Excel and the majority of students were using R for their analysis but, and again it’s an important but, only because they had to. In situations where Excel was enough (simple manipulation, straight forward analysis), then Excel got used because Excel is far easier to use and far friendlier.

The big question for the students was “How do I start doing something?” In Excel, you type numbers into the spreadsheet and then can just start selecting things using a relatively good on-line help system. In R you are faced with a blinking prompt and you have to know enough to type streams of commands like this:

newtab <-read.csv("~/days.txt",header=FALSE)
plot(seq(1,nrow(newtab)),newtab$V1) 
boxplot(newtab) 
abline(a=1500,b=0) 
mean(newtab)

And, with a whole set of other commands, you can get graphs like this. (I realise that this is not a box plot!)

Once you’re used to it, this is meaningful, powerful and re-applicable. I can update the data and re-run this to my heart’s content, analysing vast quantities of data without having to keep mouse clicking into cells. But let’s remember our context. I’m not talking about higher education students, I’m talking about school students and it’s important to remember that teaching people something before they’re ready to use it or before they have an opportunity to use it is potentially not the best use of effort.

My students pointed out that the school students of today are all learning how to use graphing calculators, with giant user manuals, and (in some cases) the students switch on their calculators to see a menu rather than the traditional calculator single line. But the syntax and input modes for calculators vary widely. Some use ( ) for operations like sin, so a student will see sin(30) when they start doing trig, whereas some don’t. This means that some of the students I might want to teach R to have not necessarily got their head around the fact that functions exist, except as something that Excel requires them to do. Let’s go to the why here, because it’s important. Why are students learning how to use these graphing calculators? So they can pass their exams, where the competent and efficient use of these things will help them. Yes, it appears that students may be carrying out the kind of operations I would like them to put into a more powerful tool, but why should they?

If a teach a high school student about Excel then there are many places that they might use this kind of software: micro-budgeting, keeping track of things, the ‘simple’ approximation of a database storing books or things like that. However, the general practice of using Excel is familiarisation with a GUI interface that is very, very common and that most students need experience with. If I teach them R then I might be extending their knowledge but (a) the majority are probably not yet ready for it and (b) they are highly unlikely to need to use it for anything in the near future.

The conclusion that my students reached was that, if we really wanted to provide exposure to an industry-like scientific or engineering tool at the earlier stage, then why not use one that was friendlier, more helpful but still had a more scientific focus. They suggested Matlab (as a number of them had been exposed) or Mathematica. Now this whole exercise was designed to get them to practice their thinking about outreach, community, communication and sharing knowledge, so I wasn’t ever actually planning to run an R tutorial at Year 11. But these students thought through and asked the very important questions:

  • Who is this aimed at?
  • What do they already know?
  • What do they need to know?
  • Why are we doing this?

Of course, I have also learned a great deal from this as well – I had no idea that the calculators had quite got to this point, nor that there were schools were students would have to select through a graphical menu to get to the simple “3+3 EXE” section of the calculator! Don’t tell my Grand Challenge students but I think I’m learning roughly as much as they are!


Students and Programming: A stroll through the archives in the contemplation of self-regulation.

I’ve been digging back into the foundations of Computer Science Education to develop some more breadth in the area and trying to fill in some of the reading holes that have developed as I’ve chased certain ideas forward. I’ve been looking at Maye’s “Psychology of How Novices Learn Computer Programming” from 1981, following it forward to a number of papers including McCracken (Chair) et al’s “A multi-national, multi-institutional study of assessment of programming skills of first-year CS students”. Among the many interesting items presented in this paper was a measure of Degree of Closeness (DoC): a quantification of how close the student had come to providing a correct solution, assessed on their source code. The DoC is rated on a five-point scale, with 1 being the furthest from a correct solution. These “DoC 1” students are of a great deal of interest to me because they include those students who submitted nothing – possible evidence of disengagement or just the student being overwhelmed. In fact the DoC 1 students were classified into three types:

  • Type 1: The student handed up an empty file.
  • Type 2: The student’s work showed no evidence of a plan.
  • Type 3: The student appeared to have a plan but didn’t carry it out.

Why did the students do something without a plan? The authors hypothesise that the student may have been following a heuristic approach, doing what they could, until they could go no further. Type 3 was further subdivided into 3a (the student had a good plan or structure) and 3b (the student had a poor plan or structure). All of these, however, have one thing in common and that is that they can indicate a lack of resource organisation, which may be identified as a shortfall in metacognition. On reflection, however, many of these students blamed external factors for their problems. The Type 1 students blamed the time that they had to undertake the task, the lab machines, their lack of familiarity with the language. The DoC 5 students (from the same school) described their difficulties in terms of the process of creating a solution. Other comments from DoC 1 and 2 students included information such as insufficient time, students “not being good” at whatever this question was asking and, in one case, “Too cold environment, problem was too hard.” The most frequent complaint among the low performing students was that they had not had enough time, the presumption being that, had enough time been available, a solution was possible. Combine this with the students who handed up nothing or had no plan and we must start to question this assertion. (It is worth noting that some low-performing students had taken this test as their first ever solo lab-based examination so we cannot just dismiss all of these comments!)

The paper discusses a lot more and is rather critical of its own procedure (perhaps the time pressure was too high, the specifications a little cluttered, highly procedural rather than OO) and I would not argue with the authors on any of this but, from my perspective, I am zooming in on the issue of time because, if you’ve read any of my stuff before, you’ll know that I am working in self-regulation and time management. I look at the Types of DoC 1 students and I can see exactly what I saw in my own student timeliness data and reflection reports: a lack of ability to organise resources. This is now, apparently, combined with a persistent belief that fixing this was beyond the student’s control. It’s unsurprising that handing up nothing suddenly became a valid option.

The null submission could be a clear indicator of organisational ability, where the student can’t muster any kind of solution to the problem at all. Not one line of code or approximate solution. What is puzzling about this is that the activity was, in fact, heavily scheduled. Students sat in a lab and undertook it. There was no other task for them to perform except to do this code in either 1 or 1.5 hours. To not do anything at all may be a reaction to time pressure (as the authors raised) or it could be complete ignorance of how to solve the problem. There’s too much uncertainty here for me to say much more about this.

The “no plan” solution can likely be explained by the heuristic focus and I’ve certainly seen evidence of it. One of the most unforgiving aspects of the heuristic solution is that, without a design, it is easy to end up in a place where you are running out of time and have no idea of where to go to solve unforeseen problems that have arisen. These students are the ones who I would expect to start the last day that something is due and throw together a solution, working later and panicking more as they realised that their code wasn’t working. Having done a bit here and a piece there, they may cobble something together and hand it up but it is unlikely to work and is never robust.

The “I planned it but I couldn’t do it” group fall heavily into the problem space of self-regulation, because they had managed to organise their resources – so why didn’t anything come out? Did they procrastinate? Was their meta-planning process deficient, in that they spent most of their time perfecting a plan and not leaving enough time to make it happen? I have a number of students who have a tendency to go down the rabbit hole when chasing design issues and I sometimes have to reach down, grab them by the ears and haul them out. The reality of time constraints is that you have to work out what you can do and then do as much as you can with that time.

This is fascinating because I’m really trying to work out at which point students will give up and DoC 1 basically amounts to an “I didn’t manage it” mark in my local system. I have data that shows the marks students get from automated marking (immediate assessment) so I can look to see how long people will try to get above what (effectively) would be above DoC 1, and probably up around DoC 3. (The paper defines DoC 3 as “In reading the source code, the outline of a viable solution was apparent, including meaningful comments, stub code, or a good start on the code.” This would be enough to meet our assessment requirements although the mark wouldn’t be great.) DoC 1 would, I suspect, amount to “no submission” in many cases so my DoC 1 students are those who stayed enrolled (and sat the exam) but never created a repository or submission. (There are so many degrees of disengagement!)

I, of course, now have to move further forward along this paper line and I will hopefully intersect with my ‘contemporary’ reading into student programming activity. I will be reading pretty solidly on all of this for the upcoming months as we try to refine the time management and self-regulation strategies that we’ll be employing next year.