Programming is intrinsic to computer science

In their second blog, based on the white paper, Practical Programming in Computing Education, the NCCE Academic Board explain why practical programming is intrinsic to computer science, not just an optional add-on.

The importance of programming is explicit in one of the four Aims of the National Curriculum for computing:

All pupils can analyse problems in computational terms and have repeated practical experience of writing computer programs to solve such problems.

But why has programming been made such a vital aspect of the National Curriculum for computing? Because programming is not just a means to an end: it is a fundamental part of the subject itself, just as music performance is to music and writing to English as reading. A computing education without programming would be a dry, eviscerated husk shorn not just of motivation and enjoyment but of intrinsic content.

The whole purpose of computer science is to help us build things. As Fred Brooks put it: “the natural scientist builds in order to study; but the engineer studies in order to build”. He goes on: "I submit that by any reasonable criterion the discipline we call “computer science” is in fact not a science but a synthetic, an engineering, discipline. We are concerned with making things, be they computers, algorithms, or software systems." In reality, computer science is both science and engineering (and much more too). However, studying in order to build is a fundamental part.

So building things (programming) is not an optional add-on to the subject; it is a raison d’etre of the subject itself.  Moreover, the key skills that are developed while learning to program are of value across the board: for a software engineer; for direct use in other subject areas; for those pushing the boundaries of what computing can do for us; and for all of us who want to understand the computing now pervasive in our world. The curriculum states: "All pupils can analyse problems in computational terms." But this is not pupils only, and it's not just about little programming problems - it is any member of the population when we are struggling to understand the social and ethical issues involved in some new domain where computing is being applied. The understanding and skills developed while we learn to program are used in such analyses.

Computer science can be considered ‘the silent C’ in CSTEM, and it is through programming that the linkages with science, technology, engineering and mathematics are most strongly manifested. There's more on this in our full white paper, but in summary:

  • Science: Programming uses the scientific method of observing the world, building models and testing them, providing implicit science training. It has opened up whole new areas of science through simulation and virtual experiments and discovery via machine learning.
  • Technology: Programming enables mastery over technology by making the computer carry out your own instructions. Due to digital technology's ubiquity, understanding programming enables deep insight into the possibilities and limitations of existing and new technologies.
  • Engineering: While programs are less tangible than the bridges or circuit boards that engineers build, their impact on our lives is no less significant.  Programs are increasingly embedded within physical-engineered systems and are essential to doing engineering.
  • Mathematics: There are strong parallels between computing and mathematics. Both are modelling systems which are used to represent and reason about aspects of the real world.  The thinking skills are related, for example, abstraction is a key skill in both disciplines.  Programming can bring mathematics to life through the creation of artefacts that do things in the world.

It is not just STEM subjects though! Programming links to and can be a useful skill in the arts and humanities (in fact all other subjects). For example:

  • English. A key and often sadly neglected part of programming is that of documentation. Clear written explanations of what code does and how are vital to helping limit the mistakes in large software systems and the maintainability of the code.
  • Design and Creativity. Programming and other forms of practical work are inherently creative. Good design is an important part of good programming. It is good design of the user interface, for example, that makes a program usable (or not).
  • Social sciences. A key step in developing software is to understand the problem you are solving first, and this requires an understanding of problem contexts that often involve people and society. Social sciences methods such as interviewing people to understand their needs are key to real software development, for example.
  • Art. The virtual world provides new mediums and techniques for creating art. Programming is a vast new artistic toolset, whether used to explicitly program the artwork, develop programs that support doing so or write artificial intelligence programs that create the art themselves.

Read the full paper, and comment on it on this CAS Discourse thread.