De una vez advierto que éste es un artículo subjetivo, existen muchísimas opiniones al respecto. Un millón de personas pueden estar de acuerdo conmigo, y otro millón pueden pensar que estoy completamente equivocado.
Sin más preámbulo, en mi opinión éstos son los lenguajes más fáciles aprender ordenados por nivel de dificultad ascendiente (del más fácil al menos fácil)
-
Python
Una de las características del lenguaje de Python es que está diseñado bajo la premisa que declaraciones explícitas, siempre son mejores que declaraciones implícitas. Eso quiere decir que todos los programas en Python son muy claros al momento de comunicar al programador exactamente lo que está sucediendo en el programa, sin necesidad de escribir comentarios.
Muchas universidades anglosajonas utilizan Python para enseñar programación, debido a que leer programas en Python es -casi- como leer oraciones en Inglés. El hecho de que el lenguaje de programación obligue a los a programadores a indentar el código, hace que los programas se vean organizados y poder detectar inmediatamente que conjunto de instrucciones son independientes de otro conjunto de instrucciones.
Otra de las filosofías de Python es que idealmente debe haber una, y solamente una, manera de hacer las cosas. Eso es una gran ventaja para las personas que van iniciando, ya que no hay lugar para ambigüedades del lenguaje.
-
Ruby
En mi opinión, Ruby es el lenguaje más cercano al lenguaje humano y es precisamente lo que lo hace fácil de aprender. Es un lenguaje increíblemente consistente con su diseño, que con tan solo invertir unos cuantos días utilizando lenguaje, notarás de inmediato que ya recuerdas un número considerable de funciones y palabras especiales del lenguaje, sin necesidad de estar viendo la documentación. Es un lenguaje muy natural y amigable para los principiantes.
Además de ser un lenguaje muy intuitivo, Ruby literalmente tomó lo mejor de un número diverso de lenguajes de programación muy robustos (Perl, Smalltalk, LISP), mejoró la semántica del lenguaje y Yukihiro Matsumoto (creador de Ruby) terminó creando un lenguaje de programación increíblemente poderoso y fácil de aprender.
Sin embargo, Ruby fue creado con la "felicidad" del programador en mente. Eso quiere decir que desde sus inicios se concibió como un lenguaje de programación diseñado para personas que ya sabían programar. Ruby es un lenguaje multi-paradigma; eso quiere decir que provee soporte para objetos, programación procedural, programación funcional, etc. Sin embargo, casi todo en Ruby es un objeto, así que una persona totalmente nueva al mundo de la programación puede llegar a confundirse un poco con todo el lingo que la programación orientada a objetos acarrea.
-
JavaScript
Javascript es un lenguaje relativamente sencillo de aprender. A pesar de que muchos detractores del lenguaje tienen muy buenos argumentos acerca del diseño del lenguaje, en mi opinión sigo pensando que es un lenguaje fácil de aprender y es uno de los lenguajes de programación que te ofrece gratificación inmediata.
Con gratificación inmediata me refiero a que Javascript fue inicialmente concebido como un lenguaje de programación para construir sitios web interactivos. Por lo tanto, en un tiempo relativamente corto puedes empezar a crear proyectos interesantes (y útiles) y empezaras a resolver problemas reales -casi- de inmediato. A diferencia de otros lenguajes, como Python o Ruby, donde generalmente empiezas a escribir los típicos programas de sumar 2 números, u ordenar una lista. En Javascript, generalmente empiezas a escribir programas que realicen animaciones, agregar efectos especiales, crear páginas web interactivas, etc.
La desventaja de Javascript es que es un lenguaje cuyo modelo de ejecución es complicado de entender. Javascript es un lenguaje dirigido por eventos, eso quiere decir que reacciona a las cosas que suceden dentro del contexto del lenguaje. Por ejemplo en Python o Ruby, las instrucciones se ejecutan una después de otra; mientras que en Javascript ese escenario no es siempre cierto. Hay veces que tienes dos bloques de código contiguos, pero el segundo bloque se ejecuta antes que el primero, o simple y sencillamente nunca se ejecuta. Por lo que resulta frustrante para un principiante, no alcanzar a comprender exactamente que está sucediendo en sus programas.
Por otra parte, Javascript tiene ésta característica de que no todos los navegadores de Internet interpretan el lenguaje de la misma manera. Es decir que el Javascript que Internet Explorer entiende, no es necesariamente el mismo Javascript que Firefox interpreta. Éste escenario puede causar mucha confusión a los principiantes y puede conducir a abandonar la programación debido a la frustración.
Para agregar aún mas confusión al asunto de Javascript, recientemente se desarrolló una plataforma llamada Node.js, o node por brevedad. Node no es un lenguaje de programación. El lenguaje de programación es Javascript.
Históricamente Javascript había sido un lenguaje de programación exclusivo del navegador de Internet. Sin embargo un grupo de programadores vieron los beneficios de un lenguaje de programación como Javascript para realizar tareas del lado del servidor de manera super rápida y eficiente, y decidieron crear una plataforma que permitiera ejecutar Javascript del lado del servidor; y fue así como nació Node.js
A pesar de que el Javascript de Node.js, sintácticamente es el mismo que el Javascript del navegador de Internet; los programas escritos para Node.js no son compatibles con los programas escrito para los navegadores de internet y viceversa.
Sin embargo, sin importar el "sabor" de Javascript escojas. Si planeas dedicarte al mundo del desarrollo web, invariablemente, tendrás que aprender Javascript.
-
PHP
PHP es un lenguaje con muchos detractores y con justa razón; la inconsistencia del lenguaje de programación es increíblemente frustrante. Si bien la curva de aprendizaje es relativamente baja, y también es uno de esos lenguajes de gratificación inmediata (obtener resultados y resolver problemas reales relativamente rápido), la sintaxis del lenguaje tiende a ser algo complicada y a veces confusa para quien va iniciando en programación.
Por ejemplo, en PHP todas las variables tienen que iniciar con un símbolo de $ (símbolo de dólar) y cada línea tiene que terminar con un ; (punto y coma).
Utilizar comillas simples ('), no es lo mismo que utilizar doble comillas (").
Cuando quieres unir dos cadenas de texto tienes que utilizar un punto (.), pero si quieres sumar dos números tienes que utilizar un símbolo de más (+).
La inconsistencia en la nomenclatura de las funciones, hace que el lenguaje sea poco intuitivo. Por ejemplo, existen funciones para determinar si una variable es de cierto tipo de dato y esas funciones vienen de la forma is_int, is_str, is_float. Sin embargo, si quieres determinar si una variable existe el nombre de la función es isset (no hay guión bajo), y ejemplos como ese abundan en el lenguaje, lo cual hace la memorización del lenguaje más difícil.
Sin embargo, el lenguaje en sí, no es tan malo como los detractores suelen pintarlo, y una vez que te acostumbras a las inconsistencias del lenguaje, PHP es relativamente simple y poderoso para construir aplicaciones web robustas. Por otra parte, no puedes ignorar que existen más de 200 millones de sitios en Internet que están escritos en PHP. Eso quiere decir que PHP tiene un mercado de trabajo bastante grande.
-
Java
Hasta ahora hemos visto lenguajes de tipado débil; eso quiere decir que el interprete del lenguaje de programación no obliga al programador a declarar si una variable es numérica o es una cadena de texto.
Java es un lenguaje de tipado fuerte; eso quiere decir que Java obliga al programador a declarar el tipo de dato que una variable va a contener, antes de poder crear el programa.
Además Java es por diseño un lenguaje orientado a objetos al 100%. Es decir que absolutamente todo lo que haces en Java tiene que ser declarado dentro de una clase, misma cosa que hace que el programador tenga que aprender todo lo relacionado con programación orientada a objetos, para poder entender exactamente cómo se ejecutan los programas en Java.
El lenguaje en sí no es difícil de entender, es un lenguaje muy maduro y es otro de los lenguajes de gratificación inmediata. Uno inmediatamente puede empezar a escribir programas portables que pueden ejecutarse virtualmente en cualquier computadora del mundo, dispositivos móviles o embebidos. Uno puede crear aplicaciones de escritorio relativamente rápido, y un montón de cosas más.
Uno de las cosas que un principiante en Java tiene que entender, es que los programas en Java tienen que pasar por un proceso de compilación que los programas en Python, Ruby, PHP, Javascript generalmente no pasan. Es decir que cuando terminas un proyecto en Java, por un lado tienes el código fuente de tu programa y por el otro tienes un archivo JAR que es todo el código de tu programa, compilado en bytecode JVM listo para ser ejecutado por la máquina virtual de Java (JVM).
-
C/C++
C y C++ son dos lenguajes de programación diferentes, pero para fines prácticos mucha gente se refiere a ellos como C/C++.
C es un lenguaje de programación inventado por Dennis Ritchie y Ken Thompson en 1972; C++ es un lenguaje de programación inventado por Bjarne Stroustrup en 1983.
Ambos lenguajes han inspirado el diseño y desarrollo de un sin número de lenguajes de programación. Por ejemplo Java y PHP tienen han adoptado prácticas de éstos lenguajes para incorporarlas directamente en su diseño. Por ejemplo, el uso del punto y coma para delimitar el fin de las instrucciones o el uso de llaves ({ }) para delimitar bloques de código.
Y los menciono al final de ésta lista no porque sean difíciles de aprender -- después de todo yo aprendí a programar en C cuando tenía 12 años. Sin embargo, son relativamente más difíciles de aprender que Python.
Para empezar ambos lenguajes son de tipado fuerte, por lo que los compiladores obligan a los programadores a declarar el tipo de variables que van a utilizar en sus programas. Dado que ambos lenguajes de programación ofrecen mecanismos para controlar la computadora directamente, el programador idealmente tiene que saber como funciona una computadora en su totalidad para poder sacar provecho a C/C++.
Por ejemplo, es muy útil saber a la perfección cómo funciona la memoria RAM, de tal manera que puedas hacer un uso eficiente de los punteros en C. Los punteros en C sirven para leer y escribir directamente a la memoria de tu computadora, lo cual es frecuentemente un arma de dos filos.
Sin embargo, en mi opinión pienso que cualquier persona que quiera dedicarse a la Ingeniería de Software profesionalmente, en algún punto de su carrera tiene que escribir programas en C. Si bien no de tiempo completo, al menos no ignorar la existencia y el funcionamiento de éstos lenguajes. A pesar de que ambos lenguajes son los padres de muchos lenguajes modernos, aún hay mucho que aprender de éstas maravillosas piezas de tecnología.