The Antagonistic Classroom Is A Dinosaur

It’s been a while since I’ve posted but, in that time, I’ve been doing a lot of reading and a lot of thinking. I’m aware that as a CS Ed person whose background is in CS rather than Ed is that I have a lot of catching up to do in terms of underlying theory and philosophy. I’ve been going further back to look at the changes in education, from the assumption that a student is a blank slate (tabula rasa) to be written on (or an empty bank account to be filled) rather than as a person to be worked with. As part of my search I’ve been reading a lot and what has become apparent is how long people have been trying to change education in order to improve the degree and depth of learning and student engagement. It’s actually mildly depressing to track the last 250 years of people trying to do anything other than rote learning, serried ranks of silent students and cultural crystallisation. As part of this reading, and via Rousseau and Hegel, I’ve wandered across the early works of Karl Marx who, before the proletariat began its ongoing efforts to not act as he had modelled them, was thinking about the role of work and life. In essence, if what you are doing is not really a part of your life then you are working at something alien in order to earn enough to live – in order to work again another day. I’m not a Marxist, by any stretch of the imagination and for a variety of reasons, but this applies well for the way that many people see study as well. For many people, education is an end in itself, something to be endured in order to move on to the next stage, which is working in order to live until you stop working and then you die.

When you look at the methods that, from evidence and extensive research, now appear to be successful in developing student learning, we see something very different from what we have done before: we see cooperation, mutual respect, self-determination and a desire to learn that is facilitated by being part of the educational system. In this system, the school is not a cage for students and a trap for the spirit of education. However, this requires a distinct change in the traditional roles between student and teacher, and it’s one that some teachers still aren’t ready for and many students haven’t been prepared for. The future is creative and it’s now time to change our educational system to fully support that.

Ultimately, many of the ways that we educate place the teacher in a role of judgement and opposition to the student: students compete in order to secure the best marks, which may require them to withhold information from each other, and they must convince the teacher of their worth in order to achieve the best results. In order to maintain the mark separation, we have to provide artificial mechanisms to ensure that we can create an arbitrary separation, above the concept of competency, by having limited attempts on assignments and late penalties. This places the teacher in opposition to the student, an adversary who must be bested. Is this really what we want in what should be a mutually enriching relationship? When we get it right, the more we learn, the more we can teach and hence the more everyone learns.

If we search for the opposite of an antagonist, we find the following words: ally, helper, supporter and friend. These are great words but they evoke roles that we can’t actually fill unless we step out from behind the lectern and the desk and work with our students. An ally doesn’t force students to compete against each other for empty honours that only a few can achieve. A helper doesn’t tell students that the world works as if every single piece of assignment work is the most important thing ever assigned. A supporter develops deep structures that will hold up the person and their world for their whole life. A friend has compassion for the frailties of the humans around them – although they still have to be honest as part of that friendship.

My students and I win together when they achieve things. I don’t need to be smarter than them in order to prove anything and I don’t need them to beat me before they can demonstrate that they’re ready to go out into the world. If I held a pebble out in my hand and asked the student how they could get it, I would hope that they would first ask me if they could have it, rather than attempting some bizarre demonstration of hand-eye coordination. Why compete when we could all excel together?

We stand in exciting times, where knowledge can be shared widely and semi-instantly, but we won’t see the best of what we can do with this until we see an antagonistic classroom for the dinosaur that it is and move on.


Education and Paying Back (#AdelEd #CSER #DigitalTechnologies #acara #SAEdu)

On Monday, the Computer Science Education Research Group and Google (oh, like you need a link) will release their open on-line course to support F-6 Primary school teachers in teaching the new Digital Technologies curriculum. We are still taking registrations so please go the course website if you want to sign up – or just have a look! (I’ve blogged about this recently as part of Science meets Parliament but you can catch it again here.) The course is open, on-line and free, released under Creative Commons so that the only thing people can’t do is to try and charge for it. We’re very excited and it’s so close to happening, I can taste it!

Here’s that link again – please, sign up!

I’m posting today for a few reasons. If you are a primary school teacher who wants help teaching digital technologies, we’d love to see you sign up and join our community of hundreds of other people who are thinking the same thing. If you know a primary school teacher, or are a principal for a primary school, and think that this would interest people – please pass it on! We are most definitely not trying to teach teachers how to teach (apart from anything else, what presumption!) but we’re hoping that what we provide will make it easier for teachers to feel comfortable, confident and happy with the new DT curriculum requirements which will lead to better experiences all ’round.

My other reason is one that came to me as I was recording my introduction section for the on-line course. In that brief “Oh, what a surprise there’s a camera” segment, I note that I consider the role of my teachers to have been essential in getting me to where I am today. This is what I’d like to do today: explicitly name and thank a few of my teachers and hope that some of what we release on Monday goes towards paying back into the general educational community.

You know who this is for.

You know who this is for.

My first thanks go to Mrs Shand from my Infant School in England. I was an early reader and, in an open plan classroom, she managed to keep me up with the other material while dealing with the fact that I was a voracious reader who would disappear to read at the drop of a hat. She helped to amplify my passion for reading, instead of trying to control it. Thank you!

In Australia, I ran into three people who were crucial to my development. Adam West was interested in everything so Grade 5 was full of computers (my first computing experience) because he arranged to borrow one and put it into the classroom in 1978, German (I can still speak the German I learnt in that class) and he also allowed us to write with nib and ink pens if we wanted – which was the sneakiest way to get someone’s handwriting and tidiness to improve that I have ever seen. Thank you, Adam!  Mrs Lothian, the school librarian, also supported my reading habit and, after a while, all of the interesting books in the library often came through me very early on because I always returned them quickly and in good condition but this is where I was exposed to a whole world of interesting works: Nicholas Fisk, Ursula Le Guin and Susan Cooper not being the least of these. Thank you! Gloria Patullo (I hope I’ve spelt that correctly) was my Grade 7 teacher and she quickly worked out that I was a sneaky bugger on occasion and, without ever getting angry or raising a hand, managed to get me to realise that being clever didn’t mean that you could get away with everything and that being considerate and honest were the most important elements to alloy with smart. Thank you! (I was a pain for many years, dear reader, so this was a long process with much intervention.)

Moving to secondary school, I had a series of good teachers, all of whom tried to take the raw stuff of me and turn it into something that was happier, more useful and able to take that undirected energy in a more positive direction. I have to mention Ken Watson,  Glenn Mulvihill, Mrs Batten, Dr Murray Thompson, Peter Thomas, Dr Riceman, Dr Bob Holloway, Milton Haseloff (I still have fossa, -ae, [f], ditch, burned into my brain) and, of course, Geoffrey Bean, headmaster, strong advocate of the thinking approaches of Edward de Bono and firm believer in the importance of the strength one needs to defend those who are less strong. Thank you all for what you have done, because it’s far too much to list here without killing the reader: the support, the encouragement, the guidance, the freedom to try things while still keeping a close eye, the exposure to thinking and, on occasion, the simple act of sitting me down to get me to think about what the heck I was doing and where I was going. The fact that I now work with some of them, in their continuing work in secondary education, is a wonderful thing and a reminder that I cannot have been that terrible. (Let’s just assume that, shall we? Moving on – rapidly…)

Of course, it’s not just the primary and secondary school teachers who helped me but they are the ones I want to concentrate on today, because I believe that the freedom and opportunities we offer at University are wonderful but I realise that they are not yet available to everyone and it is only by valuing, supporting and developing primary and secondary school education and the teachers who work so hard to provide it that we can go further in the University sector. We are lucky enough to be a juncture where dedicated work towards the national curriculum (and ACARA must be mentioned for all the hard work that they have done) has married up with an Industry partner who wants us all to “get” computing (Thank you, Google, and thank you so much, Sally and Alan) at a time when our research group was able to be involved. I’m a small part of a very big group of people who care about what happens in our schools and, if you have children of that age, you’ve picked a great time to send them to school. 🙂

I am delighted to have even a small opportunity to offer something back into a community which has given me so much. I hope that what we have done is useful and I can’t wait for it to start.


Dr Falkner Goes to Canberra Day 2, “Q and A”, (#smp2014 #AdelEd @foreignoffice)

The last formal event was a question and answer session with Professor Robin Grimes, the Chief Scientific Advisor for the UK Foreign and Commonwealth Office (@foreignoffice). I’ll recover from Question Time and talk about it later. The talk appears to have a secondary title of “The Role of the CSA Network, CSAs in SAGE, the CSA in the FCO & SIN”. Professor Grimes started by talking about the longstanding research collaboration between the UK and AUS. Apparently, it’s a unique relationship (in the positive sense), according to William Hague. Once again, we come back to explaining things to non-scientists or other scientists.

There are apparently a number of Chief Scientists who belong to the CSA Network, SAGE – Scientific Advisory Group for Emergencies – and the Science and Innovation Network (SIN). (It’s all a bit Quartermass really.) And here’s a picture that the speaker refers to as a rogue’s gallery. We then saw a patchwork quilt that shows how the UK Government Science Advisory Structure, which basically says that they work through permanent secretaries and ministers and other offices – imagine a patchwork quilt representation of the wars in the Netherlands as interpreted by Mondrian in pastoral shades and you have this diagram. There is also another complex diagram that shows that laboratories are many and advisors scale.

Did you know that there is a UK National Risk Register? Well, there is, and there’s a diagram with blue blobs and type I can’t see from the back of the room to talk about it. (Someone did ask why they couldn’t read it and the speaker joked that it was restricted. More seriously, things are rated on their relative likelihood and relative impact.

The UK CSAs and FCO CS are all about communication, mostly by acronym apparently. (I kid.) Also, Stanley Baldwin’s wife could rock a hat. More seriously, fracking is an example of poor communication. Scientific concerns (methane release, seismic events and loss of aquifer integrity) are not meeting the community concerns of general opposition to oil and gas and the NIMBY approach. The speaker also mentioned the L’Aquila incident, where scientists were convicted of a crime for making an incorrect estimation of the likelihood of a seismic event. What does this mean for scientific advice generally? (Hint: don’t give scientific advice in Italy.) Scientists should feel free to express their view and understanding conceding risks, their mitigation and management, freely to the government. If actions discourage scientists from coming forward, then it;s highly undesirable. (UK is common law so the first legal case will be really, really interesting in this regard.)

What is the role of the CSA in emergencies? This is where SAGE comes in. They are “responsible for coordinating and peer reviewing, as far as possible, scientific and technical advice to inform decision-making”. This is chaired by the GCSA, who report to COBRA (seriously! It’s the Cabinet Office Briefing Room A) and includes CSAs, sector experts and independent scientists. So swine flu, volcanic ash cloud, Fukushima and the Ash die-back – put up the SAGE signal!

What’s happened with SAGE intervention? Better relationships with science diplomacy. Also, when the media goes well, there is a lot of good news to be had.

The Foreign Office gets science-based advice which relate to security, prosperity and consular – the three priorities of the Foreign Office. It seems that everyone has more science than us. There are networks for Science Networks, Science Evidence and Scientific Leadership, but the Foreign Office is a science-using rather than a science-producing department. There is no dedicated local R&D, scientists and engineer cadre or a departmental science advisory committee.

The Science and Innovation Network (SIN) has two parent departments, Foreign Office (FCO) and Department for Business, Innovation and Skills (BIS, hoho). And we saw a slide with a lot of acronyms. This is the equivalent of the parents being Department of Industry and DFAT for our system. 90 people over 28 countries and territories, across 46 cities. There’s even one here (where here is Melbourne and Canberra). (So we support UK scientists coming out to do cool science here. Which is good. If only we had a Minister for Science, eh?) Apparently they produce newsletters and all sorts of tasty things.

They even talk to the EU (relatively often) and travels to the EU quite frequently in an attempt to make the relationships work through the EU and bi-laterally. There aren’t as many Science and Innovation officers in the EU as they can deal directly with the EU. There are also apparently a lot of student opportunities (sound of ears pricking up) but it’s for UK students coming to us. There are also opportunities for UK-origin scientists to either work back in the UK or for them to bring out UK academics that they know. (Paging Martin White!)

There is a Newton Fund (being developed at the moment), a science-based aid program for countries that are eligible for official development assistance (ODA) and this could be a bi-lateral UK-AUS collaboration.

Well, that’s it for the formal program. There’s going to be some wrap-up and then drinks with Adam Bandt, Deputy Leader of the Australian Greens, Hope you’ve enjoyed this!


Dr Falkner Goes to Canberra Day 2, Updates (#smp2014 #AdelEd)

As noted on Twitter, I couldn’t live blog the dinner as hauling a laptop to dinner is a gauche and I cannot keep up with the speeches on a tablet. (Note to Apple and Microsoft: if you need a beta tester to give your next keyless keyboard a workout, I will volunteer.) The dinner was good, with a lot of interesting speakers, and the official National Treasure, Robin Williams, being  a very … diplomatic MC. Points on the night for audience capture and enthusiasm has to go the Honourable Bill Shorten, MP, Leader of the Opposition, who seemed very keen indeed.

The dinner was held in the Great Hall of Parliament House and we got a brief foreshadowing of the scrutiny we’d have to go through today, before entering. The Parliament Building itself is pretty impressive, but you’d certainly hope so!

This morning, the keen among us arrived before 7am to go through security and head up to a breakfast, where the guest speaker was Professor Aidan Byrne, CEO of the Australian Research Council, who had a great deal of interest to say (most of which I capture on the twitter feed – @nickfalkner) but who also reinforced the message that we have to be very careful in how we express our complex ideas to summarise them without trivialising them. Again. if you want ARC funds, communicate for ideas in a way that the audience can understand. Many of the issues of concern (increasing ECR funding, increasing overall funding, support for fundamental science) were asked about in question time but the biggest problem is finding the money, getting the rules approved by two other government departments (Finance and PM’s Office) and then getting it signed off by the Minister. That’s about a 5 month process for simple rule changes, which explains why the rules are often not that early in coming out. Also, this CEO has served under 6 Ministers in 2 years, which gives you some idea of the inherent stability of political office. When funding has been increased in the past, such as to the NHMRC, demand has outstripped the increased supply, leading to an overall reduction in success rate – although there must be an upper bound to this resourcing, I can only surmise.  Professor Byrne noted that the ARC is a very, very lean organisation and that this meant that things like software system updates took longer than you’d expect. For example, that irritating question on Discover Projects (Do you have any other ARC grants) actually can’t be answered automatically because the existing systems won’t do it. This is being worked on but, without extra staff and funds, it will be years before it’s all bedded in.

If I’ve learnt nothing else on this trip, it’s that simple changes are more complex than they appear, and complex changes are Byzantine to the ‘fractured empire’ level, once you get policy makers involved. It is, I must confess, more fascinating than I thought it would be.

One of the most surreal moments after breakfast was stepping out of the lift and nearly walking into the Prime Minister of Australia, who was deep in conversation with a Minister. There is a lot of security in this building and we got scanned coming in but, still, there were no large men with no necks talking into their cuffs and saying things like “Parakeet has left the building.” We’re still in Australia. Hooray!

We’re currently sitting in a large briefing room, waiting for Senator Kim Carr to come and speak to us at 10:30. It’s a little cramped but there are regular coffee runs and there are a lot of fascinating people to talk to. (Although, having tried the coffee, I can now understand some of the policy directions coming out from here.)


SIGSCE Day 2, “Focus on K-12: Informal Education, Curriculum and Robots”, Paper 1, 3:45-5:00, (#SIGCSE2014)

The first paper is “They can’t find us: The Search for Informal CS Education” by Betsy DiSalvo, Cecili Reid, Parisa Khanipour Roshan, all from Georgia Tech. (Mark wrote this paper up recently.) There are lots of resources around, MOOCs, on-line systems tools, Khan academy and Code Academy and, of course the aggregators. If all of this is here, why aren’t we getting the equalisation effects we expect?

Well, the wealth and the resource-aware actually know how to search and access these, and are more aware of them, so the inequality persists. The Marketing strategies are also pointed at this group, rather than targeting those needing educational equity. The cultural values of the audiences vary. (People think Scratch is a toy, rather than a useful and pragmatic real-world tool.) There’s also access – access to technical resource, social support for doing this and knowledge of the search terms. We can address this issues by research mechanisms to address the ignored community.

Children’s access to informal learning is through their parents so how their parents search make a big difference. How do they search? The authors set up a booth to ask 16 parents in the group how they would do it. 3 were disqualified for literacy or disability reasons (which is another issue). Only one person found a site that was relevant to CS education. Building from that, what are the search terms that they are using for computer learning and why aren’t hey coming up with good results. The terms that parents use supported this but the authors also used Google insights to see what other people were using. The most popular terms for the topic, the environment and the audience. Note: if you search for kids in computer learning you get fewer results than if you search for children in computer learning. The three terms that came up as being best were:

  • kids computer camp
  • kids computer classes
  • kids computer learning

The authors reviewed across some cities to see if there was variation by location for these search terse. What was the quality of these? 191 out of 840 search results were unique and relevant, with an average of 4.5 per search.

(As a note, MAN, does Betsy talk and present quickly. Completely comprehensible and great but really hard to transcribe!)

Results included : Camp, after school program, camp/afterschool, higher education, online activities, online classes/learning, directory results (often worse than Google), news, videos or social networks (again the quality was lower). Computer camps dominated what you could find on these search results – but these are not an option for low-income parents at $500/week so that’s not a really useful resource for them. Some came up for after school and higher ed in the large and midsize cities, but very little in the smaller cities. Unsurprisingly, smaller cities and lower socio-economic groups are not going to be able to find what they need to find, hence the inequality continues. There are many fine tools but NONE of them showed up on the 800+ results.

Without a background in CS or IT, you don’t know that these things exist and hence you can’t find it for your kids. Thus, these open educational resources are less accessible to these people, because they are only accessible through a mechanism that needs extra knowledge. (As a note, the authors only looked at the first two pages because “no-one looks past that”. 🙂 ) Other searches for things like kids maths learning, kids animal learning or kids physics learning turned up 48 out of 80 results (average of 16 unique results per search term), where 31 results were online, 101 had classes at uni – a big difference.

(These studies were carried out before code.org. Running the search again for kids computer learning does turn up code.org. Hooray, there is progress! If the study was run again, how much better would it be?)

We need to take a top down approach to provide standards for keywords and search terms, partnering with formal education and community programs. The MOOCs should talk to the Educational programming community, both could talk to the tutorial community and then we can throw in the Aggregators as well. Distant islands that don’t talk are just making this problem worse.

The bottom-up approach is getting an understanding of LSEO parenting, building communities and finding out how people search and making sure that we can handle it. Wow! Great talk but I think my head is going to explode!

During question time, someone asked why people aren’t more creative with their searches. This is, sadly, missing the point that, sitting in this community, we are empowered and skilled in searching. The whole point is that people outside of our community aren’t guaranteed to be able to find a way too be creative. I guess the first step is the same as for good teaching, putting ourselves in the heads of someone who is a true novice and helping to bring them to a more educated state.

 

 


Matt Damon: Computer Science Superstar?

There was a recent article in Salon regarding the possible use of celebrity presenters, professional actors and the more photogenic to present course material in on-line courses. While Coursera believes that, in the words of Daphne Koller, “education is not a performance”, Udacity, as voiced by Sebastian Thrun, believes that we can model on-line education more in the style of a newscast. In the Udacity model, there is a knowledgeable team and the content producer (primary instructor) is not necessarily going to be the presenter. Daphne Koller’s belief is that the connection between student and teacher would diminish if actors were reading scripts that had content they didn’t deeply understand.

My take on this is fairly simple. I never want to give students the idea that the appearance of knowledge is an achievement in the same league as actually developing and being able to apply that knowledge. I regularly give talks about some of the learning and teaching techniques we use and  I have to be very careful to explain that everything good we do is based on solid learning design and knowledge of the subject, which can be enhanced by good graphic design and presentation but cannot be replaced by these. While I have no doubt that Matt Damon could become a good lecturer in Computer Science, should he wish to, having him stand around and pretend to be one sends the wrong message.

Matt Damon demonstrating an extrinsic motivational technique called "fear of noisy death".

Matt Damon demonstrating an extrinsic motivational technique called “fear of noisy death”.

(And, from the collaborative perspective, if we start to value pleasant appearance over knowledge, do we start to sort our students into groups by appearance and voice timbre? This is probably not the path we want to go down. For now, anyway.)

 


Another semester, more lessons learned (mostly by me).

I’ve just finished the lecturing component for my first year course on programming, algorithms and data structures. As always, the learning has been mutual. I’ve got some longer posts to write on this at some time in the future but the biggest change for this year was dropping the written examination component down and bringing in supervised practical examinations in programming and code reading. This has given us some interesting results that we look forward to going through, once all of the exams are done and the marks are locked down sometime in late July.

Whenever I put in practical examinations, we encounter the strange phenomenon of students who can mysteriously write code in very short periods of time in a practical situation very similar to the practical examination, but suddenly lose the ability to write good code when they are isolated from the Internet, e-Mail and other people’s code repositories. This is, thank goodness, not a large group (seriously, it’s shrinking the more I put prac exams in) but it does illustrate why we do it. If someone has a genuine problem with exam pressure, and it does occur, then of course we set things up so that they have more time and a different environment, as we support all of our students with special circumstances. But to be fair to everyone, and because this can be confronting, we pitch the problems at a level where early achievement is possible and they are also usually simpler versions of the types of programs that have already been set as assignment work. I’m not trying to trip people up, here, I’m trying to develop the understanding that it’s not the marks for their programming assignments that are important, it’s the development of the skills.

I need those people who have not done their own work to realise that it probably didn’t lead to a good level of understanding or the ability to apply the skill as you would in the workforce. However, I need to do so in a way that isn’t unfair, so there’s a lot of careful learning design that goes in, even to the selection of how much each component is worth. The reminder that you should be doing your own work is not high stakes – 5-10% of the final mark at most – and builds up to a larger practical examination component, worth 30%, that comes after a total of nine practical programming assignments and a previous prac exam. This year, I’m happy with the marks design because it takes fairly consistent failure to drop a student to the point where they are no longer eligible for redemption through additional work. The scope for achievement is across knowledge of course materials (on-line quizzes, in-class scratchy card quizzes and the written exam), programming with reference materials (programming assignments over 12 weeks), programming under more restricted conditions (the prac exams) and even group formation and open problem handling (with a team-based report on the use of queues in the real world). To pass, a student needs to do enough in all of these. To excel, they have to have a good broad grasp of theoretical and practical. This is what I’ve been heading towards for this first-year course, a course that I am confident turns out students who are programmers and have enough knowledge of core computer science. Yes, students can (and will) fail – but only if they really don’t do enough in more than one of the target areas and then don’t focus on that to improve their results. I will fail anyone who doesn’t meet the standard but I have no wish to do any more of that than I need to. If people can come up to standard in the time and resource constraints we have, then they should pass. The trick is holding the standard at the right level while you bring up the people – and that takes a lot of help from my colleagues, my mentors and from me constantly learning from my students and being open to changing the learning design until we get it right.

Of course, there is always room for improvement, which means that the course goes back up on blocks while I analyse it. Again. Is this the best way to teach this course? Well, of course, what we will do now is to look at results across the course. We’ll track Prac Exam performance across all practicals, across the two different types of quizzes, across the reports and across the final written exam. We’ll go back into detail on the written answers to the code reading question to see if there’s a match for articulation and comprehension. We’ll assess the quality of response to the exam, as well as the final marked outcome, to tie this back to developmental level, if possible. We’ll look at previous results, entry points, pre-University marks…

And then we’ll teach it again!


“Hi, my name is Nick and I specialise in failure.”

I recently read an article on survivorship bias in the “You Are Not So Smart” website, via Metafilter. While the whole story addressed the World War II Statistical Research Group, it focused on the insight contributed by Abraham Wald, a statistician. The World War II Allied bomber losses were large, very large, and any chances of reducing this loss was incredibly valuable. The question was “How could the US improve their chances of bringing their bombers back intact?” Bombers landing back after missions were full of holes but armour just can’t be strapped willy-nilly on to a plane without it becoming land-locked. (There’s a reason that birds are so light!) The answer, initially, was obvious – find the place where the most holes were, by surveying the fleet, and patching them. Put armour on the colander sections and, voila, increased survival rate.

No, said Wald. That wouldn’t help.

Wald’s logic is both simple and convincing. If a plane was coming back with those holes in place, then the holes in the skin were not leading to catastrophic failure – they couldn’t have been if the planes were returning! The survivors were not showing the damage that would have led to them becoming lost aircraft. Wald used the already collected information on the damage patterns to work out how much damage could be taken on each component and the likelihood of this occurring during a bombing run. based on what kind of forces it encountered.

It’s worth reading the entire article because it’s a simple and powerful idea – attributing magical properties to the set of steps taken by people who have become ultra-successful is not going to be as useful as looking at what happened to take people out of the pathway to success. If you’ve read Steve Jobs’ biography then you’re aware that he had a number of interesting traits, only some of which may have led to him becoming as successful as he did. Of course, if you’ve been reading a lot, you’ll be aware of the importance of  Paul Jobs, Steve Wozniak, Robert Noyce, Bill Gates, Jony Ive, John Lasseter, and, of course, his wife, Laurene Powell Jobs. So the whole “only eating fruit” thing, the “reality distortion field” thing and “not showering” thing (some of which he changed, some he didn’t) – which of these are the important things? Jobs, like many successful people, failed at some of his endeavours, but never in a way that completely wiped him out. Obviously. Now, when he’s not succeeding, he’s interesting, because we can look at the steps that took him down and say “Oh, don’t do that”, assuming that it’s something that can be changed or avoided . When he’s succeeding, there are so many other things getting in the way that depend upon what’s happened to you so far, who your friends are, and how many resources you get to play with, it’s hard to be able to give good advice on what to do.

I have been studying failure for some time. Firstly in myself, and now in my students. I look for those decisions, or behaviours, that lead to students struggling in their academic achievement, or to falling away completely in some cases. The majority of the students who come to me with a high level of cultural, financial and social resources are far less likely to struggle because, even when faced with a set-back, they rarely hit the point where they can’t bounce back – although, sadly, it does happen but in far fewer numbers. When they do fall over, it is for the same reasons as my less-advantaged students, who just do so in far greater numbers because they have less resilience to the set-backs. By studying failure, and the lessons learned and the things to be avoided, I can help all of my students and this does not depend upon their starting level. If I were studying the top 5% of students, especially those who had never received a mark less than A+, I would be surprised if I could learn much that I could take and usefully apply to those in the C- bracket. The reverse, however? There’s gold to be mined there.

By studying the borderlines and by looking for patterns in the swirling dust left by those departing, I hope that I can find things which reduce failure everywhere – because every time someone fails, we run the risk of not getting them back simply because failure is disheartening. Better yet, I hope to get something that is immediately usable, defensible and successful. Probably rather a big ask for a protracted study of failure!


Expressiveness and Ambiguity: Learning to Program Can Be Unnecessarily Hard

One of the most important things to be able to do in any profession is to think as a professional. This is certainly true of Computer Science, because we have to spend so much time thinking as a Computer Scientist would think about how the machine will interpret our instructions. For those who don’t program, a brief quiz. What is the value of the next statement?

What is 3/4?

No doubt, you answered something like 0.75 or maybe 75% or possibly even “three quarters”? (And some of you would have said “but this statement has no intrinsic value” and my heartiest congratulations to you. Now go off and contemplate the Universe while the rest of us toil along on the material plane.) And, not being programmers, you would give me the same answer if I wrote:

What is 3.0/4.0?

Depending on the programming language we use, you can actually get two completely different answers to this apparently simple question. 3/4 is often interpreted by the computer to mean “What is the result if I carry out integer division, where I will only tell you how many times the denominator will go into the numerator as a whole number, for 3 and 4?” The answer will not be the expected 0.75, it will be 0, because 4 does not go into 3 – it’s too big. So, again depending on programming language, it is completely possible to ask the computer “is 3/4 equivalent to 3.0/4.0?” and get the answer ‘No’.

This is something that we have to highlight to students when we are teaching programming, because very few people use integer division when they divide one thing by another – they automatically start using decimal points. Now, in this case, the different behaviour of the ‘/’ is actually exceedingly well-defined and is not all ambiguous to the computer or to the seasoned programmer. It is, however, nowhere near as clear to the novice or casual observer.

I am currently reading Stephen Ramsay’s excellent “Reading Machines: Towards an Algorithmic Criticism” and it is taking me a very long time to read an 80 page book. Why? Because, to avoid ambiguity and to be as expressive and precise as possible, he has used a number of words and concepts with which I am unfamiliar or that I have not seen before. I am currently reading his book with a web browser and a dictionary because I do not have a background in literary criticism but, once I have the building blocks, I can understand his argument. In other words, I am having to learn a new language in order to read a book for that new language community. However, rather than being irked that “/” changes meaning depending on the company it keeps, I am happy to learn the new terms and concepts in the space that Ramsay describes, because it is adding to my ability to express key concepts, without introducing ambiguous shadings of language over things that I already know. Ramsay is not, for example, telling me that “book” no longer means “book” when you place it inside parentheses. (It is worth noting that Ramsay discusses the use of constraint as a creative enhancer, a la Oulipo, early on in the book and this is a theme for another post.)

The usual insult at this point is to trot out the accusation of jargon, which is as often a statement that “I can’t be bothered learning this” than it is a genuine complaint about impenetrable prose. In this case, the offender in my opinion is the person who decided to provide an invisible overloading of the “/” operator to mean both “division” and “integer division”, as they have required us to be aware of a change in meaning that is not accompanied by a change in syntax. While this isn’t usually a problem, spoken and written languages are full of these things after all, in the computing world it forces the programmer to remember that “/” doesn’t always mean “/” and then to get it the right way around. (A number of languages solve this problem by providing a distinct operator – this, however, then adds to linguistic complexity and rather than learning two meanings, you have to learn two ‘words’. Ah, no free lunch.) We have no tone or colour in mainstream programming languages, for a whole range of good computer grammar reasons, but the absence of the rising tone or rising eyebrow is sorely felt when we encounter something that means two different things. The net result is that we tend to use the same constructs to do the same thing because we have severe limitations upon our expressivity. That’s why there are boilerplate programmers, who can stitch together a solution from things they have already seen, and people who have learned how to be as expressive as possible, despite most of these restrictions. Regrettably, expressive and innovative code can often be unreadable by other people because of the gymnastics required to reach these heights of expressiveness, which is often at odds with what the language designers assumed someone might do.

We have spent a great deal of effort making computers better at handling abstract representations, things that stand in for other (real) things. I can use a name instead of a number and the computer will keep track of it for me. It’s important to note that writing int i=0; is infinitely preferable to typing “0000000000000000000000000000000000000000000000000000000000000000” into the correct memory location and then keeping that (rather large number) address written on a scrap of paper. Abstraction is one of the fundamental tools of modern programming, yet we greatly limit expressiveness in sometimes artificial ways to reduce ambiguity when, really, the ambiguity does seem a little artificial.

One of the nastiest potential ambiguities that shows up a lot is “what do we mean by ‘equals'”. As above, we already know that many languages would not tell you that “3/4 equals 3.0/4.0” because both mathematical operations would be executed and 0 is not the same as 0.75. However, the equivalence operator is often used to ask so many different questions: “Do these two things contain the same thing?”, “Are these two things considered to be the same according to the programmer?” and “Are these two things actually the same thing and stored in the same place in memory?”

Generally, however, to all of these questions, we return a simple “True” or “False”, which in reality reflects neither the truth nor the falsity of the situation. What we are asking, respectively, is “Are the contents of these the same?” to which the answer is “Same” or “Different”. To the second, we are asking if the programmer considers them to be the same, in which case the answer is really “Yes” or “No” because they could actually be different, yet not so different that the programmer needs to make a big deal about it. Finally, when we are asking if two references to an object actually point to the same thing, we are asking if they are in the same location or not.

There are many languages that use truth values, some of them do it far better than others, but unless we are speaking and writing in logical terms, the apparent precision of the True/False dichotomy is inherently deceptive and, once again, it is only as precise as it has been programmed to be and then interpreted, based on the knowledge of programmer and reader. (The programming language Haskell has an intrinsic ability to say that things are “Undefined” and to then continue working on the problem, which is an obvious, and welcome, exception here, yet this is not a widespread approach.) It is an inherent limitation on our ability to express what is really happening in the system when we artificially constrain ourselves in order to (apparently) reduce ambiguity. It seems to me that we have reduced programmatic ambiguity, but we have not necessarily actually addressed the real or philosophical ambiguity inherent in many of these programs.

More holiday musings on the “Python way” and why this is actually an unreasonable demand, rather than a positive feature, shortly.


The Limits of Expressiveness: If Compilers Are Smart, Why Are We Doing the Work?

I am currently on holiday, which is “Nick shorthand” for catching up on my reading, painting and cat time. Recently, my interests in my own discipline have widened and I am precariously close to that terrible state that academics sometimes reach when they suddenly start uttering words like “interdisciplinary” or “big tent approach”. Quite often, around this time, the professoriate will look at each other, nod, and send for the nice people with the butterfly nets. Before they arrive and cart me away, I thought I’d share some of the reading and thinking I’ve been doing lately.

My reading is a little eclectic, right now. Next to Hooky’s account of the band “Joy Division” sits Dennis Wheatley’s “They Used Dark Forces” and next to that are four other books, which are a little more academic. “Reading Machines: Towards an Algorithmic Criticism” by Stephen Ramsay; “Debates in the Digital Humanities” edited by Matthew Gold; “10 PRINT CHR$(205.5+RND(1)); : GOTO 10” by Montfort et al; and “‘Pataphysics: A Useless Guide” by Andrew Hugill. All of these are fascinating books and, right now, I am thinking through all of these in order to place a new glass over some of my assumptions from within my own discipline.

“10 PRINT CHR$…” is an account of a simple line of code from the Commodore 64 Basic language, which draws diagonal mazes on the screen. In exploring this, the authors explore fundamental aspects of computing and, in particular, creative computing and how programs exist in culture. Everything in the line says something about programming back when the C-64 was popular, from the use of line numbers (required because you had to establish an execution order without necessarily being able to arrange elements in one document) to the use of the $ after CHR, which tells both the programmer and the machine that what results from this operation is a string, rather than a number. In many ways, this is a book about my own journey through Computer Science, growing up with BASIC programming and accepting its conventions as the norm, only to have new and strange conventions pop out at me once I started using other programming languages.

Rather than discuss the other books in detail, although I recommend all of them, I wanted to talk about specific aspects of expressiveness and comprehension, as if there is one thing I am thinking after all of this reading, it is “why aren’t we doing this better”? The line “10 PRINT CHR$…” is effectively incomprehensible to the casual reader, yet if I wrote something like this:

do this forever
pick one of “/” or “\” and display it on the screen

then anyone who spoke English (which used to be a larger number than those who could read programming languages but, honestly, today I’m not sure about that) could understand what was going to happen but, not only could they understand, they could create something themselves without having to work out how to make it happen. You can see language like this in languages such as Scratch, which is intended to teach programming by providing an easier bridge between standard language and programming using pre-constructed blocks and far more approachable terms. Why is it so important to create? One of the debates raging in Digital Humanities at the moment, at least according to my reading, is “who is in” and “who is out” – what does it take to make one a digital humanist? While this used to involve “being a programmer”, it is now considered reasonable to “create something”. For anyone who is notionally a programmer, the two are indivisible. Programs are how we create things and programming languages are the form that we use to communicate with the machines, to solve the problems that we need solved.

When we first started writing programs, we instructed the machines in simple arithmetic sequences that matched the bit patterns required to ensure that certain memory locations were processed in a certain way. We then provided human-readable shorthand, assembly language, where mnemonics replaced numbers, to make it easier for humans to write code without error. “20” became “JSR” in 6502 assembly code, for example, yet “JSR” is as impenetrably occulted as “20” unless you learn a language that is not actually a language but a compressed form of acronym. Roll on some more years and we have added pseudo-English over the top: GOSUB in Basic and the use of parentheses to indicate function calls in other languages.

However, all I actually wanted to do was to make the same thing happen again, maybe with some minor changes to what it was working on. Think of a sub-routine (method, procedure or function, if we’re being relaxed in our terminology) and you may as well think of a washing machine. It takes in something and combines it with a determined process, a machine setting, powders and liquids to give you the result you wanted, in this case taking in dirty clothes and giving back clean ones. The execution of a sub-routine is identical to this but can you see the predictable familiarity of the washing machine in JSR FE FF?

If you are familiar with ‘Pataphysics, or even “Ubu Roi” the most well-known of Jarry’s work, you may be aware of the pataphysician’s fascination with the spiral – le Grand Gidouille. The spiral, once drawn, defines not only itself but another spiral in the negative space that it contains. The spiral is also a natural way to think about programming because a very well-used programming language construct, the for loop, often either counts up to a value or counts down. It is not uncommon for this kind of counting loop to allow us to advance from one character to the next in a text of some sort. When we define a loop as a spiral, we clearly state what it is and what it is not – it is not retreading old ground, although it may always spiral out towards infinity.

However, for maximum confusion, the for loop may iterate a fixed number of times but never use the changing value that is driving it – it is no longer a spiral in terms of its effect on its contents. We can even write a for loop that goes around in a circle indefinitely, executing the code within it until it is interrupted. Yet, we use the same keyword for all of these.

In English, the word “get” is incredibly overused. There are very few situations when another verb couldn’t add more meaning, even in terms of shade, to the situation. Using “get” forces us, quite frequently, to do more hard work to achieve comprehension. Using the same words for many different types of loop pushes load back on to us.

What happens is that when we write our loop, we are required to do the thinking as to how we want this loop to work – although Scratch provides a forever, very few other languages provide anything like that. To loop endlessly in C, we would use while (true) or for (;;), but to tell the difference between a loop that is functioning as a spiral, and one that is merely counting, we have to read the body of the loop to see what is going on. If you aren’t a programmer, does for(;;) give you any inkling at all as to what is going on? Some might think “Aha, but programming is for programmers” and I would respond with “Aha, yes, but becoming a programmer requires a great deal of learning and why don’t we make it simpler?” To which the obvious riposte is “But we have special languages which will do all that!” and I then strike back with “Well, if that is such a good feature, why isn’t it in all languages, given how good modern language compilers are?” (A compiler is a program that turns programming languages into something that computers can execute – English words to byte patterns effectively.)

In thinking about language origins, and what we are capable of with modern compilers, we have to accept that a lot of the heavy lifting in programming is already being done by modern, optimising, compilers. Years ago, the compiler would just turn your instructions into a form that machines could execute – with no improvement. These days, put something daft in (like a loop that does nothing for a million iterations), and the compiler will quietly edit it out. The compiler will worry about optimising your storage of information and, sometimes, even help you to reduce wasted use of memory (no, Java, I’m most definitely not looking at you.)

So why is it that C++ doesn’t have a forever, a do 10 times, or a spiral to 10 equivalent in there? The answer is complex but is, most likely, a combination of standards issues (changing a language standard is relatively difficult and requires a lot of effort), the fact that other languages do already do things like this, the burden of increasing compiler complexity to handle synonyms like this (although this need not be too arduous) and, most likely, the fact that I doubt that many people would see a need for it.

In reading all of these books, and I’ll write more on this shortly, I am becoming increasingly aware that I tolerate a great deal of limitation in my ability to solve problems using programming languages. I put up with having my expressiveness reduced, with taking care of some unnecessary heavy lifting in making things clear to the compiler, and I occasionally even allow the programming language to dictate how I write the words on the page itself – not just syntax and semantics (which are at least understandably, socially and technically) but the use of blank lines, white space and end of lines.

How are we expected to be truly creative if conformity and constraint are the underpinnings of programming? Tomorrow, I shall write on the use of constraint as a means of encouraging creativity and why I feel that what we see in programming is actually limitation, rather than a useful constraint.