Assessing code

Paraphrasing the OCR GCSE Computing specification; as well as understanding the theory element of the course, students at the end of KS4 should be able to:

  • Analyse and describe a problem using computational thinking:
    • decomposition: break down a problem into smaller more palatable problems
    • abstraction: hiding unnecessary details to simplify a problem
  • Describe an idea / code / algorithm as:
    • pseudocode
    • or flowchart
  • Write “Sexy Code”:
    • Code that is readable
    • Code that is maintainable
  • Test code
    • Using a test plan
    • Dry trace code
  • Evaluate the success of their coded solution

If an A* grade student can do all of this then they would be a level 9 in new money.  Taking a line down to grade U (level 0) we can break it down into 3 groups of progress:

levels expectatsion

Ideally, students need to be able to express algorithms, write “Sexy Code” and be able to test code by the time they start year 10.

But this may not be possible.  However pushing Python/VB.net/etc. hard in year 9 will show the students what to expect at GCSE. Without having these skills, year 10 is a drag as it is predominantly learning to code followed by a very long coding controlled assessment that can switch off even the most eager computing students.


Blooms taxonomy in Computing

Computing, and coding in particular, is a very challenging subject.  Here is Blooms taxonomy listing the sophistication of a task from easiest to hardest.  It is clear to see that asking students to write their own code is challenging and any attempt they make should be respected.

It also puts the theory side of the GCSE into stark comparison with the coding side.  It is no surprise that two thirds of the GCSE is taken up with coding, or learning to code.

  • Remembering
    • Define, Copy, Follow instructions
  • Understanding
    • “Explain what this code does…”
  • Applying
    • “How could A be used in B.  Explain”
    • Using an IF statement correctly given a direct question
  • Analysing
    • “Compare and contrast…”
    • Applying the correct principle/technique to a given problem
  • Evaluating
    • “Evaluate the success of …”
    • Reflect upon the outcome based on a success criteria or requirement
  • Creating
    • “Develop a system that…”
    • Develop a solution from a given problem

With this in mind, much of the tasks I give my students may seem on the surface relatively simple:

  • Copy this code and get it working
  • Add another option to this menu
  • Translate this pseudocode into xxxx
  • etc.

But the skills involved in just these are very complex:

“Copy this code and get it working”

Simple?  Not a bit:

  • Remember how the IDE works
  • Accurately copy these …hieroglyphics!
  • Not working? Try and find where you went wrong; Typo? Work out what the syntax error means = uber comprehension, research and understanding skills

 

Sophistication of coding task

Easiest:

  • Copy existing code

Skills:

  • Accuracy – great for literacy
  • Mouse, keyboard, IDE skills

Moderate:

  • Creating code from given blocks
  • Translating from pseudocode

Skills:

  • Comprehension of problem
  • Understanding of high level language

High:

  • Developing solutions from described problems

 

Skills:

  • Comprehension skills
  • Abstraction and decomposition skills
  • Understanding of high level language

Highest:

  • Refining code to be “Sexy code”:
    • easier to read
    • easier to maintain
    • more efficient/effective

Skills:

  • Comprehension skills
  • Abstraction and decomposition skills
  • Understanding of high level language
  • Code analysis skills to refine

How I level code

Using the new National Curriculum levels (1-9) a level 9 (A* GCSE) coder can analyse a given problem and develop a readable, re-usable (“Sexy Code”) coded solutions showing high levels of technical competence.  This is the top benchmark, so lower levels must reflect a student has these skills to lesser degrees of competence.

I take a holistic view of the code and in general terms base my levels on:

  • Have they demonstrated that they understand sequence?
    • Level 1
  • Have they accurately copied given code?
    • Level 2
    • Lots of help = 2c
    • No help = 2a
  • Have they modified existing code (changed it slightly, added functionality?)
    • Level 3
    • Lots of help = 3c
    • No help = 3a
  • Have they developed new, but ugly code? (not easily readable or reusable)
    • Level 4 (GCSE grade C)
    • Lots of help = 4c
    • No help = 4a
  • Have they developed new but readable, modular, maintainable (“Sexy”) code?
    • Level 5-9
    • Some help + some examples of sub-routines = 5c
    • No help + some example of sub-routines = 5a
    • Levels 6+ is subjective and based on the technical sophistication of the code

Then I take into account the amount of support the student has had to reach a solution as the more support, the more diluted the student input.

For example, this Challenge sheet shows a year 8 student has successfully copied the basic code (level 2) and gone on to modify it and create more code (level 3).  The code isn’t particularly readable or reusable (no sub-routines) so can’t break into level 4, but she didn’t have much help so she is at the top of level 3 = Level 3a.

used challenge sheet thumbnail

Detail

  • Level 1 – Understand sequence
    • Follow instructions in order
    • Write instructions in order to achieve a goal
  • Level 2 – Accurately copy code
    • 2c Accurately copying instructions with significant teacher support
    • 2b Accurately copying instructions with some teacher support
    • 2a Accurately copying instructions with no teacher support
  • Level 3 – Modify existing code
    • 3c Modifying given code to meet a new requirement with significant teacher support
    • 3b Modifying given code to meet a new requirement with some teacher support
    • 3a Modifying given code to meet a new requirement with no teacher support
  • Level 4 (GCSE C) – Develop new code
    • Create new code to meet a specific requirement
    • Be able to explain the system in terms of it Input/Processing/Output
    • Use variables to alter the system in a predicted manner
  • Level 5+ – Develop “Sexy code”
    • Create efficient code using techniques such as sub-routines and arrays
    • Be able to accurately  describe the system in terms of its input/processing/output
    • Use techniques to reduce input errors such as data validation or clever UI design
    • Create a range of test that assess the validity of the system

Next: Resources