sábado, 7 de febrero de 2015

¿Por qué es tan jodidamente difícil aprender a programar?

Un reciente post del blog del sitio web www.vikingcodeschool.com que ofrece cursos de programación online me pareció muy interesante.

En este habla del trauma que supone para muchos aprender un lenguaje de programación y las fases por las que pasan todos los estudiantes antes de dominarlo para poder acceder al mercado laboral.

Fase 1: La luna de miel


Todo el mundo sabe cuando empieza que es algo difícil, pero en realidad no es difícil, lo difícil es, citando a Martin Fowler "Cualquier tonto puede escribir código que un ordenador entiende. Los buenos programadores escriben código que los humanos pueden entender."

10 PRINT

Hoy en día hay muchísimos recursos en la red, plataformas como teamtreehouse, codeschool,  Codeacademy, code.org y w3schools, cursos Mooc en Udacity, Coursera, Edx, foros como stackoverflow, entredesarrolladores etc.

Todos mediante vídeos, pequeños retos de ludificación hacen que programar sea divertido y parezca algo fácil. Estamos de lleno en la luna de miel y nos creemos que fundaremos el próximo facebook o google.


Fase 2: La cima de la confusión


Aquí llegamos a una fase en la que muchos abandonan la programación, el momento en el que intentamos hacer proyectos desde cero con una hoja en blanco. Empezarán los errores, muchas veces de sintaxis, aparecerán cientos de fallos, ¡es la guerra!.



Muchos estudiantes se desesperan en esta fase, sienten que no avanzan, que es el código el que les domina y no tienen el control, este es el punto el que que mucha gente continuará o finalmente abandonará.


Erik Trautman señala que la razón de esta perdida de confianza es debida a dos factores:

Densidad de recursos

Buscar curso de programación en Google da casi un millón de resultados, parece que solo tenemos que buscar nuestro problema y encontramos un sitio donde copiar y pegar la solución. Se compran libros, se siguen tutoriales y parece todo muy fácil.

Pero en las siguientes fases cada vez es más difícil encontrar la solución a los problemas, no se sabe donde buscar, no vale con copiar y pegar ... la clave está en saber donde buscar, muchas veces la solución está en la documentación de las APIs, blogs técnicos, y cuando no se encuentran saber que preguntar en los foros técnicos.

i know kung fu - I KNOW GOOGLE-FU

Ámbito del conocimiento

Este abarca el total de nuevos temas que necesitas aprender en cada fase.



Cuando empiezas a programar se necesita la sintaxis básica, que es un bucle, que tipos datos existen etc. son muy pocos los temas que hay que aprender.

Después empieza a aumentar rápidamente los temas que hay que aprender y como en matemáticas, no hay una sola solución para todos los problemas.

En la tercera fase es cuando hay más temas, hay que saber utilizar las herramientas, aprender nuevos lenguajes, programación estructurada, programación orientada a objetos, buen estilo de programación, saber cuando buscar ayuda.

Solo cuando se ha pasado la tercera fase, empiezan a disminuir los temas que hay que aprender, te especializas en una tecnología y empiezas a sentirte cómodo, ya tienes claro que es lo que sabes y lo que no como puedes aprenderlo, la programación necesita actualizarse en toda la carrera profesional.

Fase 3: El desierto de la desesperación

El dolor combinado del incremento de temas para aprender y la escasez de recursos lleva al desierto de la desesperación. Esta etapa es larga, oscura y llena de terrores. Aparecen espejismos con tentaciones de recursos que cuando alcances solo verás más desierto.
Ha estas alturas te habrás apuntado a varios cursos Mooc, habrás seguido tutoriales y tienes algunos libros de programación y habrás aprendido la lección de la luna de miel de que no hay respuestas fáciles.

Aquí descubres lo muy poco que sabes, todo lo que te queda por aprender y lo lejos que estás de ser un auténtico profesional. ¿Cómo puedes saber lo que necesitas aprender o si estás aprendiendo las cosas bien? Incluso cuando desarrolles tus primeras apps que hacen y funcionan como querías puedes sentirte completamente perdido.


Aquí es clave la perseverancia y trabajar día a día, pronto tendrás tus primeros proyectos reales y empezarás a darte cuenta de que lo estás consiguiendo.

Fase 4: El ascenso a ser la caña


Has conseguido salir del desierto y tu confianza crece día a día, puedes encontrar la solución a tus problemas en Google y entiendes los congresos y blogs técnicos..


Sabes que todavía no estas listo para trabajar, aunque tus aplicaciones funcionan, sabes que dentro están llenas de parches y lo peor de todo, no distingues las partes que están bien de las que están mal. Pasas por periodos de brillantez a la vez que por errores de novato y peor, con la sensación de que no tienes ni idea de lo que estás haciendo.



En esta fase bipolar te sientes en parte un desarrollador a prueba de balas y un un principiante que va avanzando a base de ensayo y error. Cuanto más avanzas, más sensación tienes de que alguien se dará cuenta de que no sabes programar.

Aunque crees que ya deberías ser un programador, la distancia entre el código que escribes y el de un profesional nunca ha parecido estar más lejos.

¡Pero a pesar de todo lo conseguirás! Ya has superado el pico de la confusión y el desierto de la desesperación, estás en el momento de ser la caña, estás aprendiendo más que nunca y en un momento aprenderás las suficientes buenas prácticas que tus conocimientos de queso gruyere se convertirán en un conjunto de habilidades de un programador profesional.

Terminar esta fase dura más de lo que esperabas y siempre parece que estás tan cerca, pero no acabas de llegar, si eres lo suficientemente tenaz, convencerás a alguien para que te paga por seguir aprendiendo.



Cómo sobrevivir en cada fase

Erik Trautman nos da algunos tácticas para sobrevivir a cada una de estas fases y continuar en la dirección adecuada.


Sobrevivir a la luna de miel

En esta fase todo parece muy divertido, los tutoriales y los cursos de programación te ayudan facilitandote el trabajo para dejar los cimientos necesarios para las siguientes fases, pero tienes que tener dos cosas claras:

  1.  Busca, compara, y si encuentras un curso mejor, apuntate. Hay muchísimos recursos para aprender a programar gratis, formación oficial, turoriales de youtube, cursos online, escoge el que mejor se ajuste a tus necesidades, muchos están en inglés.


  2.  Una vez que escojas uno,trabaja con el hasta el final, no lo dejes a la mitad, de esta forma estarás listo para trabajar por ti solo. 

Sobrevivir a la cima de la confusión

Todo el mundo pasamos por esta fase, por que para aprender a nadar hay que tirarse al agua. No puedes pasarte la vida haciendo tutoriales, es hora de hacer tus propios proyectos.

  1. Programa en parejas, uno de los grandes beneficios es que será más fácil depurar y corregir errores.
  2. Lee código de proyectos open-source, Richard Stallman siempre incide en que para aprender aprogramar hay que escribir un montón de código y leer un montón de código. GitHub está lleno de proyectos open-source de los que aprender buenos patrones. Intenta entender el código y prueba a modificarlo.
  3. Proyectos mascota, Siempre deberías tener pequeños proyectos en mente que te interesen, ten siempre un pequeño proyecto en un tema que te motive y aprende a buscar errores y recursos a utilizar.

Sobrevivir al desierto de la desesperación

Una vez que te sientes cómo depurando, tu mayor problema será que conocimientos necesitas y como aprenderlos. Necesitas caminar por un camino seguro.

  1. Márcate un objetivo claro de lo que quieres conseguir cuando termines de aprender, no pierdas tiempo en cosas improductivas.
  2.  Encuentra un camino seguro que lleve directo a tus objetivos y asegúrate de que te llevarán a el. Aquí es cuando tienes que tener claro que lenguaje de programación es el idóneo, un buen sitio para ayudarte es este: http://carlcheo.com/startcoding
  3. Céntrate y evita distracciones: Si eres la clase de persona que le interesa programar, también estarás interesado en aprender todo tipo de cosas chulas. Cuando el código se pone difícil, tienes que ser capaz de centrarte en vez de distraerte con otras páginas, el móvil, juegos ... puede venirte bien un plugin para evitar perder tiempo en otras páginas: leechblock

Sobrevivir al  ascenso de ser la caña

Esta es una de las fases más difíciles, ya puedes programar pero aún no estás listo para trabajar. Para pasar esta fase necesitas tres cosas:

  1. Busca y sigue buenas prácticas de programación. Necesitas entender la diferencia entre una solución y la mejor solución. Las mejores prácticas marcan la diferencia entre un programa amateur y un código profesional.
  2. Pon en duda todo lo aprendido, por qué seguramente tengas algunas lagunas que ni sabías que tenías, tienes que encontrar y arreglar esas lagunas.
  3. Trabaja las habilidades menos divertidas que casi nunca utilizas pero son muy importantes para convertirte en un profesional. Estas incluyen las pruebas unitarias, la documentación, refactorización, estructuras de datos, repositorios, metodologías ágiles, arquitectura y despliegue... que son muy fáciles de saltar pero son fundamentales para un buen desarrollo.

La clave para completar estas tres cosas es tener retroalimentación. Es muy difícil pasar esta fase solos, y los estudiantes que no lo obtienen pueden producir código poco legible, modular y mantenible. Necesitas trabajar en con otras personas para poner a prueba tus conocimientos, hacer las preguntas adecuadas y forzarte a arreglar las lagunas que tienes.


1 comentario: