Autor Tema: Consejos para enseñar a programar

0 Usuarios y 1 Visitante están viendo este tema.

07 Agosto, 2022, 03:41 pm
Leído 299 veces

mathtruco

  • Moderador Global
  • Mensajes: 5,532
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Hola.

A diferencia de matemática, donde el alumno llega a la universidad con una base, en programación no, y la mayoría tiene la mente en blanco en esta área. Y es por esto que no basta con sólo enseñar comando, sino que hay que despertarles la habilidad de escribir algoritmos para resolver problemas.

Al enseñar matemática me he dado cuenta que hay errores típicos como pensar que {0,1}=[0,1]. Por más que se explique siempre alguien tiene esta confusión.

Conversando con un profesor de lenguaje de programación me dijo que él detectaba que al escribir algo como

    x=3
    x=x+7
    x=7

habían estudiantes que pensaban que x guardaba los tres valores.

Por esto quería leer sus comentarios acerca de qué tipo de ejercicios o ejemplos pueden ser importantes para enseñar a alguien a programar. Y también errores que han detectado y que puede ser importante recalcar.

Un error típico es sentarse frente al pc a escribir un programa sin tener claro qué se va a hacer. O igualmente malo: teniéndose una idea vaga de lo que se quiere programar, lo que lleva a escribir un programa con errores. Para practicar esto había pensado hacer lo siguiente: Hacer grupos de 2 o 3 personas en clase, darles una pequeña lista de números enteros, y que vean cómo ordenarlos. Esperaría que en media hora puedan deducir ellos mismos un algoritmo de ordenamiento, como el de burbuja. Y si lo escriben como pseudoalgoritmo, fácilmente podrían programarlo. Pero quizás a ustedes se les ocurra alguna otra actividad, quizas más sencilla, ya que ésta requiere una noción de bucles, que se ve mucho más adelante en el curso.

El resumen, lo que pido en este hilo es que opinemos sobre actividades que se puede hacer a un grupo en un primer curso de programación universitario, y consejos/comentarios en general. Y si conocen buen material, lo apreciaría mucho también.

07 Agosto, 2022, 07:43 pm
Respuesta #1

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,472
  • País: ar
  • Karma: +0/-0
  • Sexo: Masculino
  • Oh Oh!!! me contestó... y ahora qué le digo...
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
Saludos  \(\mathbb {R}^3\)

07 Agosto, 2022, 08:08 pm
Respuesta #2

manooooh

  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 3,881
  • País: ar
  • Karma: +1/-0
  • Sexo: Masculino
Hola

Solo mencionar que en programación funcional, no existe el concepto de "variable" pues no existe efecto de lado.

Quizás se deba a que nuestros profesores nunca nos hablaron del paradigma funcional, y que por eso sólo conozcamos gran parte de la programación estructurada. Pero si fuera profesor y sé fehacientemente que los alumnos nunca han visto un código, bien podría comenzar con la programación funcional, al ser más declarativa no ponemos foco en el algoritmo (en algunos casos sí,  como listas y pattern matching), sino que nos interesa estudiar desde un punto de vista funcional.

Esto a primera vista parece ser fácil, pero cuando uno ya trabajó con lenguajes imperativos como C, pasarse a este paradigma usando por ejemplo Haskell, se vuelve muy difícil. Por eso si los alumnos no tienen ningún preconcepto, no les chocará para nada, así que puede resultar interesante enseñar este paradigma.

Saludos

08 Agosto, 2022, 06:25 pm
Respuesta #3

mathtruco

  • Moderador Global
  • Mensajes: 5,532
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Gracias por sus comentarios, los tendré presente.

09 Agosto, 2022, 06:25 pm
Respuesta #4

martiniano

  • Moderador Global
  • Mensajes: 1,995
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

Si están a un nivel muy bajo es posible que necesites algoritmos más sencillos. Yo para introducir los condicionales empiezo con lo de decidir si un número es par o impar, si un números es múltiplo de otro, si una letra es vocal o consonante, etc.

Luego para los bucles empiezo con algoritmos que te impriman los naturales más pequeños que un número dado, con variaciones como que los imprima de dos en dos o de tres en tres, otro que imprima los \[ n \] primeros cuadrados perfectos, los cuadrados perfectos más pequeños que un número dado, etc.

Luego algoritmos de decisión que combinen condicionales y bucles como el de decidir si un número es cuadrado perfecto, o primo (el algoritmo elemental), etc.

Luego algoritmos que realizan cálculos iterativos como el factorial de un número, o la suma de los primos menores que un número, etc.

Luego la recursividad, si es que el lenguaje la soporta.

Y luego lo de los arrays. Programas de recorrido, que te pidan \[ n \] números y que después te los impriman, otros de búsqueda, que después de pedirte el array te busque un valor concreto y te diga si está o no en la lista (que puede estar ordenada o no). Aquí entrarían también los algoritmos de ordenación.

Y de estructuras de datos pues depende de hasta dónde quieras llegar claro (arrays multidimensionales, pilas, colas, árboles, hashing, etc, etc, etc).

También es muy importante el paradigma, a mí por ejemplo no me gusta empezar de primeras con algo como programación orientada a objetos, por ejemplo, cosas así se las meto cuando están más sueltos con lo de los algoritmos y dominan las sentencias de control básicas. Pero esto ya son cosas que van por gustos, claro.

Creo que en esto de la didáctica de la programación es importante animarles a practicar mucho, hacer variaciones de los códigos, comprobarlos para casos que puedan ser especiales... Mucha práctica en general.

En cuanto a material no te sabría recomendar, la verdad, les voy proponiendo los ejercicios un poco sobre la marcha dependiendo de lo que quiera cada uno y del nivel que tenga.

Un saludo.

12 Agosto, 2022, 04:01 pm
Respuesta #5

mathtruco

  • Moderador Global
  • Mensajes: 5,532
  • País: cl
  • Karma: +0/-0
  • Sexo: Masculino
  • El gran profesor inspira
Gracias martiniano por ayudarme con tu experiencia. Creo que sigo una linea muy parecida a la tuya: no hay ejercicio demasiado simple, hay que tomarse todo el tiempo necesario para explicar esos pequeños ejemplos que mencionas.

Una idea que me parece buena:

Revisión de códigos entre pares. Creo que tan importante como apender a programar es comprender el código de otro, con el nombre de variables que le haya puesto...    Eso les puede hacer ver la importancia de la buena elección de nombres de variables, comentarios...   Creo que es algo importante.  Tengo pensado también hacer grupos donde cada uno deba escribir un pseudocódigo (30 minutos) y luego el otro grupo deba implementarlo. No sé si funcione. Pero creo que también puede servir para aprender cuánto escribir en un pseudocódigo.



En cuanto a material no te sabría recomendar, la verdad, les voy proponiendo los ejercicios un poco sobre la marcha dependiendo de lo que quiera cada uno y del nivel que tenga.


Me pasa igual. No puede ser un curso estándar, dependerá mucho de la carrera que se dicta. Eso de ir preparando las clases de la siguiente semana sobre la marcha me está tomendo mucho tiempo. Espero que con los años converja a una buena versión del curso.

17 Agosto, 2022, 12:55 am
Respuesta #6

martiniano

  • Moderador Global
  • Mensajes: 1,995
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Hola.

Una idea que me parece buena:

Revisión de códigos entre pares. Creo que tan importante como apender a programar es comprender el código de otro, con el nombre de variables que le haya puesto...    Eso les puede hacer ver la importancia de la buena elección de nombres de variables, comentarios...   Creo que es algo importante.  Tengo pensado también hacer grupos donde cada uno deba escribir un pseudocódigo (30 minutos) y luego el otro grupo deba implementarlo. No sé si funcione. Pero creo que también puede servir para aprender cuánto escribir en un pseudocódigo.

Pues sí. Suena muy bien, desde luego. Gracias por compartir tan interesantes ideas.

Un saludo.