Computing that has Purpose & Meaning

Computing
I think that the "Land War in Asia (aka, CS undergraduate education)" post over at FCS' Difference Engine Blog skirts around some of the ideas I have been playing with recently about teaching Computer Science and Applied Computing. In particular is the following phrase:

    We need to teach Computing that has purpose and meaning


which I think is what Applied Computing tries, but often fails, to do. The idea that is sugested in the linked post is for CS teaching to tell a story (perhaps metaphorically) and to have a beginning, middle, and end. In the real world many people do not need skills from the more theoretical end of CS. I say this with my tongue ever so slightly in my cheek, having thought that I wouldn't need any of those geometry and trigonometry skills from Mathematics until I started working on visualisations of argument structure. Although I say that for effect as I actually needed those skills when I worked building sites doing joinery in the real world. In computing though, the skills that people do need are applied computing skills. These are good, practical, real-world computing skills that cover at least formal skills in:

  •     problem solving,
  •     ideation,
  •     coding,
  •     source control,
  •     development methodology,
  •     team-working,
  •     communication
  •     probably others but I can't think of any right now...


Additonally there needs to be sufficient background and experience of the academic side of CS to allow the student to have some idea of the breadth of tools and techniques that CS can offer as well as how to aquire and apply them to their own problems. However I don't think that Applied Computing should be taught in isolation as I do not want to turn Applied Computing into a vocational course. I think that what is required is the story, provided by an associated application domain that scaffolds the use of computational tools to solve problems. For example, Applied Computing with Life Sciences, Psychology, Law, Engineering, or any of a myriad of subject domains. At university level these should of course be selected from those areas that the University is already good at. For example, the University of Dundee has a large and successful College of Life Sciences and increasing numbers of vacancies for software developers which it struggles to fill. Unfortunately there is not sufficient joined-up-thinking to ensure that LifeSci students are getting a thorough grounding in computing so the graduates that are being produced are not suited to some of the jobs that are becoming available. With the increasing trend towards heavy computer use in the life sciences this is a bad situation. Additionally, the Applied Computing degree does not have close ties with many of the range of other subject domains that Dundee does well, so ends up being a kind of theory-light CS. This gives graduates lots of tools to take away with them but no subject matter of their own to which they can apply them.

Interestingly this approach might be useful in tackling that age-old question of how to attract and retain women undergraduates in CS. In "Is Teaching Computer Science Different from Teaching Other Sciences?" (1997), Bernstein suggests that women see computers as tools and men see computers as toys. Whilst I think that this is an overly simplistic view, gender bias and preferences are much more complicated than that, I think that teaching computers as tools is essentially what I have suggested above but with the caveat that an application domain gives you the structure and narrative into which to fit those computing tools.

Posted
 

Scratch: Reducing Syntactic Complexity

Media_httpwwwstrangea_rdhrz
I was looking for inspiration for a good way to do visually-based programming. I have a domain specific language which is fairly straightforward to use but because it contains some of the traditional selection constructs, like if-elseif-then blocks, it suffers from the same kind of complexity that makes most programming languages fairly inaccessible to non-programmers. Basically I wanted something that allowed users, especially non-programming users, to understand and naturally use the iteration and selection within the language, but without having to really learn anything from outside the domain of the language. One approach that I came across whilst skimming back issues of the Communications of the ACM was that used by Scratch, a visual programming language aimed at children and non-experts. Scratch takes the familiar, to programmers, language constructs for iteration and selection and uses well designed visual artifacts that are keyed to only fit together in particular ways. Essentially, Scratch ensures that the basic selection and iteration structures are well formed by treating them as a single visual artifact. Although having already heard of Scratch, the article where I actually started finding out how it worked was "Scratch: Programming for all" which tells the story of how teaching programming is difficult but that some of those difficulties can be avoided by putting play back into the act of programming. If the interface reduces the scope for syntactic errors then the user can put more effort into surprising and delighting themselves by getting their code to do what they want it to do. The most interesting part of the article though repeats the oft-stated aphorism about young people being digital natives but goes further and explains why, although true to a degree, they still need support in developing programming skills so that they can become producers as well as consumers (p. 62)
It has become commonplace to refer to young people as "digital natives" due to their apparent fluency with digital technologies. Indeed, many young people are very comfortable sending text messages, playing online games, and browsing the web. But does that really make them fluent with new technologies? Though they interact with digital media all the time, few are able to create their own games, animations, or simulations. It's as if they can "read" but not "write".
This, I think, exactly captures the issue. People need to become betters writers in the digital landscape rather than just readers. This realisation doesn't alter the situation but it does put it very succinctly, and I am left in the position I was in at the beginning, needing a good visual method to "hide the syntax" and allow the user to play with the language, but having looked at Scratch, I think that I have a handle on how to do it now...
Mitchel Resnick, John Maloney, Andrés Monroy-Hernández, Natalie Rusk, Evelyn Eastmond, Karen Brennan, Amon Millner, Eric Rosenbaum, Jay Silver, Brian Silverman, & Yasmin Kafai (2009). Scratch: Programming for All Communications of the ACM, 52 (11), 60-67
Posted