Siempre que alguien pregunta cuál es el mejor lenguaje para empezar a programar no faltan las opiniones desinformadas de muchos programadores y empiezan a recomendar lenguajes como C, C++, python, ruby, node.js (que ni es lenguaje de programación), php, java, entre otros; Sin tener contexto alguno de por qué alguien quiere aprender a programar.

Dado que ésta es una pregunta muy recurrente, y los malos consejos abundan, decidí escribir esta guía para ayudarte a elegir cuál es el mejor lenguaje de programación para empezar a programar basado en tus intereses y motivaciones personales.

Haz click en cualquiera de las siguientes áreas de interés para descubrir el lenguaje con el que debes iniciar:

  • Quiero aprender programar videojuegos web como los de Facebook.

    Lenguaje recomendado: Javascript.

    El futuro de los videojuegos web al estilo de Farmville es sin duda alguna Javascript. Durante el 2015, Javascript arrebató una gran pieza del mercado en el campo de desarrollo de videojuegos web. El dúo dinámico de HTML5 y Javascript cada día toma mas fuerza, y con la rápida aceptación de la plataforma Node.js que permite escribir JavaScript del lado del servidor; las casas desarrolladoras de videojuegos web están empezando a invertir fuertemente en éste lenguaje.

    Dado que el lenguaje tiene una penetración de mercado muy alta y virtualmente todos los dispositivos que se conectan al internet pueden correr javascript, toma mucho sentido desarrollar videojuegos en Javascript.

    Además, el lenguaje en sí mismo se presta para la programación de videojuegos. Verás, los videojuegos son programas muy complejos. Tradicionalmente, los programa se ejecutan secuencialmente, es decir, una instrucción después de la otra. Sin embargo, los videojuegos raramente son programas secuenciales, y los procesos que deben ejecutarse dependen de eventos.

    Javascript es un lenguaje multi-paradigma, y uno de los paradigmas de Javascript es el de programación dirigida por eventos (Event-driven programming). Eso quiere decir que en Javascript, dos bloques de código escritos uno después del otro, pueden ejecutarse independientemente uno del otro, o puede que no se ejecuten en lo absoluto. Todo depende de los eventos que el navegador produzca, y/o que el programa de Javascript sepa como responder ante esos eventos. Este paradigma es muy apropiado para el desarrollo de videojuegos, ya que en lugar de tener un sin fin de "if...else" anidados, simplemente se escriben bloques de código que deban ejecutarse cuando un evento arbitrario se produzca. Los frameworks en javascript para esta labor están alcanzando una madurez impresionante. Incluso existen simulaciones del primero juego de Doom escritas totalmente en Javascript.

    Si la programación de videojuegos para web es lo que te llama la atención, entonces enfoca tu esfuerzo en Javascript.

  • Quiero aprender a programar videojuegos para computadora/consolas.

    Lenguaje recomendado: C#

    C# es un buen lenguaje para que te inicies en la programación de videojuegos, existen librerías y frameworks muy maduros que te facilitarán el aprendizaje demasiado.

    No te dejes llevar por quienes te recomiendan que aprendas C++ A menos de que te especialices en el desarrollo de motores de gráficos o motores de inteligencia artificial, aprender C++ solo será una distracción para adentrarte al mundo de la programación de videojuegos. Antes de que empiecen a querer lincharme por no recomendar C++ recuerden que éste artículo se trata de aprender a programar. Eventualmente tendrás que aprender C++ si te vas a especializar en el desarrollo de videojuegos, pero C# tiene una curva de aprendizaje más amigable, y especialmente si utilizas frameworks como Unity o XNA, adentrarte al mundo de la programación de los videojuegos será sumamente sencillo. A diferencia de C++, C# es un lenguaje mucho más sencillo de aprender, y Visual Studio es un IDE bastante avanzado y potente. La cantidad de recursos online y en español de C# es inmesurable, por lo que no faltará alguien que te saque de dudas cuando ocurra algún problema.

  • Quiero aprender a programar aplicaciones móviles

    Lenguajes recomendados: Java, C# y Objective-C/Swift.

    Java es el lenguaje de programación predilecto para aplicaciones Android. A pesar de que existe soporte para Python, la mayoría de los trabajos que contratan para desarrollo en Android asumen que sabes programar en Java. La razón de porque Java se prefiere sobre Python para desarrollar aplicaciones Android es porque Android sufre un problema muy grande que se conoce como Fragmentación de dispositivos. Eso quiere decir que Android tiene un ecosistema muy grande de versiones en producción. Docenas de marcas de celulares y tables, cientos de diferentes resoluciones, diferente hardware, diferentes dispositivos. Por lo tanto utilizar un lenguaje como Java tiene sentido porque todo lo que necesitas para Java es la maquina virtual de Java y listo, no tienes que preocuparte del resto.

    Si vas a desarrollar apps de Windows, entonces tienes que aprender C#. A decir verdad, en éstos días si quieres desarrollar cualquier cosa que toque algún servicio de Microsoft, lo más seguro es que tengas que aprender C#. Es el lenguaje estándar de Microsoft.

    Si quieres aprender a desarrollar apps para iOS (iPhone/iPad), tienes que aprender Objective-C o Swift. Objective-C es C con clases, cualquier cosa que compile en C, compila en Objective-C. Sin embargo, Apple recientemente introdujo Swift. El nuevo lenguaje de programación para desarrollar en iOS. La sintaxis es mucho más sencilla que la de Objective-C. Swift es un lenguaje más moderno, a diferencia de Objective-C que solamente es un superset de C. No obstante, la gran mayoría de las librerías de Apple aun están escritas en Objective-C, y Apple le seguirá dando el soporte al lenguaje. Pero si eres nuevo en el mundo de las apps, y estás decidido en desarrollar para Apple, primero aprende Swift y después preocúpate de Objective-C. Swift es el futuro.

  • Quiero aprender a programar aplicaciones web.

    Lenguajes recomendados: PHP, Ruby o Javascript.

    Hay muchos detractores de PHP, pero la verdad es que PHP es un lenguaje muy maduro. Y a partir de la version 5.3, PHP es un lenguaje bastante bueno. No se puede ignorar el hecho de que existen 244 millones de sitios en el Internet que utilizan PHP. Y sabes que significa eso? Que no falta trabajo como programador en PHP. El stack de PHP ha sido estudiado y revisado hasta el cansancio. Ha sido optimizado hasta el límite y el desarrollo al core de PHP está mas activo que nunca. PHP tiene frameworks muy maduros y robustos como Zend o Symfony que hacen del desarrollo en PHP un verdadero placer. PHP por fin tiene un administrador de paquetes que vale la pena: Composer y finalmente la comunidad ha creado una convención para escribir código llamada PSR. Si quieres dedicarte profesionalmente al ambiente web, TIENES que aprender PHP.

    Por otro lado, en el ambiente web tenemos dos lenguajes que han ido agarrando mercado. Ruby y Javascript. Ruby se popularizó mucho por basecamp, ya que la empresa 37signals desarrolló el framework "Rails", que hizo que el desarrollo web en Ruby fuera extremadamente fácil. Posteriormente, la primera iteración de Twitter fue creada en Ruby, y fue ahí donde Ruby tomó mucha popularidad. A decir verdad, Ruby es un lenguaje muy fácil de aprender, en mi opinión es el lenguaje de programación más fácil de aprender. Esta muy bien diseñado, y es muy potente. Día con día hay mas posiciones que requieren programadores con experiencia en Ruby, con o sin Rails.

    En el caso de Javascript, si te dedicas al desarrollo web te vas a encontrar pedazos de Javascript en el front-end y en el back-end. Tradicionalmente Javascript había sido considerado un lenguaje que solamente se ejecutaba en el navegador de Internet, es decir un lenguaje del lado del cliente. Sin embargo con la creación de la plataforma Node.js, se introdujo la posibilidad de poder programar del lado del servidor con Javascript. Conforme Node.js fue madurando, fue ganando aceptación al nivel Enterprise, que es donde realmente se define que lenguajes se quedan y cuales se van. Paypal recientemente anunció que toda su plataforma será re-escrita en Node.js lo cual dice mucho acerca de la madurez y seriedad de Node.js Recientemente ha surgido el desarrollo de aplicaciones isomórficas en Javascript, pero ese tema lo trataremos en otro artículo. Al igual que Ruby, la oferta y demanda de programadores que sepan Node.js incrementa día con día.

  • Quiero aprender a "hackear".

    Lenguajes recomendados: Ninguno. Aprende ciencias de la computación primero.

    Es precisamente en ésta area donde leo las peores recomendaciones!

    Generalmente lo primero que un programador desinformado escupe es: C o C++. Incluso he escuchado gente que recomienda "Ensamblador". Para empezar, quiero aclarar que "Ensamblador" no es un lenguaje de programación, es la manera coloquial de referirse a un conjunto de lenguajes de programación de bajo nivel. La ensamblación es un proceso que consiste en traducir instrucciones en codigos operacionales para un determinado procesador. Asi que cualquier tarado que te diga "tienes que aprender Ensamblador" tienes mi permiso de llamarlo ignorante. Dato curioso: Pregúntale a alguien que dice saber Ensamblador para que procesador/arquitectura programa y observa como cambia su semblante de inmediato.

    De regreso a la pregunta, para ser "hacker" necesitas saber mucho más que programar. A decir verdad la programación es de las últimas cosas que un "hacker" necesita saber. Para ser hacker, necesitas tener un fundamento teórico muy sólido ya que los "hackers" generalmente no escriben programas, sino "abusan" programas. Antes de llegar a la programación, para ser "hacker" necesitas un conocimiento muy sólido de como funciona una computadora a un nivel muchísimo más bajo que el del lenguaje de programación. Primero enfócate en aprender como funciona la memoria y el procesador, aprende los diferentes tipos de arquitecturas, que set de instrucciones utilizan, familiarizate con los diferentes ciclos de ejecución. Aprende como funciona un sistema operativo, no solo Linux o Unix, sino cualquier sistema operativo. Hay llamados "hackers" que no entienden la diferencia entre SO, kernel y shell. A un nivel de red, tienes que saber que algoritmos utilizan los ruteadores y los switches, necesitas aprenderte las especificaciones de los diferentes protocolos de red, y no solamente memorizarlas, sino entenderlas.

    Necesitas aprenderte las capas del modelo OSI, y no solamente aprenderte los nombres, sino todo el stack y como va incrementando el payload de un paquete conforma atraviesa el stack. Todo eso es teoría, y observación. Naturalmente necesitarás aprender a utilizar algunas herramientas como debuggers, profilers, sniffers, etc... Aprender a ser "hacker" no es algo que lograrás en 1 o 2 años , es algo que te tomará, si te dedicas diligentemente, alrededor 5 años en aprender bien.

  • Soy biólogo/químico/físico/zapatero y necesito aprender a programar.

    Lenguaje recomendado: Python.

    Python es definitivamente donde necesitas empezar. No porque sea intrínsecamente mejor que los demás sino porque la comunidad científica que se ha construido alrededor de éste lenguaje es bastante grande. La razón es sencilla, Python provee un lenguaje de programación interpretado, que abstrae muchas de las complejidades de lenguajes de nivel mas bajo (como C o C++) y también provee una plataforma que puede integrarse fácilmente con otros programas, escritos en otros lenguajes de programación. Por lo tanto Python soluciona 2 problemas enormes que la comunidad científica tiene (tenía): la necesidad de tener un lenguaje de programación que permitiera manipular y controlar programas existentes, así como un lenguaje que funcionara como "pegamento" para combinar diferentes sistemas.

    Si lo tuyo es la ciencia y la investigación, sin duda alguna te recomiendo ampliamente que inicies con Python.