Hola, no puedo darte la respuesta como pedagogo, pero luego de años de intentar transmitir ideas escritas, para que se entiendan conceptos más abstractos, entiendo que nadie sale programando hasta que no se choca con la dura realidad de la práctica al teclado, pero creo que es fundamental enseñarles al principio que diferencien dos cosas
-la serie de operaciones y decisiones que se tienen que tomar para llevar a cabo para realizar una tarea (lo que entiendo como algoritmo),
-de la parte gramatical del lenguaje que se esté enseñando, para que el código escrito se interprete de la manera deseada, y en ejecución realice lo propuesto en el algoritmo.
Si se aprende lo primero no importará mucho lo segundo, pues será cuestion de memorizar, como antaño, o bien consultar en foros o de pedirle directamente la respuesta San Google, que sabe como buscar en los manuales del lenguaje.
La mayoría de los lenguajes que aprendí , quizá sea solo mi visión subjetiva, todos tienen ese punto en común, en que las variables guardan su último valor asignado y es anecdótico que una toma de decisión se escriba con un signo igual o dos , o finalice con punto y coma o dos puntos, eso es lo de menos, lo interesante , es que ante distintos problemas formulen alternativas de solución, allí es donde se evalúa la materia gris, (para aplicar filtro) que si es necesario o no, o bien lo desean puedan plasmarlo en un diagrama de flujo.
No sé si esto es ya anticuado o antipedgogico, pero a mi me fue siempre muy útil, hoy con algo de expriencia es totalmente innecesario, pero ante algunas contrataciones profesionales de servicios de sistemas, lo primero que vi es que toman es lápiz y papel para esbozar una linea lógica de secuencias y eventos.
Posteriormente queda traducir eso a un determinado lenguaje, más tarde pueden enseñarse las optimizaciones de recursos, para agilizar la tarea. (BASIC, cobol, fortran, visual Basic, gambas, JavaScript java, c++ ,asp, php, html, xml ,python, incluso sql, o mysql, etc) que son los que medianamente les entiendo su línea de comandos ,seguro me olvido alguno, tienen una estructura troncal , y una forma particular de escribirse para obtener resultados.
Cuando lo básico está claro, entonces sí introducir complejidad, potenciando las características del lenguaje particular , para luego si es necesario explicar otras cosas más modernas que tiene la tecnología actual...la orientación a objetos, las clases, la herencia, el manejo de conjuntos de datos, las librerías, los gráficos,etc y su implementación en ese lenguaje...
Espero mi argumento te sirva de punto de arranque para hacia donde pretendas llevar el hilo.
Saludos