Students get a chance to learn the proper concepts of how programming and programming languages actually work, without the weakness of metaphors or incomplete, imprecise explanations.
Students also extensively practice actual programming in a simulated, but complete, environment. They must complete and extend existing programs, comparing their answers with the expectations of the system. Equivalent answers are allowed, as long as the final, observable behavior of their code remains the same of the given behavior.
Finally, an automated personal tutor will follow and evaluate a student's every attempt at writing code, providing line-by-line feedback in order to identify mistakes. Students are never left alone aimlessly trying.