Open Source Computing

Oct 14, 2010

Miles Berry

What follows are notes from a brief presentation to the Computing at School working group meeting in Cambridge this morning.

It has often seemed to me, and thus I’m sure others, that open source tools and methods provide a diverse and fertile ecosystem in which the craft of programming might be mastered and computer science studied. My own discipline is education rather than computing, but I hope some of the following aspects might illustrate the opportunities which open source offers for those concerned to encourage computing at school. 

Open source programming languages

A number of interesting and accessible programming languages are essentially open source projects, in which source code for interpreters and compilers in the reference implementation is available for all under an open source licence, and where the standard build of the language includes open source libraries. The most obvious examples here are of scripting languages for web based applications such as Perl, PHP and Python, which represent a way in to software development for many who may not have studied academic computing.

Open source development environments

Open source tools can also be used to provide rich, fully featured development environments for a very wide range of programming languages. Examples here would include the tools such as the Gnu Compiler Collection (C, C++ Objective C, Fortran, Java and Ada), which lies at the heart of the Gnu/Linux project, as well as multipurpose development environments such as Emacs, Eclipse and KDevelop.

Beyond this, it’s worth acknowledging the opportunities presented by Linux for open source development at operating system rather than application level.

In a school setting, such open source environments not only offer the opportunity for pupils to become familiar with alternative operating systems and interfaces, but also provide one way of offering the freedom which many network managers might be reluctant to provide on their networks, either via live Linux distributions booting from CD or memory stick (such as the splendid Sugar on a Stick GUI for children), via shell access to a dedicated Linux computer or within a Linux powered virtual machine.

Open source tools to learn programming

It seems significant that so many of the great educationally focussed tools environments for programming at school level are available under open source licences, including Scratch, Alice, Squeak E-Toys and Greenfoot. Scratch’s share button and the resultant collection of open source scripts uploaded by its user community is, I suspect, one of the significant factors in its success, with the Greenfoot Gallery providing similar encouragement for those learning Java using this tool. It’s because Scratch is open source that variants such as BYOB Scratch, used at Berkeley for their beauty and joy of computing course, as well as my own ‘creativity and computing in the primary school’ module.

Software freedom

Enshrined within the free software definition are the freedoms to:

  • study how the program works – thus allowing those learning computing to learn from and critique ‘real’ software in all its complexity from kernel modules to scripts for web 2.0 applications;
  • change it to make it do what you wish – allowing young programmers to build on as well as learn from the work of others; and
  • distribute the modified version to others – which is crucial from a constructionist perspective, reflecting Papert’s insight that the most effective learning happens when we create public knowledge artefacts.

Contributing to open source projects

These freedoms create the opportunity for anyone to contribute to open source projects, from supporting others and helping with documentation (‘legitimate peripheral participation’) through spotting and then fixing bugs to contributing and maintaining modules and even the core code of a project. The communities that develop around the best open source projects have much in common with Wenger’s notion of communities of practice, with all that this implies for those learning the craft of programming through a modern, self-directed form of apprenticeship. As well as constructionist learning through creating public software for others to read and use, the young open source programmer also creates their own portfolio of source code snippets and projects, which contribute to their reputation within the community and employability in the software industry.

Open Source Mentors

Google’s Summer of Code scheme has been one way to formalise this sort of programming apprenticeship, by matching up undergraduate computer scientists (and others) to small open source development projects with designated mentors from within that project’s developer community. I wonder if the joint forces of CAS and Open Source Schools might be in a position to create a similar scheme for some of our sixth formers, or perhaps even younger students.