"Research shows that the ability to understand programs is a key factor in developing computational thinking / programming skills. National 5 and Higher therefore include outcomes concerning the ability to read and understand code. Rigorous assessment of these outcomes requires code to appear in exam papers. SQA don’t specify one programming language of instruction – so, which language should be used to present code in exam papers?

SQA adopted Haggis, a clearly defined pseudocode, as a way of presenting code in exams."
Quintin Cutts

Commissioned by the Scottish Qualifications Authority (SQA) in 2010, Haggis is a high-level reference programming language used primarily to examine Computing Science for Scottish pupils taking SQA courses on the subject. It is designed as a tool to bridge the gap between pseudocode and typical computer programming, and provides a uniform syntax and form in which to present questions to pupils in assessments.

Jointly developed by Quintin Cutts (University of Glasgow) and Greg Michaelson (Heriot Watt University), Haggis was designed to emphasise the core idea of ensuring pupils could view code and demonstrate their understanding of its behaviour, in order to develop their computational thinking and programming skills. It was first introduced into Computing Science examinations as part of the Scottish Government’s Curriculum for Excellence development programme in 2013-14 in National 5, 2014-15 for the new Higher courses and into the new Advanced Higher in 2015-16. 

Haggis' design philosophy had the following core principles in mind.   It should:

  • not be based on any one extant programming language;
  • be adaptable to programming languages already taught in the Scottish curriculum;
  • provide enough complexity for Advanced Higher teaching whilst being appropriately useful for earlier teaching years;
  • provide an instinctive element, e.g. variable types are self specified;
  • be concise in use, but open to interpretation of multiple ways to solve a problem;
  • allow different constructs have different meanings when used in certain context;
  • not visualise the non-useful elements such as Memory being allocated.