Discuss how can we effectively teach programming?

You can prepare by:
Reflect on the reasons why teachers may choose one approach to teaching programming over another. (intructivism & constructivism)
Consider how different types of pupils might respond to constructivist and instructivist lessons.
The assignment asks the fundamental question of ‘how can we effectively teach programming’? This is a more complex problem than some might think. Whilst there will be many websites, blog posts and ‘reports’ offering a formula to be followed, ‘golden rules for great coding’ and ‘best practice guides’ published by all manner of organisations this assignment is not about “googling the answer” which is felt to be “out there” for the finding. These offerings seldom provide any justification for why we should teach in a particular way or even what we hope to achieve other than putting together some lines of Python to print “Hello world” or follow a booklet of instructions to “make a pong game”.
This assignment supports you in exploring in depth WHY we might wish to “teach programming” and so HOW we might design schemes of work and lessons. The popular sources available on the Internet seldom explore the relationship between coding, programming and Computational Thinking or consider the different approaches to teaching.
You might use some of the sources above by illustrating the assumptions they are making, the disagreement between sources and the ‘gaps’ in their author’s reasoning (or lack of it).