Ya sé programar… y ahora, ¿Qué lenguaje aprendo?

_“There are only two kinds of languages: the ones people complain about and the ones nobody uses.”_
> Bjarne Stroustrup

Reconócelo: has empezado a leer este artículo para tener una excusa (o lo que es lo mismo, para poder echarme la culpa) para empezar a estudiar esas cosas tan cool que escuchas en los Meetups, en los corrillos del trabajo, o en las ofertas de trabajo, como Go, Amber, TypeScript, CoffeeScript, R, Scala, Kotlin, Erlang, Elixir, D, Clojure, Haskell, Swift, CUDA, Rust… y quieres que encontrar aquí la respuesta.

¿Me dejo alguno que esperabas ver? Seguro que sí. Házmelo saber.

La elección de un lenguaje siempre ha sido uno de las dudas existenciales del desarrollador, tanto a la hora de aprender, como de enseñar, como de abordar un nuevo desarrollo. Nunca estamos conformes con lo que ya sabemos (y damos gracias de que así sea).

Que nadie se decepcione si no encuentra la respuesta escrita; en su lugar, nos haremos más preguntas, y que cada uno encuentre su respuesta suya. Empezaremos por éstas:

¿En algún momento de tu carrera le has recomendado a alguien que aprenda un lenguaje de programación?
¿De verdad piensas que yo podría hacerlo y tener la conciencia tranquila dentro de 10 años?

Que nadie espere que me moje, yo ya sufrí predicciones de lenguajes que iban a triunfar como Eiffel, LISP, Prolog, Smalltalk (ojo, que hay artículos por ahí hablando del renacer de Smalltalk), etc.

En mi primera entrada de FutureBites, Desarrollar productos software: ¿por qué hacemos lo que hacemos?, planteaba la evolución del desarrollo de software en base a tres preguntas: “qué” hacemos, “cómo” lo hacemos y “por qué” hacemos lo que hacemos. Y hoy empezamos con otra pregunta. ¿”Cuál”? Ni sueñes con encontrar la respuesta. Vamos a volver al “qué”, “cómo”, y, sobre todo, “por qué”.

¿Qué lenguajes tienes que considerar?

Además de lo que nos cuentan los compañeros, lo que vemos ofertas de trabajo, cursos o revistas especializadas, o lo que se responde en Quora, es posible encontrar índices objetivos como el ránking interactivo de la revista IEEE Spectrum para 2017, o el índice TIOBE que nos indican qué es lo que se usa, y cómo ha ido evolucionando recientemente (o, como veremos, no tan recientemente).

Ránking interactivo de IEEE Spectrum

La revista IEEE Spectrum analiza su ránking interactivo para 2017, obtenido mediante una ponderación de factores objetivos como el número de entradas nuevas en GitHub, las menciones en Twitter, las dudas en Stack Overflow, las publicaciones de ofertas de trabajo, etcétera, en un artículo genérico, en el que podemos ver pocas sorpresas en las primeras posiciones:

Quizás sea más significativo este otro  artículo orientado al mercado laboral publicado por el mismo autor en IEE Spectrum, en el que analiza la evolución reciente del mercado laboral para vaticinar la muerte de algunos clásicos (Ruby, VisualBasic, ActionScript) y de otros no tan clásicos (Clojure, Haskell). Pero aunque habla de subidas en las expectativa de lenguajes como CUDA y Rust, reconoce que su nicho es aún muy pequeño.

Índice TIOBE

En este artículo de TIOBE se van actualizando periódicamente las tendencias detectadas. A fecha de redacción de este artículo, la gráfica evolutiva de los 10 primeros lenguajes en los últimos años era ésta:

Empezamos con las malas noticias. Si esperabas ver algo novedoso lo siento, hoy no es tu día. Lo más freak que se deduce de estos datos es que el ensamblador ha subido desde 2016 (pero no es eso lo que esperabas leer, ¿verdad?).

Pero también hay buenas noticias, al menos si buscamos excusas para dejar lo conocido y buscar algo nuevo. Es fácil ver en la gráfica que la mayoría de las primeras espadas (Java, C, C++, C#, incluso PHP) están de capa caída, así que no está de más plantearse que quizás ha llegado el momento de aprender uno de esos lenguajes de nuestra lista cool. Si ampliamos con una tabla extraída de la misma página, para ver la evolución de los 20 primeros lenguajes en el último año:

¡¡… Y bien!! Ya empezamos a ver algunos de los lenguajes de la lista. Pero, a excepción de R, los otros están perdiendo comba, incluso Go ha sido adelantado…. por PL/SQL. Whattt?

Para cerrar el apartado sobre TIOBE, otra buena noticia acerca de los lenguajes que esperábamos ver: el artículo resalta que, por primera vez, Kotlin se sitúa entre los 50 primeros lenguajes, después de haber sido nombrado por Google lenguaje de programación oficial para Android.

¿Los primeros 50 lenguajes? ¿Pero qué me estás contando, cuántos lenguajes hay? Es fácil responder: muchos más de los que serían necesarios. Y muchos más de los que podríamos llegar a aprender en varias vidas.

¿Cómo debes elegir un lenguaje?

Hay muchos factores que nos pueden hacer elegir un lenguaje frente a otro. No voy a entrar a analizar lenguaje por lenguaje, pero sí voy a enumerar preguntas sobre factores técnicos y objetivos que deberás poner en la balanza a la hora de decidirte.

Hace ya muchos años que presumir de lo simple que es hacer un “Hello world” no es suficiente para ser el mejor lenguaje:

  • ¿Es un lenguaje de propósito general o específico?
  • ¿Es rápido de compilar y desplegar? ¿Y de ejecutar?
  • ¿Es multiplataforma?
  • ¿Soporta la concurrencia, y lo hace de una manera sencilla, legible, y segura?
  • ¿Tiene mecanismos para evitar errores de programación?
  • ¿Soporta los paradigmas imperativo, funcional, declarativo, orientado a objetos, reactivo, …?
  • ¿Tiene estándares de codificación que ayuden a la legibilidad, o da tanta libertad que tu código será ilegible para otro (o para tu yo futuro)?
  • ¿Tiene el soporte de la comunidad de desarrolladores?
  • ¿Es interpretado o compilado? ¿Quizás ambas cosas? ¿Compila a código nativo, a código intermedio, o a otro lenguaje?
  • ¿Es posible ejecutarlo en una consola?
  • ¿Está orientado a web, a móviles, a escritorio, a backend, a dispositivos embebidos?
  • ¿Requiere una máquina virtual?
  • ¿Es interoperable con código escrito en otros lenguajes?
  • ¿Tiene el soporte de frameworks y librerías estándar, nativas o portadas, que te permitan abordar cualquier necesidad futura?
  • ¿Es sencillo depurar y escribir tests automáticos?
  • ¿Cómo es la curva de aprendizaje?
  • ¿Qué grado de implantación tiene?

Recuerda que muchas de estas preguntas, aunque la mayoría son objetivas, no se responden con un sí o un no, con un blanco o un negro (como curiosidad, quizás no sepas que Java fue concebido como un lenguaje orientado a dispositivos embebidos, y mira dónde ha llegado), y  aunque lo sean, muchas veces las posibles respuestas no son ni mejores ni peores. Depende. Todo depende.

Pero no todo depende del lenguaje. Un lenguaje puede ser bueno para tus colegas, pero tu lenguaje puede ser otro:

  • ¿Se parece en sintaxis a lo que ya conoces, o de primeras te es completamente ilegible?
  • ¿Está soportado por tu entorno de desarrollo favorito?
  • ¿Tienes el tiempo suficiente para aprenderlo y consolidarlo?
  • Es más, ¿Vas a poder aplicarlo en proyectos o ideas reales, de forma que lo puedas consolidar?

¿Por qué quieres o debes aprender un lenguaje nuevo?

Pero antes… ¿De verdad piensas que tienes que aprender un nuevo lenguaje? Es más que posible que tu lenguaje favorito haya evolucionado desde que lo aprendiste y tenga muchas más capacidades de las que tenía cuando lo aprendiste, pero la presión del trabajo no te ha permitido actualizarte.

Sabes Java, pero ¿dominas todo lo que puedes hacer con Java 8, con frameworks como Spring o con librerías como ReactiveX?
Si lo tuyo es Javascript, ¿dominas alguno de los múltiples frameworks que lo iban a romper en 2017 pero serán sustituidos por otros en 2018?
Sea cual sea tu lenguaje, ¿Has aprendido a hacer testing correctamente?

Se me ocurren miles de cuestiones que hacerte. Si aun así estás empeñado en aprender un lenguaje nuevo, insisto… ¿Por qué quieres invertir una parte de tu tiempo -y de tus neuronas- en este esfuerzo? Si es porque tu jefe te lo ha dicho, no te hace falta este artículo.

  • Ves cada día ofertas de trabajo a las que optarías si superas ese lenguaje, y que están muy bien pagadas porque hay poca gente que lo conozca. Es posible que aciertes aprendiendo aquello que aún domina poca gente. ¿No estarás apostando tu vida a una moda pasajera?

  • Eres un adicto a LinkedIn y simplemente quieres llenar el capítulo de conocimientos, y que te los valide alguien a quien apenas conoces. ¿De verdad necesitas aprender un lenguaje para eso? Ponlo directamente. No serás el primero. O porque quieres añadir una pegatina más a la colección existente a la tapa del portátil.

  • Vas a iniciar un nuevo proyecto, y quieres que el proyecto tenga esa tecnología puntera de la que todo el mundo habla pero poca gente conoce, empezando por el lenguaje en el que está programado. Todo lo que has leído indica que tus tiempos de desarrollo se acortarán, que tu proyecto estará libre de fallos, además es compatible con lo que tenías antes, pero no te has parado a mucho más. ¿Has tenido en cuenta que tendrás que formar a tu gente, o que te costará (tiempo y dinero) encontrar expertos en este lenguaje, que lógicamente no serán tan expertos, y por tanto estás añadiendo aún más riesgo del que pensabas?

  • Quieres adentrarte en mundos o paradigmas en los que tu lenguaje actual flaquea. Te sientes limitado a la hora de hacer desarrollo móvil, o front, al analizar datos, al preparar pruebas, has mirado opciones, pero ninguna te convence., puedes hacer cosas, pero tu código se convierte en una maraña ilegible de boilerplate.

Si has llegado hasta aquí, ¡¡Enhorabuena!! Seguramente, en breve aprenderás un nuevo lenguaje. ¿Cuál de todos? Eso ya depende de ti. ¿Cuál es tu motivo? Recuerda que si sabes por qué lo haces, lo demás viene siempre por añadidura. Quizás si los creadores de lenguajes se hubieran parado a pensar por qué crear un nuevo lenguaje, no habría cientos (o miles) de opciones. Bienvenido a Babel. Y no, no hablo de este Babel.

Si tienes un momento, déjanos en un comentario cuál fue el último lenguaje que aprendiste, y por qué lo escogiste. Y si estás ya en ese proceso de aprendizaje, mejor. También puedes decirnos cuáles son tus impresiones sobre el lenguaje, su aprendizaje, y sobre cómo has mejorado aprendiéndolo.

 

Juan Perea

Hijo primero y padre después, estudiante primero y profesor después, freelance primero y empleado después. Siempre aprendiendo, siempre aplicando lo aprendido. Siempre pensando en la siguiente línea de código, en la siguiente funcionalidad, en el siguiente reto. Y siempre aprovecharé la tribuna para reivindicar la Programación como Arte, como Artesanía, con mayúsculas, ya que así la vivo.