Great to get them young! I used to run a programming society at my old school which was mostly for year 7 & 8s so 11 and 12 year olds. However I certainly can't claim to be an educational expert in this kind of thing.
My experience was that if your aim is to enthuse people about programming, the "sensible" method of starting with variables and going through sequence, selection, iteration, functions etc in a logical order doesn't tend to work. It all depends on the motivation of course and students who set out to learn to program can achieve a lot this way, it just doesn't tend to engage as much. I suppose what I'm saying is that the satisfaction of programming comes from the feeling of having achieved something. Thus, the fullness of understanding at first and the quality does not really matter. It will come with time.
The best technique I found was to do activities where I led but everyone was able to make their own copy with their own variations. That meant that it was more than just a copying exercise; they ended up with their own unique programs (and sense of achievement), but they didn't have to understand
everything I did. As I would explain each technique each time I encountered it, the re-iteration seemed to work. One exorcise I thought worked quite nicely using DBP was making a "digital etch-a-sketch". It can be achieved in around 35 lines of code and demonstrates variables, drawing to the screen, selection, iteration and catching user inputs. It also leaves room for customisation. Just for fun, I quickly threw together something like I used to use for you here:
ink rgb(255,255,255),0
nX = 5
nY = 5
do
if leftkey()
if nX > 5
nX = nX - 1
endif
wait 2
endif
if rightkey()
if nX < screen width() - 5
nX = nX + 1
endif
wait 2
endif
if upkey()
if nY > 5
nY = nY - 1
endif
wait 2
endif
if downkey()
if nY < screen height() - 5
nY = nY + 1
endif
wait 2
endif
if spacekey()
cls
nX = 5
nY = 5
endif
dot nX,nY
loop
After I'd walked them through making it, I suggested that the kids add a way to change the colour of the line. It can be achieved using what they already know about catching user inputs and changing the colour (I think I used to introduce the inkey$() statement before I did this) but of course I used to help them.
Obviously the setting is slightly different here but I think fun little exorcises like this one where you lead and explain but get your son to make his own copy as you go along might work. Another thing I used to do was to make sure I never came along with a working example or any notes. I used to make the program I was going to demonstraight the night before at home so I knew that the logic worked and then delete it. That way, I would be coding as you would actually code. This helped in a couple of ways. Because I would always make a few mistakes, it would give me a chance to show debugging and explain error messages (and it gave them a few laughs). It also made it easier to explain the code as I tend to write my code in a more logical order than it actually ends up in. For example, when writing the program listed above, I would tend to start with:
at which point I would explain loops and then I would add:
do
if leftkey()
endif
if rightkey()
endif
if upkey()
endif
if downkey()
endif
if spacekey()
endif
loop
and explain selection and catching user inputs. However had I started with this, I would have been trying to show how do and loop were part of the same structure even though they appear far apart which I think can lead to confusion.
Anyhow I hope some of that is useful but really, I just tended to muddle through on these things. Hope your son takes to programming and enjoys it!