Best Practices for introductory teaching
I think you have left out two essential elements here. Your first two points leave the students passive consumers. The last is about testing. But there is no guarantee of any learning in between. 

In some ways, the two most important pedagogical ideas are 


Active Student
Constant Feedback


You need to ask your students to create things and you need to give them individual feedback on how they did. The fraction of students who learn by listening to lecture is actually quite small. Taking notes (by hand) makes them more active, but using the face-to-face time to work with them in artifact creation is much-much better. 

But students are unlikely to get everything right the first time and each student will need individual direction, whether they are struggling or excelling. 

Note that teamwork is an attempt to combine these two things. The team creates something and give each other feedback as they go along. 

My constant mantra while teaching was "It isn't important what I (the teacher) do. It is only important what you (the student) do."  Focus on their activities, not yours. Perfect their exercises, not your lectures. 



I'm not sure how relevant this is to CS, but one of the most important and memorable courses I had in my first year of college was a writing course. The prof never talked about the process of writing, but pointed us to a lot of good writing. However, the crux of the course was that we wrote a theme for every class (3 per week). We spent quite a lot of the time in class reading these aloud and getting feedback. His particular trick was to pick out the best ones in his judgement for review, not the ones that needed the most work. We also got detailed feedback in writing. No lecture at all. Lots of activity, lots of feedback. He did his job.