Aprender a programar es un desafío para muchos y hay varios factores que atentan para que sea fácil y placentero, y lo que es más, para que una vez que aprendemos pongamos manos a la obra y vayamos en la dirección que queremos.
En algunos aspectos es similar a manejar. Imaginemonos aprender a manejar leyendo. Una vez que terminamos el libro, nos subimos al auto y salimos a manejar entre las principales avenidas y en medio del tráfico. Luego tratamos estacionar en un espacio chico con bocinazos que nos apuran y todavia no entendiendo plenamente el sistema que nos dice como estacionar… o no lo tenemos.
Es muy comun en programacion, leer los libros, entender plenamente todo, ver que todo es claro y simple y cuando ponemos manos a la obra no sabemos por donde empezar.
Desventajas de aprender a programar con un amigo o compañero de trabajo
Acerca de que alguien nos enseñe, el principal problema es que la mayoría de los programadores no son docentes. Entonces cuando nos explican no tienen un orden lógico para que vayamos incorporando y afianzando conocimientos y experiencias, sino que nos cuentan lo que es relevante para ellos omitiendo muchas cosas que dan por obvias y ni mencionan porque las hacen automaticamente.
Es dificil que eviten el glosario técnico que ya conocen acumulándose en una maraña de confusión muchos términos de los que tenemos la promesa de que después nos van a explicar o que no son tan importantes, pero que mientras hablan entre ellos los usan todo el tiempo.
Otro problema, es que los ejemplos que usan para enseñar están improvisados y no siempre nos hacen arribar a las conclusiones a las que nos quieren llevar.
Ejemplo: Nos dicen : 1,2….. ¿cuál sigue?
Yo: Que se yo…. debe seguir el 3
El otro: Nooooooo…. no te das cuenta que cada número es el doble del anterior?… 1, 2, sigue el 4.
Ahhhhhhhhhhh
Este ejemplo se da en el caso de alguien que haya avanzado en su nivel de docencia y se digne a hacernos preguntas.
Hay otros casos…. donde no solo no entendemos lo nos está diciendo sino que empezamos a medir con el cronómetro cuánto logra hablar sin respirar, o cual es el «rate» de tèrminos tècnicos por segundo que menciona, y mucho menos cuando en el medio de esa sarta de ATL (Abreviaturas de Tres Letras)… incluye alguna broma o chiste.
Entonces llega en el momento en el que le decimos todo que sí para que esa tortura termine, y en silencio decidimos investigar por nosotros mismos y encontrar las respuestas antes de que nos haga una pregunta.
Aún en el caso de que sea consistente y bueno lo que nos enseñe, nos estaría mostrando «su visión», es decir que lo que llegamos a entender y conocer será igual o menos que lo que él nos enseña. Lo cual también es un límite bastante restrictivo.
Tambien hay que evaluar los objetivos del que explica. En muchos casos la personalidad asociada al ego con saber algo que para muchos resulta dificil, hace que se preparen lecciones, no para que entienda el oyente sino para que le oyente termine la presentación desistiendo de aprender y aplaudiendo al orador mientras a viva voz expresa mirando a todos a su alrededor «!!!! Cuánto Sabe!!!!!!»
Aprender programación leyendo libros
Los libros son similares al amigo que te enseña, nada más que el ego en este caso le permitió poner todo por escrito.
Es muy común que la falta de capacidad docente en la programación haga que en los libros comunmente se esté referenciando a términos que están en un capitulo posterior, haciendonos acumular un «yenga» de términos que nos hacen tener todas las neuronas con conexiones débiles y terminamos sin saber lo que sabemos y lo que no.
Para resolver el tema de los términos referenciados en capítulos posteriores hay varias técnicas.
- Leer 2 veces el libro
- La primera vez lo leemos relajados sin frustrarnos tanto por lo que se explicará a futuro.
- La segunda vez tratamos de entender todo
- Leer el índice primero y después el libro
- Otra variación es primero leer un resumen de todos los temas y luego el libro. Entonces más o menos no estaremos tan descolgados.
Otro problema que tienen los libros es que tienen mucha más información que la que necesitamos. Y mucha más información … me refiero al 91.3 % de más.
Entonces queremos construir la cucha para nuestro perro, y todavía nos faltan 3 capítulos de que tipo de materiales tenemos que usar para sostener las autopistas.
Y esto no es al grado de querer o no leerlo. Si intentáramos leerlo todo… en cuestión de tiempo llegaríamos al momento en que esa tecnología o lenguaje ya cambió de versión y es obsoleto.
Otra estrategia con los libros… es diferencia qué parte son explicaciones y cuales son referencias. Entonces habrá una parte que podemos saltear o leer sólo el índice y tenerlo ahí como un diccionario para cuando lo necesitemos. Y otra parte serán los pilares que nos permitirán conocer los por qué y las bases del paradigma que está resolviendo el lenguaje o la tecnología en cuestión.
Aprender de Tutorials
Los tutorials parecieran ser una mejor base de conocimiento. Combinan el conocimiento con la práctica. Pero nuevamente tienen sus desventajas.
Hay algunos tutorials que son muy largos, y perdemos el foco, mucho más cuando nos enseñan muchas cosas a la vez. En algunos tutorials que vi, te enseñan
- cómo empezar a programar
- cómo se instala el lenguaje y el IDE
- cómo usar las herramientas gráficas para diseñar la pantalla
- cómo acceder y conectar con la base de datos
- cómo instalar la aplicación en el celular.
Es común que los tutorials de Android y Mac sean de este estilo… pero no así separadito como lo mencioné. Sino que vas cargando strings, tipeando y dando clicks que contribuyen a las distintas opciones que mencioné pero sin ninguna pausa. Entonces das 2 clicks para crear la tabla, y arrastras el resultado al diseñador de pantallas, y luego le agregas una instrucción en el editor de texto y aprietas un botón y sale todo andando.
Y no entendés como replicar todo eso cuando lo tengas que hacer con un proyecto que quieras.
Para estos casos a veces lo que opté es hacer un tutorial paralelo separando.
¿Por qué hago esto? … ahhhhh para la base de datos
¿Por qué hago esto otro?…. ahhhhh para el editor de pantallas.
Y despues poder leer todo lo que hice para el editor de pantallas juntito… y todo lo que hice para la base de datos separado.
Y para colmo en estos tutorials combinados … de cada cosa de la que existen 5 o 7 opciones te mencionan sólo una sin indicar que hay otras.
Al revés que los libros que te mencionan muchas cosas que jamás vas a necesitar… los tutorials, te muestran una vista parcial sesgada parecida a la que te muestran tus compañeros.
Esto que mencioné es acerca de los tutorials «completos» combinados… del tipo «hacé una aplicación android en 15 pasos»
Tutorials para programar más específicos
Existen otros tutoriales que te muestran algo más particular… como acceder a las bases de datos, o como hacer upload de un archivo.
En ese caso te concentras en la solución particular que quieres lograr. Son muy útiles cuando necesitas agregar una característica específica a un proyecto en el que ya estás trabajando.
Pero tienen sus peligros si tomamos eso como base para hacer las aplicaciones sin otro contexto.
Cuando el tutorial te enseña en acceder a la base de datos desde una página web…. te está enseñando cómo efectuar la conexión. No está enseñando la arquitectura de una aplicación. Entonces , a los fines de la lección, la presentación que hace es correcta y da una respuesta al problema que propone resolver. Pero para una aplicación real tal vez no cumpla normas de estructura, seguridad, performance, mantenibilidad, o que sea fácil para trabajar en un equipo.
Entonces una aplicación «viva» y «usable» tiene muchas más cosas que las que presentan los tutorials específicos y puede que para construir la solución se requiera algo más sofisticado, o estructurado diferente de lo que esos tutorials presentan.
Aprender a programar modificando aplicaciones grandes
El principal problema que existe en todas las formas de aprender a programar, como señalé al principio, es cuando tenés la hoja en blanco. Ya terminaste de leer , ya terminaron de explicarte, ya seguiste el paso a paso … y ahora tenés que poner manos a la obra.
Y lo normal es no saber qué hacer.
Una de las formas es la de volver a hacer todo de nuevo pero esta vez con más cuidado, como que no estaré asintiendo a cada frase que lea o que escuche sino que trataré de incorporar cada paso, pensando en cómo lo haría.
Y aún cuando nos parezca super obvio o super fácil o trivial lo que estamos aprendiendo, poner manos a la obra e intentarlo.
¿Por qué hay que intentar? Porque es muy posible que no te estén contando todo.
¿Cuál es la diferencia entre fácil y difícil?
Podríamos buscar las dos palabras en el diccionario y tratar de ver la diferencia en su significado … sin embargo personalmente prefiero conocer el lenguaje por el uso, como hacen los niños para aprender a hablar.
A lo largo (o lo ancho… o lo profundo) de mi experiencia y de escuchar la palabra «fácil» y la palabra «difícil» en muchos contextos, y haciendo un cuidadoso análisis estadístico de su uso y su contexto. aprendí el significado real que la gente le da más allá de lo que digan los diccionarios.
- fácil: cuando lo tiene que hacer otro.
- difícil: cuando lo tengo que hacer yo.
Siempre que hay una tarea para asignarle a alguien encuentro que señalan que es re – faaaaaacil. (con la a alargada)…. pero si a la misma tarea le decís… no la voy a delegar, la vas a hacer vos. Apenas se la asignás te comentan todas las complicaciones y las dificultades que encierran.
Entonces cuando te explican te muestran que todo es fácil. Cuando te lo ponés a hacer, encontrás muchas cosas que no te contaron.
Tal vez te dicen… para instalar copia este archivo a esta carpeta y lo ejecutás.
Cuando lo intentás hacer, ves que no tenés permiso para escribir en esa carpeta, que cuando lo ejecutás no tiene acceso a internet y además te da un error que indica que tendrías que tener tal o cual versión de tal o cual library.
Entonces punto número uno…. poner manos a la obra y realizar cada acción que te proponen. Eso te enfrenta con un montón de cosas que no te cuentan, y te muestra otras cosas relacionadas que también deberías saber pero que está fuera del curso.
El hacer cosas es una fuente de información muy grande.
Ya instalar el entorno es la parte más compleja con la que te vas a enfrentar que está por afuera de lo que te enseñan, y posiblemente el factor por el que muchos consideran difícil la actividad y desisten.
Entonces montar un entorno en el que puedas armar una aplicación que alguien ejecute, es un gran paso para cualquier lenguaje de programación que quieras aprender. No tomese a la ligera ese paso.
Si ya sabés armar un entorno se te abre un puerta GIGANTE hacia aprender cualquier lenguaje.
La base o columna vertebral que propongo para aprender es bàsicamente:
- ir a algún repositorio de código fuente (github o sourceforge.net)
- Elegir un proyecto que sea wide -used –usado por muchas personas y que esté escrito en el lenguaje que quieres aprender
- Bajar el código fuente, compilarlo y ponerlo a funcionar
- Bajar las herramientas de desarrollo y tener el proyecto en tu entorno de desarrollo
- Modificar cosas pequeñas de ese proyecto y ver que tenga el efecto que quieres lograr
Pero como todas las otras formas… esta forma de aprendizaje también tiene sus desventajas. ¿ Cuánto tardo en «deducir» un lenguaje tocando partecitas y sacando conclusiones?
Otro problema que tiene es que hay cosas que voy a poder resolver «descrubriendolo» como hacemos con la naturaleza, pero sin conocer las bases fundamentales tanto a nivel concepto como todas las posibilidades que tenemos. A veces puede ser que resolvamos algo de una forma pero puede haber disponibles formas mucho mejores de solucionarlo. Con el mismo lenguaje podemos encontrar una innumerable diversidad de soluciones para muchos problemas.
Entonces ¿cuál es la forma que propongo?
La mejor forma de aprender a programar
Ahora llegó el momento de proponer la mejor forma para aprender a programar. Esta propuesta la hago para que el que quiere aprender sin haber asistido a una carrera universitaria. No digo tampoco que la carrera universitaria sea la mejor opción. Simplemente menciono que si tenés un estudio universitario, relacionado con Sistemas de la Información, tendrás tu propia base y preferencia y alternativas de cómo puedes aprender a programar, o introducirte a un lenguaje o un paradigma nuevo.
Hablando de esudiar , algo que recomiendo de manera muy enérgica es el paso 0: APRENDER INGLES.
Relato una experiencia … que más allá de que haya pasado hace algunos años, y que haya mucha información de valor en muchos idiosma, considero que sigue siendo práctica.
Estaba yo cursando una carrera universitaria, donde en varias materias nos daban apuntes en inglés. Algunos alumnos se unieron para establecer una queja con respecto a esas materias. Lo que los alumnos alegaban era:
EN EL PROGRAMA DE LA CARRERA NO ESTA INGLES COMO MATERIA. ENTONCES ES ILOGICO QUE NOS DEN APUNTES EN INGLES.
Hubo distintas respuestas pero más allá de lo adecuadas o certeras de las palabras consider muy práctica una afirmación que hizo uno de los profesores de esa carrera. TENES QUE SABER INGLES. SI NO SABES INGLES POR MAS QUE TE RECIBAS, NO VAS A SER UN BUEN PROFESIONAL.
Hay quien prefiere coincidir y quier prefiere ofenderse o quien prefiere buscar una lista de contraejemplos contra esa afirmacion mostrando que en un pueblito de ZirinZinGun existe un profesional que nunca supo nada de INGLES y descubrio el algoritmo para hacer que los numeros primos puedan darnos las claves de todas las tarejtas de credito futuras. Pero más allá de esos casos particulares considero muy práctica la afirmación. No solo por la calidad de la información disponible en inglés sino por la estructura del lenguaje misma. Es una gran ayuda leer bibliografía en ingles ( generalmente disponible y actualizada) por su precision y calidad en términos generales. Es una cuestión de estadística y volumen. Es cierto que para temas profundos es comun encontrar soluciones en ruso, chino e hindu. Pero a nivel volúmen la informacion original disponible en ingles sigue siendo mayoritaria. No digo que los que no saben ingles no comiencen programacion…. pero al menos empezar a familiarizarse de en principio alternar con texto en ingles.
Vuelvo al tema principal
Ya que todas las formas mencionadas tienen una desventaja…. qué forma de aprender es la mejor?
Simplemente una combinación de todas ellas.
Tal como hacia antes , ya desisti de leer los manuales de principio a fin. Las nuevas tecnologias llegaban antes de terminar de leer cualquier libro. Mucho más si en el transcurso de ir aprendiendo uno no puede parar de trabajar por dinero o de producir algun resultado.
Entonces la forma que propongo es
1.- Ir al sitio oficial del lenguaje y empezar a tener un pantallazo inicial
2.- Dar los primeros pasos con algunos tutorials sin tomarlos como la base para hacer las cosas sino la llave para ver al monstruo vivo.
3.- Bajarnos un programa con su codigo fuentes, el entorno y las herramientas y hacer vivir a Frankenstein en nuestras maquinas
si no lo logramos probar con un sistema mas simple.
Pero elegir programas muy comunmente usados sobre el tema que nos interese como contabilidad, musica, arte o lo que sea. El que sea de la industria que nos interesa nos permitira generarnos desafios
Mirar el programa y con lo que sabemos hasta ahora … modificar algo pequeño y ver como cambia. Al principi va a ser cambiar un título, luego un cálculo, luego agregar un reporte o cambiar una opción del menú.
Esta forma tiene una ventaja.
Si bien vemos la forma de hacer algo… no nos creemos que se hace asi… porque en el sistema lo vamos a ver hecho de otra forma. Y vamos a ver otras cosas que nos van a incitar a conocer otros aspectos teoricos.
Pero esos aspectos teoricos que vamos a ir viendo en mas detalle no surjen de un libro que nos menciona muchas cosas que no usamos. Sino que surje de verlo aplicado en un ambito que nos interesa.
Entonces asi podemos volver al punto 1, 2 y 3 y alternarlos todas las veces que qeueremos.
Va a haber momentos que estemos logrando cosas que con muchas dudas. Ese es el momento de repasar los temas teòricos, con la diferencia que leer de un tema teòrico despuès que intentamos resolver un problema o que vimos otras cosas, lo incorporaremos mucho más profundo, porque sabemos donde aplicarlo.
Y los amigos? También nos pueden explicar pero no en este contexto, siemper esas charlas tienen que ser con una cerveza, una playa , un café o una salida… descontracturados para completar cierta información pero no tamándolo como un manual de referencia completo.
Esta es mi manera propuesta para que aprendas a programar.
Aguardo tus comentarios y agradezco que lo hayas leido.