I saw a quote today somewhere that I didn’t save and don’t properly recall along the lines of most people don’t know what it’s like to be in the privileged position of a programmer who is able to code your own custom apps.
Slightly earlier, I’d idly wondered about the rhetoric of “everyone must learn to programme”, and how many people I know found it useful in their work to “do some programming” yesterday, or last week or over the last month.
I also wonder about how many of the folk preaching “everyone should learn to programme”:
a) actually know how to write code (and if they don’t, do they intend to learn? When?);
b) ever use code to do anything (i.e. why should folk learn to code? What’s it useful for?)
Going back to the privilege thing, what I think folk don’t realise is how little you need to do to get things done, if you know what to do – or look for.
One of the reasons I like the RStudio and Jupyter notebook environments, particularly for visualising data, is that if you have the data looking right, (i.e. when you display it as a table, it has things arranged in the right way in a table made up of rows and columns) you can create all manner of wonderful, interactive graphical outputs with a single line of code. Other folk have written templates from creating embeddable interactive HTML widgets, and transforming the data in my data table into the data the widget needs to display the chart.
In itself, code can often be just a written version of a menu option you might select or a set a values you have selected in an interactive form. Nothing new, just turning point-and-click choices into word equivalents and then writing them down, so the machine can do whatever it is rather than you.
Things are also – arguably – getting easier.
For example, over the last week Simon Willison has been tinkering with a really useful set of components for querying data. This started with a tool to put CSV files into a simple database without the user having to do anything other than say – put these files into a database. And then a tool that let you publish the database as a service, either on your own computer or the cloud (again with a single line) so you could query it through a browser. Now there’s a UI, and a simple tutorial for building a simple app to search for trees in San Francisco. (Writing the HTML might be tricky, but that page could be based on a template? Or the app could perhaps be accessed via Jupyter notebook using dynamically created
ipywidgets and published using
Taken together, with a few lines of code, you can create and publish your own interactive data explorer , along with an API you can access from elsewhere.
Perhaps that is a privilege only “coders” can avail themselves of. But why?
With knowledge of a few small tools, the sorts of thing they do (rather than how they do it), and how to wire them together, you can start to create powerful, and useful, applications.
Which makes me wonder again about whether it is really so much harder to teach programming stuff to adult novices using real tools to solve real problems compared to teaching them how to use Scratch to make an animated owl blink its eyes or make a turtle draw a square?
Pedagogy is an oft used word in the OU, which in derivation means “lead a child”. (The adult equivalent, andragogy, is rarely used, self-directed heutagogy even less so.) Can we really do no better at teaching adults programming and what it might be used for than starting them off with months of programming using tools developed for teaching primary school children, some of which was invented getting on for fifty years ago? Are we really that stuck for coming up with teaching ideas that not only teach principles of “computational thinking” and core programming ideas, but also help learners see how they might be able to use the ideas in practice and perhaps even set them up with a chance of using them for real outside of their studies? (SMEs employing three people probably don’t need a full time developer, but if one of them can hack a solution to problem that solves a need, or makes a particular task slightly easier, it doesn’t really matter?)
Or perhaps the practical uses get in the way of teaching the “pure*, abstract coding principles?
I JUST DON’T UNDERSTAND WHAT WE’RE TRYING TO DO?!
9 thoughts on “Fragment – Programming Privilege”
Great post and totally agree that people who preach learn to code, should code. I think I put up my own barriers to learning to do more coding “stuff’. Partly it’s time, partly I’m a bit scared of getting things wrong and I know it would be easier and quicker to ask someone who knows what they are doing and this in turn leads to third reason because I don’t really have too. You have made me think though . . .
I’ll echo Shelia’s “great post” and resonates strongly with a big point I’ll be trying to make in a presentation (http://tiny.cc/ktsdiy) tomorrow around teacher DIY learning analytics. Please keep thinking, working and posting around this question.
At dinner tonight with a co-author (not a techie) she echoes Shelia’s reaction, but perhaps extended.
So, I’m wondering if the “real tools to solve real problems” approach will be sufficient to help this happen?
I think/hope it will, but am fearful it won’t. I wonder if the “programmer privilege” I’ve had for decades makes me see the world differently and thus makes it possible for me, but perhaps is a step too far people like my co-author?
I’ve observed some of the software carpentry workshops, they still seem to require too much of a programmer background to be broadly effective. I suppose there’s really only one way to find out. Try it. But would be great to learn from others.
@David / @Sheila – Thanks for comments; one of the big issues with using codey stuff to get stuff done is the overhead of getting an environment set up that lets you make use of one-liners that call on powerful libraries / abstractions / tools that other people have built. Things like the SQL command line tool help, but still require: someone to install python and the package; someone to know where the command line is and how to cd to a directory; someone to know SQL. Even if you know SQL, there are still blockers. Things like Binderhub and Jupyter ntoebooks help I think, in various ways; one because the environment lets you put code outputs into some sort of real context (a text document); one because the environment the notebook runs in can be predefined. For example, this link – https://mybinder.org/v2/gh/psychemedia/showntell/maps?filepath=index_maps.ipynb – runs in a container packed with preloaded geo tools (it may take a little while to fire up!). From the Cell menu select Run All to see the demo; although there is a lot of code: a) it can be hidden; b) once written, a lot of it can be used as a template and parameterised, eg to accept just a latitude and longitude. More demos showing simplifications, to follow over next few weeks..
This blog post exemplify’s an expert’s blind spot. You are defining “simple” as a small # of actions, as opposed to measuring the scope of knowledge needed to know which actions to take. Novices don’t know CSV, databases, widgets, or services.
We do have evidence that blocks-based languages are much easier to get started with than text-based languages (e.g., http://dweintrop.github.io/papers/Weintrop_Wilensky_ICER_2015.pdf), and the knowledge learned in blocks transfers to text. We have evidence about the enormous time cost of the errors from text programming languages (e.g., work by Neil Brown, Matt Jadud, Brian Dorn). So, yes, making the owl blink in Scratch is measurably easier than doing something “real” in a “real” language.
That said, I agree that doing something “real” is important — students value authenticity. But we shouldn’t fool ourselves that we can judge what is easy for novices, because we do have expert’s blind spot. We need to test, not trust (https://cacm.acm.org/blogs/blog-cacm/203554-five-principles-for-programming-languages-for-learners/fulltext).
Thanks for that – I completely agree (which is why I try to blog everything I learn or struggle with when trying to get things to work to capture the steps that are easy for experts (I try to watch for myself saying “just” and “all you have to do” and try to ensure that such shorthand expert phrases are unpacked somewhere… Which is one reason why my blog is so full of self-referral links…)
I have to admit I don’t really know the literature around teaching programming. (A case in point from a discussion today; anecdotally, a colleague reported that students with particular learning difficulties found it easier to use a command line than a complex GUI when working with a particular application. Do you know any studies around that?:-)
Re: Weintrop/Wilensky, what age are the “high school students” referred to? Out students are historically predominantly 25-55 year adults in work, so they presumably have a different set of experiences and expectations about to make use of the things they learn than kids (Guzdial, Principle #1: Connect to what learners know). Or maybe that’s irrelevant when it comes to learning code?
I also think we need to distinguish between the initial 5 minute wow factor from being shown “something cool” and then the scores of hours spent learning. It may well be that Scratch can motivate kids for longer periods than adults who may tire from its kid friendly UI (or maybe not; if you have evidence otherwise, I’d be keen to see it.)
I have to admit I have several issues with Scratch. For example:
I’m not sure the version we use reveals the text equivalent code in the way that something like PyBlocks does, and which allows the user to flip between blocks and code representation;
I’m not convinced folk who have issues with spatial layout benefit from GUIs compared to code (would like to see evidence, or hear more anecdotes either way, about this);
there are issues scripting activities within GUI based applications, in the sense you need two display surfaces: one for the GUI, one for the activity script. (eg two windows open on screen (in which case screen real estate may be an issue), or a GUI on screen and the script in print, or read from a phone, tablet, second screen, or perhaps an audio script to follow along. With code, you can REPL single lines of code or build up linear narratives (eg https://blog.ouseful.info/2017/11/15/programming-meh-lets-teach-how-to-write-computational-essays-instead/ ). And yes, I know with things like IPython there are issues about learners getting confused about the state of the underlying state (though no-one I’ve asked who labours this point has pointed me to any actual research, or even told me any good anecdotes about related student confusion…;-)
computing ed doesn’t seem to have moved on much? I get the impression that folk who use computing (engineers, scientists, social scientists etc) are far more likely to see the value of something like Jupyter notebooks than computing folk, perhaps because computing folk are more interested in either comp sci, or teaching folk how to be able to work as part of a large team working on a large codebase, rather than writing scripts to replay a sequence of (nested) actions. But I’d contend there are more people who can benefit from eg learning to use notebooks than joining a large team working on millions of lines of Java in Eclipse. And I’m not convinced starting with Scratch (if you’re an adult rather than a seven year old) helps? Or maybe it does if you play with it for a couple of hours, then move one, rather than spending a whole course (dozens of hours) learning programming through Scratch?
What I’d really like to see are some stories that talk about at teaching adults programming, not kids…
Check out Brian Dorn’s work on graphic designers learning to code: https://computinged.wordpress.com/2010/08/19/a-new-classroom-for-a-new-kind-of-computing-student-brian-defends/
And Philip Guo’s cool new work on teaching senior citizens to code: http://pgbovine.net/publications/older-adults-learning-programming_CHI-2017.pdf
The issue of learners “getting confused about the state of the underlying state” is called “developing a mental model of the notional machine” and it’s a hot area of research in computing education research. I blogged about some of that work here: https://computinged.wordpress.com/2016/03/07/notional-machines-and-misconceptions-in-cs-developing-a-research-agenda-at-dagstuhl/
PS re: my references to “Novices don’t know CSV, databases, widgets, or services.” This blog makes no pretence at trying to avoid technical terms – it’s my personal notebook… When introducing stuff to students, we’d scaffold how we introduce things to them in an appropriate way (for a definition of appropriate that may include the fact we have an adult audience, albeit lacking a technical vocabulary and technical concepts).
@Mark re: “This blog post exemplify’s an expert’s blind spot. You are defining “simple” as a small # of actions, as opposed to measuring the scope of knowledge needed to know which actions to take. Novices don’t know CSV, databases, widgets, or services.”
I had tried to caveat that with: “Going back to the privilege thing, what I think folk don’t realise is how little you need to do to get things done, if you know what to do – or look for.”
One of the things I have noticed about the teaching of programming is that whilst is may get across certain teaching points, the learners are often left with a “practice blindspot” that means whilst they may have been told how to use a loop or a conditional, they have no idea: a) how to access a programming environment outside of the one provided to them whilst they are learning; b) how to see a problem as one that might be addressed conveniently using code, let alone knowing how to decompose the problem so that they can address it using the things they do know (loops, conditionals, etc).
Comments are closed.