Publicidad

Artículo

Aprendiendo a programar I – En busca de mi primer lenguaje

Aprendiendo a programar I – En busca de mi primer lenguaje
Fabrizio Ferri-Benedetti

Fabrizio Ferri-Benedetti

  • Actualizado:

Llevo años queriendo aprender a programar, pero nunca me he puesto a ello. En esta serie, voy a contarte mis peripecias como programador novel. En este primer episodio, empiezo por lo básico: la elección del primer lenguaje de programación.

Mi objetivo: crear una aplicación y publicarla. No aspiro a lanzar un software memorable, ni tampoco a hacer el próximo Minecraft, pero si al final consigo crear algo original y usable, me daré por satisfecho. ¿Me seguirás en esta aventura?

En busca de mi primer lenguaje

Encontrar el lenguaje de programación perfecto para uno es agotador. Hay centenares. Y al igual que ocurre con los idiomas, los hay que son muy populares y los hay que solo se “hablan” en entornos muy específicos.

Manuales de lenguajes de programación en una librería (fuente)

Cada lenguaje tiene sus peculiaridades, herramientas, manuales y gurús. Cada programador parece tener un lenguaje favorito para sus proyectos y otro que recomienda para aprender. Rara vez ambas elecciones suelen coincidir.

Pero yo quiero aprender a programar ya, y por eso me he puesto a pensar en qué busco en un lenguaje de programación y cuáles lenguajes me ofrecen esas cosas. Quiero compartir contigo mis humildes conclusiones.

¿Por qué un solo lenguaje para empezar?

Todos los lenguajes de programación, como todos los idiomas, tienen características únicas e historias fascinantes. Con algo de esfuerzo puedes hacer casi todo con cualquier lenguaje, pero no de la misma forma ni con la misma facilidad.

Mapa que muestra las relaciones entre lenguajes de programación (fuente)

Pero así como no dedicaría mi vida a aprender sanscrito o georgiano -que son idiomas preciosos-, tampoco dedicaría mi tiempo a aprender oscuros lenguajes de programación que solo se usan en universidades o bancos.

¿Qué debe tener el lenguaje ideal?

Para mí preguntarse qué lenguaje de programación es más difícil no tiene sentido, como tampoco lo tiene preguntarse qué idioma es más difícil. Es cierto que un lenguaje de programación puede ser complejo, pero eso no significa que sea más “difícil”.

Sí puede ocurrir que un lenguaje sea más difícil de leer, disponga de menos herramientas de aprendizaje o de una comunidad poco desarrollada. Esos son obstáculos objetivos.

Para mí, de cara a su aprendizaje, un lenguaje es atractivo si…

  • Tiene buena documentación, herramientas y usuarios
  • Tiene una sintaxis inteligible y atractiva
  • Permite obtener resultados de inmediato
  • Se puede usar literalmente para todo
  • Admite varios estilos de programación
  • Se lleva bien con otros lenguajes

Tiene documentación, herramientas y usuarios

Un lenguaje de programación puede ser muy potente, pero si no tiene documentación de calidad, apoyada por buenas herramientas y una comunidad de usuarios activa y colaboradora, será mucho más complicado aprenderlo.

La documentación no se reduce a las páginas de ayuda oficiales: también se compone de manuales y tutoriales producidos por docentes y programadores. ¿Hay libros sobre el lenguaje? Bien. ¿Son gratuitos y se distribuyen en formato electrónico? Mejor todavía.

Hay decenas de miles de manuales de programación (fuente)

En cuanto a las herramientas, hay que preguntarse si se proporcionan gratuitamente y para qué sistemas, cuáles entornos de desarrollo hay a disposición, y si existen recursos de aprendizaje interactivos, como juegos o aplicaciones web.

Popularidad de los lenguajes en 2010. Arriba a la derecha, los más populares (fuente)

La comunidad es el aspecto más complicado de evaluar. Depende mucho de las preferencias personales de cada uno. Una comunidad puede ser grande pero poco activa o poco amigable. O directamente poco enfocada en “evangelizar”.

Tiene una sintaxis inteligible y atractiva

Una forma de clasificar los lenguajes de programación es haciendo referencia a su nivel de abstracción, en lo mucho o poco que se parecen a un idioma natural escrito.

Un nivel “bajo” se refiere a que el lenguaje es más cercano a la máquina y a sus instrucciones, que son difíciles de leer. Un nivel “alto” es más cercano a los humanos.

El programa “Hola, mundo” en Ensamblador y Pascal; nótese la diferencia

Por lo general, aprendemos un idioma natural antes de aprender a programar, y también contamos con rudimentos de inglés. Casi todos los lenguajes de programación usan para sus instrucciones palabras tomadas del inglés.

De un lenguaje que aspire a ser usado para el aprendizaje de la programación espero un nivel de comprensibilidad alto, muy similar al de un idioma natural.

Permite obtener resultados de inmediato

Hacer es mejor que leer. El aprendizaje es más fácil y duradero si es interactivo: puedes empapar tu cerebro de teoría, pero si no puedes ver los resultados de inmediato, difícilmente te quedarás con lo aprendido.

Por lo general, es más fácil aprender un lenguaje de programación interpretado (escribes código y lo ejecutas en el acto) que un lenguaje compilado (escribes código y creas un ejecutable). Es una cuestión de inmediatez: aprendes algo y lo pruebas.

Lenguajes compilados vs. interpretados (fuente)

Al ser interpretado, un programa es más lento al ejecutarse, pero tiene otras propiedades que lo hacen interesante: es independiente del sistema operativo utilizado, su código es fácil de corregir y hay que preocuparse menos por el hardware.

Hay otro punto por el que un lenguaje interpretado es mejor para el aprendizaje: su código fuente es legible. Los programas compilados no se pueden inspeccionar en busca de ideas o para aprender cómo funcionan (a menos que hagas ingeniería inversa).

Se puede usar para (casi) todo

Hay lenguajes maravillosos para cosas tan concretas como las matemáticas (MATLAB), el dibujo (Logo), la consulta a bases de datos (SQL) o la síntesis de audio (CSound). En su campo, hacen un trabajo estupendo. Pero los sacas de ahí y son casi inútiles.

Aunque Logo pueda usarse para más cosas, su punto fuerte es el dibujo (fuente)

Creo que un lenguaje de programación de propósito general, como Java, C o Python, es más idóneo para el aprendizaje porque no te constriñe a un dominio específico. La abstracción de un lenguaje así es ideal para hacerse con las bases de la programación.

Eso no quiere decir que los lenguajes de propósito general sean mejores que los específicos. Hay, de hecho, quien se pregunta si seguirán siendo los más populares dentro de unos años, dada la potencia de los lenguajes específicos.

Opino que aprender programación con un lenguaje específico es viable, pero condiciona excesivamente el aprendizaje. Y cuando me refiero específico no hablo solo del campo de aplicación, sino también de cosas ya mencionadas, como el estilo.

Admite varios estilos de programación

En programación, el paradigma es la forma o estilo en que el código de los programas se redacta. Hoy en día se habla de cuatro paradigmas fundamentales: imperativo, funcional, lógico y orientado a objetos. No te asustes, son conceptos sencillos:

  • Imperativo: primero un comando, luego otro, como en una receta
  • Funcional: metes datos y salen resultados, como en una calculadora
  • Lógico: defines el problema (lo qué quieres), no cómo resolverlo
  • Orientado a objetos: datos y métodos están en objetos; es como el LEGO

Los debates sobre cuál de estos paradigmas es mejor son violentos e interminables. Y no tienen, en mi opinión, mucho sentido, ya que un estilo determinado es más eficaz para ciertas cosas y no para otras, y si un programador es hábil, deja de importar.

Los cuatro paradigmas fundamentales y sus lenguajes (fuente)

Para evitar problemas, lo ideal es aprender un lenguaje que admita más de un estilo de programación. Y los hay. Muchos de los lenguajes modernos son multiparadigma, esto es, admiten más de un paradigma de programación.

Se lleva bien con otros lenguajes

Los lenguajes de programación no se han creado en un vacío: la mayoría derivan de los primeros lenguajes, y muchos se organizan en familias. Casi todos nacieron con el objetivo de superar las limitaciones de sus antecesores.

Un fragmento del impresionante mapa de evolución de los lenguajes

Varios lenguajes modernos comparten características de múltiples familias. Así, por ejemplo, Ruby ha recibido influencias de C++, Perl, Smalltalk y Ada, mientras que C# cuenta con parientes tan ilustres como Java y Pascal.

Las similitudes entre lenguajes facilitan el aprendizaje por la cantidad de recursos que pueden ser compartidos entre ellos. Y al ser más sencillo pasar de uno a otro, aportan un extra de motivación a quien desee aprender a programar.

Una comparación rápida entre Java y Python; hay similitudes (fuente)

Por último, cuando hablo de relaciones no solo me refiero a la similitud con otros lenguajes. Un buen lenguaje de propósito general puede actuar como “pegamento” para unir código escrito en otros lenguajes. Es práctico. Es bueno.

Qué lenguajes he descartado

Teniendo en cuenta los criterios que he mencionado más arriba, empecé descartando lenguajes. Soy consciente de aquí voy a ganarme enemigos para toda la eternidad, y por ello voy a dejar claro que se trata de una selección personal y sesgada.

Los primeros en caer fueron varios centenares de lenguajes poco populares y los de bajo nivel, difíciles de leer o simplemente duros para un principiante (Ensamblador, C++). Son potentes en manos expertas, pero no muy aptos -creo- para el aprendizaje.

Luego fue el turno de los demasiado específicos (R, MATLAB, Scratch) y también de algunos que, aun siendo muy interesantes, carecen de recursos suficientes para el aprendizaje desde cero y/o no eran lo bastante populares (Go, D, Lua).

Lenguajes interesantes y populares, como Visual Basic .NET y C# estuvieron a punto de entrar en mi selección, pero se quedaron fuera por su dependencia del ecosistema de Microsoft, de .NET y de su Visual Studio. Quise una mayor libertad.

El mayor debate interno lo tuve con C y PHP. Con C me hallaba ante un lenguaje importantísimo, pero compilado y algo duro de leer. Con PHP, estaba ante otro lenguaje importante, pero usado casi en exclusiva para el desarrollo web.

Todos ellos son lenguajes fantásticos, pero no llegaron a pasar mi selección y los dejé fuera. Al final me quedé con cinco…

Los cinco candidatos

Aquí están. Son los lenguajes que, en mi opinión, son más aptos para el aprendizaje rápido, moderno y amigable de la programación. Cabe destacar que algunos son muy populares y están muy solicitados en el mercado laboral.

Ruby, la gema que viene de Japón

Ruby es el décimo lenguaje más popular (datos TIOBE de agosto 2013). Es un lenguaje interpretado de propósito general. Tiene parientes ilustres como Perl, Lisp y Eiffel, y admite varios paradigmas de programación (funcional, imperativo, orientado a objetos).

Hoy en día este lenguaje, oriundo de Japón y creado para superar las limitaciones de Python y Perl, se usa para todo, desde programación web hasta scripting en uno de los muchos sistemas operativos en los que está presente.

Recursos gratuitos para aprender Ruby

Python, el protegido de Google

Python es el octavo lenguaje más popular (datos TIOBE de agosto 2013). Es interpretado y compatible con varios paradigmas (orientado a objetos, imperativo, funcional). Pone un énfasis especial en la legibilidad.

Hoy en día Python es uno de los más usados en universidades y centros de enseñanza, y también en empresas como Google o Yahoo!. Su intérprete se distribuye con la mayoría de sabores de Linux.

Recursos gratuitos para aprender Python

JavaScript, el motor de la Web 2.0

JavaScript es el noveno lenguaje más popular (datos TIOBE de agosto 2013). Omnipresente en las webs modernas, deriva de Scheme y C, pero tiene su propia sintaxis. Es multiparadigma e interpretado.

¿Qué dije más arriba sobre lenguajes demasiado específicos? Sí, en efecto, JavaScript es fundamentalmente un lenguaje web. Pero se usa para cada vez más cosas, y los recursos de aprendizaje a disposición son muchísimos.

Recursos gratuitos para aprender JavaScript

Java, un clásico orientado a objetos

Java es el lenguaje más popular (datos TIOBE de agosto 2013). Es un clásico de la programación orientada a objetos, y aunque algunos lo critiquen, es uno de los lenguajes más usados en la enseñanza.

Su comunidad es enorme; su documentación, interminable. Para aprender programación orientada a objetos, es insuperable. Y aunque Java no sea el lenguaje más cool hoy en día, se puede hacer de todo con él. Por ejemplo, Minecraft.

Recursos gratuitos para aprender Java

Perl, la cinta adhesiva del shell

Perl es el undécimo lenguaje más popular (datos TIOBE de agosto 2013). Ha sido definido como “una navaja suiza”, un lenguaje imprescindible para la administración de sistemas.

Su sintaxis increíblemente flexible y tolerante -con la que se escribe incluso poesía– y su naturaleza pragmática hacen que Perl sea una de las elecciones favoritas para aprender a programar. Su enorme comunidad se articula alrededor de CPAN.

Recursos gratuitos para aprender Perl

Ha llegado el momento de elegir

Si quiero aprender a programar, tengo que ponerme a ello lo antes posible, y eso implica elegir mi primer lenguaje de programación. Es realmente difícil decantarse por una u otra opción. Quizá tú puedas ayudarme…

¿Con qué lenguaje debería empezar?

¡Haz clic aquí para leer la segunda parte!

Sígueme en Twitter: @remoquete

Fabrizio Ferri-Benedetti

Fabrizio Ferri-Benedetti

Lo último de Fabrizio Ferri-Benedetti

Directrices editoriales