Estructuras repetitivas y el algoritmo de la amistad

Durante el desarrollo de algoritmos, nos encontramos con que las estructuras repetitivas hacen parte de nuestra vida diaria. Pero aún así los estudiantes encuentran difícil verlas pues ya son tan intuitivas, que para algunos, pasan desapercibidas en sus vidas.

Una estructura repetitiva se compone de 2 partes, primero y la más natural corresponde a las acciones que se repiten, y la segunda y la menos obvia, pero quizás la más importante de encontrar corresponde a la condición de parada, esa que nos permite repetir y repetir y repetir hasta algún punto. Ese punto es la clave de una estructura repetitiva.

En la enseñanza de los algoritmos hay muchas maneras de aprender a hacer estructuras repetitivas. Sin embargo, los diagramas de flujo es un elemento básico con increíbles resultados. Pensar en el proceso de resolver un problema nos lleva al algoritmo, y el diagrama de flujo es una herramienta que nos permite analizar y navegar entre las posibilidades de solución que tiene el problema.

Por ejemplo, el diagrama que uso en mi clase es el ‘Algoritmo de la Amistad’ (The Friendship Algorithm by Dr. Cooper), me ayuda en clase a explicar la importancia de las pruebas de escritorio, los ciclos infinitos y como controlarlos, lo indispensable de las condiciones de parada y finalmente, que un algoritmo no es más que una secuencia lógica de pasos ordenados para resolver un problema, cualquiera, incluso el de la amistad.

‘The friendship algorithm’ by Dr. Sheldon Cooper (The Big Bang Theory)

http://www.youtube.com/watch?v=0vO37lYNbr8

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Publicado en AP1 | Etiquetado , , | Deja un comentario

Aprender y memorizar no son lo mismo

Hay una diferencia significativa con los dos conceptos. Cuando uno aprende algo puede usar la expresión “esto es como montar en bicicleta” y cuando uno memoriza algo usa la expresión “no me acuerdo”. Mientras en la primera estoy recordando el cómo hacerlo, en la segunda estoy recordando el cómo es, y es allí donde está la diferencia.

Aprender significa la habilidad de interiorizar conceptos, métodos, técnicas, soluciones y explicar claramente su uso y su importancia  al punto de estar convencido de su existencia y su razón de ser. Memorizar, tiene que ver con la capacidad de repetir lo que alguien (algo) más dijo o hizo, de una manera mecánica sin tener una explicación para su existencia.

Dentro del proceso de aprendizaje de los algoritmos y la programación hay un poco de ambas. Por un lado se espera que el ingeniero en el rol de desarrollador se aprenda la sintaxis y la semántica de un lenguaje de programación. La estructura y la forma de un lenguaje o de una tecnología ya están definidos y hay que memorizar sus definiciones, usos y ortografía. Así como cuando aprendemos a hablar y tenemos que memorizar las palabras que usamos, asociándolas a cosas, personas, objetos, acciones y todo lo demás que necesitamos para expresarnos verbalmente.

Por otro lado, se espera que el ingeniero en los demás roles básicos del desarrollo de software (analista, arquitecto, asegurador de calidad) aprenda a resolver problemas algorítmicamente, independientes del lenguaje pero no del paradigma, en donde las operaciones, las expresiones, las secuencias y la lógica son elementos que no se pueden memorizar. Buscar soluciones no es un algo que se encuentra al reverso de la caja o en el último anexo del dlibro, sobre todo porque en la algoritmia no existe siempre una única solución, es trabajo del ingeniero encontrar la más adecuada y sobre todo según quién.

Aprender no es un proceso instantáneo y solo se adquiere con la práctica, la imaginación y la creatividad. Todo viene directamente de la palabra INGENIERO. Por eso no es un proceso imposible, ni difícil, pero requiere disposición.

Para poder aprender efectivamente en un curso de algoritmos y programación se requiere que el estudiante esté dispuesto al éxito y al fracaso por igual, a escuchar otros puntos de vista, a tener la mente abierta y a encontrar ese estado personal de concentración que le permite instantes de claridad para resolver problemas. Los algoritmos no son una maquina de repetición, existen patrones, técnicas y metodologías, pero el verdadero ingeniero tiene que aprender a usarlas, el cómo, el  cuándo y el porqué.

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)
Publicado en AP1, AP2, ESTRUCTURAS | Etiquetado , , | Deja un comentario

de Albert Einstein


Si no puedes explicarlo de manera simple, no lo entiendes lo suficientemente bien – Albert Einstein

VN:F [1.9.22_1171]
Rating: 5.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Publicado en Sin categoría | Etiquetado , , | Deja un comentario

Leer, es la forma de instalar nuevo software en el cerebro

Este cómic lo publicó un colega profesor y es necesario que lo comparta por este medio. Lo estudiantes de ahora, parecen tener la tendencia a despreciar la lectura. Creen que tener libros en su maleta o en su locker automáticamente los convierte en unos aprendices. Tiene un tonto mito de creer que su cerebro aprenderá por osmosis, acostándose sobre el libro teniéndolo en su espalda. Si, los algoritmos y la programación, dependen de gran parte en la curiosidad del estudiantes y esa curiosidad debe estar alimentada por fuentes de información confiable. Así que leer es importante.

Ahora leer no es pasar las hojas del libro, buscar dónde es que están las negrillas o cursivas porque se supone que eso es lo importante, buscar los recuadros  y las notas de las páginas. Leer es pasar el texto, comprenderlo, estudiarlo y sobre todo interiorizarlo. Es como dice el comic: es instalar nuevo software al cerebro.

Leer, pero leer bien, separa a los estudiantes que “estudian antes” de los estudiantes que están aquí preparándose para ser profesionales.

Fuentes: Imagen tomada de aquí

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Publicado en AP1 | Deja un comentario

Esto es con aprendizaje activo

Cada semestre me enfrento con la misma discusión bizantina que reclaman los estudiantes diciendo que los algoritmos no los pueden aprender sin la dirección magistral de un profesor impartiendo la clase; alegan incluso que es imposible aprender algoritmos y programación por ellos mismos. Mi respuesta siempre ha sido la misma: A mi parecer, no hay otra forma mejor de aprender algoritmos.

En los cursos de algoritmos y programación de esta universidad, el aprendizaje activo no solo es importante sino que fomenta habilidades del futuro ingeniero. En esta área, las posibilidades de lenguajes de programación, herramientas de desarrollo, plataformas de ejecución y estructura de los algoritmos rara vez tienen una única solución. Por el contrario, la dinámica de los algoritmos y de la programación, requiere del estudiante una curiosidad intelectual, creatividad para encontrar diferentes soluciones y la capacidad de evaluarse, criticarse y mejorarse, y estas habilidades no se adquieren escuchando al profesor dando su solución del problema.
Posiblemente, un profesor de algoritmos y programación, ya ha desarrollado esas capacidades a mejores niveles que el estudiante, por lo que la solución que él propone puede ser la más óptima, la más eficiente o la mas corta; a veces, incluso es la mejor. Pero la solución algorítmica de un problema, durante el curso de algoritmos y programación, no es tan importante como lo es el proceso intelectual que nos llevó a ella. Este proceso con el tiempo se va refinando, empezaremos a ver cosas que no podíamos ver, y empezaremos a pensar cada vez más rápido en las soluciones.

Los ingenieros somos ingenieros, entre otras cosas, por la capacidad que desarrollamos para buscar en diferentes puntos de vista, tipos de soluciones, y finalmente encontrar la mejor. Eso es una de las cosas que nos diferencia de las otras disciplinas profesionales.

En mi clase sigo este lema: “Esto se aprende haciendo, no viendo”

Lectura recomendada: “De la clase magistral al aprendizaje activo” (por Hipólito González)

Fuentes: Imagen tomada de aquí

VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Publicado en AP1 | Deja un comentario

Un ambiente para desarrollar

Un ambiente de desarrollo, o tambié conocido como Entorno de Desarrollo Integrado (IDE en sus siglas de inglés) es una aplicación con un conjunto de herramientas de programación para que el desarrollador pueda escribir en un lenguaje de programación, programas como parte de una solución informática.

Sin embargo, esos ambientes de desarrollo no son el tipo de ambiente más importante para desarrollar.

Desarrollar no sólo es una actividad que se ejecuta, sino una habilidad que se desarrolla en el ser del programador. Desarrollar en muchos es una actividad de pasión y de gusto, pero desafortunadamente para otros resulta toda una pesadilla.

P: ¿Cómo resolver este fracaso emocional al momento de desarrollar?

He descubierto, que una parte importante es el ambiente para desarrollar, y esta vez no tiene nada que ver con IDE. El ambiente para desarrollar se refiere en este caso a las condiciones físicas y mentales del desarrollador.

En mi clase, le pido a mis estudiantes que antes de sentarse a pensar en la solución algorítmica de su problema, se pongan cómodos; esto para algunos significa sentarse en el suelo, unir dos asientos, usar una mesa más amplia, salirse del salón a las mesas de estudio o incluso usar sus audífonos para escuchar música.

El efecto de esta técnica ha sido muy positivo, los estudiantes trabajan cómodos, se ven mas concentrados y producen eficientemente soluciones algorítmicas a los problemas que se les plantea. Probablemente esto hace que desarrollar se convierta en una actividad agradable y en conclusión encuentran su propio ambiente de desarrollo que les será útil para muchas otras cosas además de desarrollar; encontrarán caminos para ser creativos, eficientes y efectivos.

Esto también lo hago durante los examenes y aplica de la misma manera.

Fuentes: Imagen tomada de aquí
VN:F [1.9.22_1171]
Rating: 0.0/5 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Publicado en AP1, AP2, ESTRUCTURAS | Etiquetado , , | Deja un comentario

Algoritmos de ordenamiento

P: ¿Cómo podemos aprender efectivamente los algoritmos de ordenamiento?

R: Siendo nosotros mismos un conjunto desordenado de elementos que necesitan ordenarse.

En la clase de hoy, hicimos un concurso de varias etapas, donde los estudiantes se dividieron en las cartas rojas contra las cartas negras. En el concurso, cada equipo debía ejecutar correctamente y en el menor tiempo, los algoritmos de ordenamiento de este nivel:

  • Ordenamiento por selección
  • Ordenamiento por inserción
  • Ordenamiento por burbuja

El conjunto a ordenar eran los mismos miembros del equipo sosteniendo cartas de la baraja entregada por la profesora de forma aleatoria justo antes del ordenamiento.

Aquí los videos:

http://www.youtube.com/watch?v=lrM8czjrfLw

http://www.youtube.com/watch?v=Bh8aCmj774Y

http://www.youtube.com/watch?v=fgY06DrbYa8

http://www.youtube.com/watch?v=c8HvKJoMpoo

http://www.youtube.com/watch?v=JBrukmnXHrM

 

…y una actividad de búsqueda binaria

http://www.youtube.com/watch?v=XgMjUFxwQkI

http://www.youtube.com/watch?v=sZeN6b8XfOk

 

VN:F [1.9.22_1171]
Rating: 1.0/5 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)
Publicado en AP2 | Etiquetado , | Deja un comentario