Si quieres aprender a programar, no aprendas un lenguaje de programación.

En algún momento en tu carrera profesional, un estudiante va a pedirte consejo sobre que lenguaje de programación debería de aprender, quizá como debe de empezar en este mundo. La respuesta a esta pregunta es subjetiva, depende de cada programador. Obviamente, vas a responder recomendando aquello que te funciono, lo que te gusta o lo que dominas. Esto puede o no funcionarle a tu padawan, existe una alternativa que puedes recomendar y es: no aprender ningún lenguaje de programación, aunque parezca contradictorio, te explico el porqué:

Las personas no saben  lo que quieren.

Siempre que alguien inicia el aprendizaje de alguna habilidad no tiene expectativas concretas acerca de lo que quiere aprender. Regularmente, se parte de una idealización, de como se quiere estar, por ejemplo: tocar en un concierto, estar en el podio de ganadores de un evento,  programando videojuegos, etc.. Con una meta tan ambigua lo único que se consigue es frustración al dar los primeros pasos de bebé. Aquí surge un problema, no se tiene el suficiente conocimiento para aterrizar las metas, pero se tiene que empezar por algún sitio. Regresando al consejo de que aprender, recomendar un lenguaje y que le funcione a alguien o aprender por tu cuenta  se vuelve más un asunto de azar que de eficiencia.

La importancia de conocer la fotografía completa.

La fotografía completa es una imagen mental que te haces de todo lo que engloba un tema. La industria del desarrollo de software es enorme, con múltiples disciplinas y especialidades, cada una de estas  pueden requerir años de estudio. Obvio, alguien que se inicia no va a  llegar a este nivel de profundidad. Pero, si puede dar una revisión rápida y evaluar que si es de su agrado o que no. Te pondré el ejemplo más común y por el que muchos quieren aprender a programar, y es: programador de videojuegos. Desde diseño de niveles, mapeo de colisiones, mecánicas de juego, motores de partículas, programación de clientes, programador de lado del servidor, base de datos, inteligencia artificial, programación de bajo nivel con hardware, uso de componentes de terceros, motores de física y un sinfín de especialidades más. Entre más rico sea la fotografía que se arme, se tendrán mejores herramientas para decidir mejor. Y decidir consiste en…

Descartar todo aquello que no sirva para llegar a la meta.

Por lo general, conocer la fotografía completa no va a servir para saber que se quiere, sino todo lo contrario. Es vital identificar que no se quiere aprender, así se evita el desperdicio de darse cuenta de que algo no es de tu agrado. No vas a saber que quieres, al menos no aun. Solo vas a saber que no quieres y, por lo tanto, no merece esfuerzo de tu parte. Hablamos de recortar la fotografía completa en una o varias pequeñas. A menor tamaño menor dificultad y mayores posibilidades de éxito. Retomando el ejemplo de los videojuegos, quizá lo que le llamo la atención a tu pupilo es crear un servidor de juegos, o un juego que se ejecuta del lado del servidor como World of Warcrfat. Aún sigue siendo una fotografía muy grande, que puede partirse aún más.

La importancia de los proyectos mascota (Pet Projects).

La única manera efectiva en que se aprende de verdad es a través de  proyectos, por más pequeños e irrelevantes que estos sean son el único recurso real de aprendizaje. Los cursos son eminentemente teóricos y sirven para conocer herramientas, pasa a segundo término el dominio de estas. También existen tutoriales, estos tampoco pueden ser considerados un recurso completo. Los tutoriales ayudan a resolver un problema, solo uno. Si alguien arma su conocimiento únicamente usando tutoriales, lo único que conseguirá es pintar por números, como esos kits artísticos. El proyecto pone cara a cara el diseñador de la solución con sus decisiones, ver las consecuencias de tus errores es el mejor maestro. Iniciar un proyecto pequeño, pero ambicioso puede ser la mejor opción. Recapitulando, ya se sabe que no se quiere aprender, hay una idea general de lo que se quiere y existen las ganas de empezar el aprendizaje. El siguiente paso es:

Elegir las herramientas

Las herramientas que empleas para solucionar un problema deben de adaptarse  al problema, no al revés. Al elegir el lenguaje antes de llegar a la problemática lo único que se consigue es lisiar el proyecto. La elección no es fácil, es posible que sea equivocada y se tenga que desechar trabajo. Desechar código o lenguajes en el proceso de aprendizaje es perfectamente válido, el objetivo principal es llevar a término el proyecto, sea cual sea este. La elección de las herramientas es un proceso subjetivo, hay cierta química que se tiene con los lenguajes, siempre se debe de buscar sentirse cómodo con tu lenguaje, aun si no es el mejor, o el más popular, o existen mejores. Siempre que alguien te pida consejo acerca de que lenguaje aprender, es conveniente que te tomes un poco de tiempo en conocer el perfil de la persona antes de darle tu consejo.

Trabaja en proyectos con metas alcanzables.

Siempre debes de tener metas alcanzables en corto plazo al emprender el aprendizaje de un lenguaje. Al completar un trabajo recibes la satisfacción y la motivación para continuar. Por ejemplo, un objetivo que sea cubierto con una o dos semanas suena a algo alcanzable. Siempre aléjate de las metas a largo plazo, en esta etapa pueden provocar que te pierdas.

Conclusión, no hay caminos fáciles.

Cualquier camino que sigas o aconsejes tendrá obstáculos, no existe algo como un lenguaje fácil de aprender y fácil  de dominar en el que puedas ganar experiencia fácilmente. Lo más que puedes conseguir al aprender o aconsejar es que se reduzca el número de horas gastadas y el desperdicio de trabajo. Aun así, habrá que ensuciarse las manos.

Autor imagen: JDHancock

 

Gustavo Sánchez

Soy especialista en escribir software de calidad. Mediante el uso de marcos de trabajo, técnicas y automatización de procesos he podido reducir los costes operativos de los sistemas de la empresa. Sistemas confiables y adaptables producen clientes felices.

Site Footer