¿Que lenguaje de programación debería aprender?

No vamos a entrar en discusiones de preferencias personales ni juicios de valor sobre cuál lenguaje es mejor, ni más rápido, ni más exitoso. Esto por lo general solo conduce a fanatismos sin sentido. Sin embargo, para quién está pensando en aproximarse a la programación, sí que le puede interesar recibir información de quienes llevan algún tiempo en este oficio.

Para citar a Bjarne Stroustrup, solo hay dos tipos de lenguajes de programación: aquellos que todo el mundo critica y aquellos que nadie usa. Para complementar, la tasa de natalidad de lenguajes no parece atenuarse con el tiempo y cada persona y su gato quieren diseñar el lenguaje que unifique todos los demás.

«Un anillo para gobernarlos a todos…» (Fuente: Wikia)

Así quedamos con otro lenguaje más por unificar y ante tan singular panorama, una persona que apenas se aproxima al mundo del desarrollo de software se tiene que sentir abrumada.

Cada lenguaje de programación fue creado dentro de un contexto específico, para resolver una situación determinada o para el uso de un conjunto de personas que tenían necesidades e intereses comunes. La primera pregunta para encontrar el lenguaje deseado sería: ¿Qué me gustaría programar? y complementada con ¿Cuál lenguaje me daría más oportunidades?

Empecemos por casa: Si quisiera empezar en el mundo del análisis de datos y deep learning, escogería aprender Python. Hay muchas razones, entre ellas están la potencia de las librerías NumPy y Pandas, la facilidad del lenguaje para crear prototipos, el mercado tan amplio que se abre y la cantidad de empresas que lo utilizan. La librería de referencia para la inteligencia artificial en este momento es TensorFlow y aunque está escrita en C++ por cuestiones de desempeño, tiene más usuarios de Python que de cualquier otro lenguaje.

Ahora, si lo que me interesa es programar dispositivos para el internet de las cosas, desarrollar sistemas operativos o contribuir con los proyectos de código abierto más conocidos y utilizados, sin lugar a dudas tengo que aprender C/C++. Para lograrlo hay que sortear dos barreras fundamentales: la primera tiene que ver con la carga histórica que tienen a cuestas y la segunda con el volumen monumental de información que hay que conocer antes de poder ser productivos. No me puedo dejar desalentar por el desafío y la recompensa va a ser más grande cuanto más esfuerzo se requiere. Es como conocer bien la montaña que hay que escalar antes de arriesgarse a escalarla.

Cara sur del pico Yerupaja, Andes Peruanos (Fuente: Wikimedia)

Si quiero diseñar un sistema operativo desde cero, escogería Rust. Me brinda el poder y el desempeño del C pero me evita cometer errores de programación que me podrían causar problemas graves mas adelante. Los programadores que dominan el Rust tienen muy buena demanda en el mercado y sus salarios incrementan con rapidez.

Si quisiera programar una aplicación para un dispositivo móvil, aprendería Dart para poder usar Flutter. Facilita mucho el desarrollo de aplicaciones y permite generarlas para Android, iOS o para la web desde un mismo código fuente. Además falta poco para poder producir aplicaciones para Windows, Linux y MacOS de la misma forma. No es una capa adicional sobre el sistema operativo donde trabaja, sino que genera las estructuras necesarias para operar en cada sistema como si se programara con el lenguaje nativo. A pesar de estar muy nuevo a comparación de sus competidores, ya tiene librerías disponibles para casi cualquier necesidad. Después de haber programado interfaces de usuario en muchos lenguajes, incluyendo en Ensamblador, les puedo recomendar el Flutter a ojo cerrado porque tiene ciertos conceptos desde su diseño que permiten obtener resultados con facilidad y que serían más complejos de lograr en otros lenguajes. El apetito del mercado por programadores que conozcan Flutter está creciendo con rapidez y todo indica que continuará así.

Si quisiera desarrollar para la web debería comenzar por comprender bien HTML y el DOM. Después conocer el poder que se esconde en el CSS y, finalmente aprender bien Javascript. Y sobre todo, antes de aprender a usar la librería popular de turno. Estas van y vienen como las modas y existen gracias a la flexibilidad del Javascript. Hay muchísimas, algunas muy útiles como D3 y ThreeJS. Pero nos salimos del tema. Ahora, si quiero publicar páginas que se vean modernas, curadas y profesionales, debo usar WordPress. Es un tema que trasciende el aspecto técnico. WordPress creó un ecosistema que involucra las diferentes especialidades que se requieren para generar una página de impacto, incluyendo publicistas, diseñadores, redactores, traductores, influenciadores, entre otros. Aquí el desarrollo es solo un componente dentro de tantos y, tal vez, el menos determinante. Hay varias tecnologías superiores al WordPress desde un punto de vista técnico y de desempeño pero ninguna ha logrado una penetración del mercado que se acerque siquiera, ni han generado todo el ecosistema que se mueve alrededor del WordPress.

Para el caso de un servicio web, como lo puede ser una API REST o GraphQL, aprendería Go. Las gorutinas facilitan la programación paralela para usar con eficiencia los procesadores con varios cores. Es un lenguaje que siendo más fácil de aprender que el C/C++ y que el Rust les compite en desempeño. Cuenta con muchas librerías, con un ambiente de desarrollo que simplifica bastante la compilación y el mantenimiento del proyecto, tiene una gran demanda en el mercado y los salarios se encuentran entre los mejores para el oficio de desarrollador. Pero si ya aprendí Javascript, una alternativa es usar Vert.x web con GraalVM. Gran parte del desarrollo necesario para una API confiable y rápida ya se encuentra lista para su uso.

© Upper Darby Police Dept.
Controlador de vuelo (Fuente: jobmail.co.za)

Si tengo que desarrollar un sistema crítico, que requiera una confiabilidad absoluta, que no pueda parar nunca, ni siquiera para actualizarse o que se pueda actualizar en caliente sin perder los datos, que sea capaz de reponerse a los fallos, incluyendo daños de equipos, entonces tengo que aprender Elixir para poder utilizar OTP. Elixir es un lenguaje creado sobre la máquina virtual de Erlang, el lenguaje a su vez creado por Ericsson en los años 80 para soportar la red telefónica interconectada internacional. OTP es la plataforma que contiene el código que permite continuar operando a pesar de un daño o que permite actualizar parte del código sin dejar de operar el sistema. Es decir, la gran parte del trabajo y de la complejidad se encuentra resuelta y disponible para usar. Y es un código maduro, endurecido por el uso, que ha probado su desempeño y confiabilidad durante muchos años.

Hay muchos otros campos para desempeñarse en el desarrollo de software, pero creo haber abarcado los más populares y que tienen más demanda en el mercado, con excepción de las bases de datos, pero estas merecen un artículo aparte. Si no mencioné un lenguaje en particular, no significa que no vale la pena aprenderlo o que no sea una opción viable para realizar el trabajo. Hay muchos listados de programas con clasificación de popularidad y de cómo esta cambia con el tiempo. Además, hay proyectos que ya poseen tanto código en un lenguaje específico que cambiarlo es inviable por más ventajas que un lenguaje nuevo posea.

Lo que sí puedo asegurarles, por las canas de mi cabeza, es que con los lenguajes mencionados se va a poder cumplir con la misión requerida, con menos esfuerzo y esperemos, con una mejor retribución que con un lenguaje alternativo.

Una nota final: este es un campo que está en permanente evolución y por lo tanto, este artículo estará reflejando estos cambios pero manteniendo el mismo espíritu: una guía práctica para quienes se acercan a la programación por primera vez.

chevron_left
chevron_right

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Comentario
Nombre
Correo electrónico
Web