Imagination: to think of the parts of a programme, what sprites (objects) their costumes and their variables (attributes). What other variable are need and the maths required for their use. How do the sprites behave and interact. This is the essence of programming.

Imagination: what code blocks (lines of code) are need to achieve, within the limitations of those available, the objectives and manipulate the sprites. This is understanding the language and programming environment being used.

What I don't tell is how you can't imaging how long it takes to choose and manipulate those blocks to make them do what you want. Why don't they do what you think (wish!) they should do.

As the saying goes - it takes 5% of the time to write the first 95% and 95% of the time to finish the last 5%.
This is the truth about programming—its tenacity bending the code to you will, the dogged persistence
off hunting down the bugs.

An alternative view is expressed by Rob Miles in his book The C# Programming Yellow Book. If you are starting C# you can do no better than starting with this.

Programmer’s Point: Great Programmers debug less I am not impressed by hacking programmers who spend whole days at terminals fighting with enormous programs and debugging them into shape. I am impressed by someone who turns up, types in the program and makes it work first time!

Imagination: to think of the objectives of a programme.

What will be in it and how is these to be achieved. How does the programme start and what decides when/how it ends.

Here this part is given, to an extent, in the challenges. I tell my kids that there are two types of programmes. Those that work and those that don’t, the mark is 0% or 100%. But to know if it is working the aim of the programme must be defined and fulfilled.