I don't think there is a one size fit all method, so take mine as grain of salt. From my exp of teaching my brother programing, I think something that combine HW with SW is a good way to go, he first got into programing by playing/programing with Lego EV3(age 6~7). I think the EV3 (Labview) programing interface is very easy for kids to understand some basic ideas behind programing. Also, the ability of seeing their programs can run in actual brick also help a lot. Then after that it become more easy to learn some other more advance stuffs(Javascript, python, etc)