¿Cuales son los mejores lenguajes de programación? ¿Cuales conviene estudiar, y cuales son los más importantes? Clasificación de los lenguajes según su paradigma o propósito. Su demanda laboral, los mejores para Web, aplicaciones de escritorio, apps para dispositivos móviles, …

  • Lo mejores lenguajes de programación
    • Lenguajes multipropósito
    • Lenguajes para desarrollo Web
  • Principales lenguajes de programación
    • Lenguaje de marcado HTML
    • CSS (Cascade Style Sheet)
    • JavaScript y NodeJs
    • Python
    • PHP
    • C/C++
    • Java
  • Historia de los lenguajes de programación
  • Desarrollo para dispositivos móviles.

La presente lista sobre los mejores lenguajes de programación no es en absoluto exhaustiva. Así mismo, las recomendaciones aquí presentes son solo opiniones del autor. Existen muchos lenguajes excelentes y combinaciones entre estos. Ello dificulta la comparativa y a veces simplemente un detalle hace que nos decantemos por un lenguaje concreto. Como ejemplo de esto: estudiar la plataforma .NET de Micorosoft en lugar de los lenguajes propuestos aquí, ofrece un futuro brillante y muchas posibilidades de inserción laboral. El lenguaje C# es simple y eficaz ¿La diferencia? Opino que los lenguajes libres de Microsoft tienen más “de Microsoft” que de “libres”. Algo similar ocurre con las bases de datos MySQL y la plataforma Java desde su adquisición por parte de la empresa Oracle.

Los mejores lenguajes de programación

Bajo mi punto de vista y el de muchos expertos, un desarrollador, siempre y cuando no se encuentre restringido por los lenguajes que demanda la empresa para la que trabaja (a veces no hay elección), debería aprender los lenguajes:

  • Multipropósito
    • Python, como lenguaje multipropósito, para la mayoría de tareas a alto nivel.
    • C++. como el complemento perfecto de Python, cuando se requiera actuar a bajo nivel, ampliar características de Python, …
  • Desarrollo web y aplicaciones para dispositivos móviles.
    • HTML. Conforma la estructura principal de un sitio/página web.
    • CSS. Confiere a un sitio web los estilos/formatos: colores, formas, tamaños, …
    • JavaScript. Programación web frontend (lado cliente).

A lo largo del artículo desarrollo los motivos que conducen a esta conclusión, analizo algunos lenguajes y realizo una comparación de cada uno de estos con Python.

Principales lenguajes de programación actuales

Python

Python es un lenguaje de programación libre, multipropósito, multiparadigma, interpretado, de alto nivel con tipado dinámico fuerte, orientado a objetos, dotado de gestión automática de recursos y de sistema de gestión de excepciones. Soporta la programación imperativa e incorpora capacidades de programación funcional.

Python es además: Rápido, con un rendimiento excelente y portable.

  • Enorme versatilidad y flexibilidad: Tiene una biblioteca estándar impresionante. Se usa en desarrollo web; inteligencia artificial; aplicaciones de escritorio (con interfaz gráfica en combinación con QT, si es necesario). Puede interactuar con otros lenguajes, con bases de datos, directorios, archivos de datos, sistema de archivos, Internet, … Permite una gran libertad de acción a los desarrolladores.
  • Multiparadigma: soporta metaprogramación , procedural, funcional, imperativa, de objetos y de scripting.
  • Multiplatafoma. Corre en muchas variantes Unix, en Mac, y en Windows desdw W2000.
  • Diseñado para ser simple: su sintaxis clara es relativamente próxima a un lenguaje natural. Es fácil por tanto aprender, escribir y leer código Python.

Excelente biblioteca estándar y excelentes librerías científicas que, al igual que Python, son gratuitas y libres.

Diferentes gobiernos europeos aconsejan Python para el aprendizaje de algoritmos.

Python se creó en un momento en el que los lenguajes de referencia ya existían. Esto ha propiciado que Python aproveche esta experiencia para ofrecer un lenguaje mejorado.

Pero sobre todo, Python es un lenguaje de futuro.

El autor Sébastien Chazallet, experto en Python entre otros, nos da una buena comparativa entre lenguajes en su libro “Phyton 3 – Los fundametnos del lenguaje”, con varias citas interesantes:

“Lo único que hace que Python no sea el lenguaje prioritario, es el hecho de que no está lo suficientemente extendido.”

“Python no preconiza la superioridad del objeto, ni busca impedir la programación imperativa para obligar a que se utilicen objetos simplemente porque el objeto sea un enfoque más moderno o más de moda.”

Sitio oficial de Python | Documentación Python | Introducción a Python |

Perl

Perl es una buena alternativa a los lenguajes Shell.

Las ventajas de Python sobre Perl:

  • Python cubre un perímetro funcional mucho más amplio que Perl, con un rendimiento similar. Esto nos lleva de nuevo a uno de las máximas de este artículo: “cubre todos los dominios de la programación aprendiendo un solo lenguaje, o bien el  menor número de estos”.
  • Más y mejor documentación y comunidad más grande.
  • Mucho más extensible.

Lenguaje de marcado HTML

No es realmente un lenguaje de programacición, sino de marcado. Proporciona la estructura/contenido principal de un sitio web. Junto con CSS (estilos) y JavaScript (programación) forman los 3 pilares básicos del desarrollo web. Por el obligado uso de estos 3 lenguajes en el ámbito web y sus particularidades, no tiene sentido la comparación con otros.

JavaScript

Lenguaje de programación web en el lado cliente, lo que significa que se ejecuta en el navegador web. Proporciona:

  • Interacción con el usuario, como en la validación de un formulario.
  • Efectos, como animaciones, carruseles de imágenes, …

La total supremacía de JavaScript para la programación web en el lado cliente, hace incluso que parezca insensato recomendar otro lenguaje, al menos a corto plazo. No obstante, puede ser interesante echar un vistazo a la implementación de Python para la programación web del lado del cliente, llamada Brython, que aunque creo aun no muy madura, veremos como progresa.

Una vez aprendidos los conceptos básicos de JavaScript, conviene empezar a usar un librería como jQuery para agilizar el trabajo.

NodeJs

NodeJS es JavaScript en el lado servidor, o backend. Es, por tanto, alternativa a PHP o Phyton.

PHP

PHP (acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de programación libre, multipropósito aunque originalmente diseñado para el desarrollo web, interpretado y orientado a objetos.

Igual que ocurre con Java, existe una gran demanda laboral de programadores PHP, pero también existe muchísima más oferta de programadores que dominan PHP. PHP es, además, es peor pagado que Python.

Cada vez más equipos y desarrolladores abandonan PHP en beneficio de Python.

En PHP se agrega una “semántica de objetos” que permite a los desarrolladores escribir de forma orientada a objetos, simulando este paradigma. En otros lenguajes como Python, C++ o Java, el paradigma orientado a objetos está en el núcleo del lenguaje.

Ventajas de PHP:

  • Gran implantación. Muchas ofertas de trabajo.
  • Gran compatibilidad con prácticamente todos los hostings.
  • Es el lenguaje más utilizado para desarrollo web. CMS (gestores de contenido) tan populares como WordPress y Drupal, y e-comerces como Magento, están hechos en PHP, por lo que si se tiene planteado utilizar uno de estos, este hecho debe tenerse presente. Una alternativa a los CMS para desarrollo web son los frameworks Python, el más popular es Django.

Ventajas de Python:

  • A día de hoy, las posibilidades que ofrece PHP son reducidas, a causa de importantes problemas de seguridad, aunque el lenguaje ha evolucionado.
  • La sintaxis de PHP es poco elegante y menos clara que la de Python. PHP requiere más líneas de código para realizar la misma tarea.
  • El desarrollo en Python es de dos a tres veces más rápido que uno equivalente en PHP.
  • Mejor rendimiento, y el código de una aplicación Python es interpretado y se compila únicamente con el arranque del servidor, y no con cada consulta.
  • Frameworks de Pyton para el desarrollo web excepcionales, y modulares. Python, como PHP, puede alojarse en Apache.
  • El paradigma de orientación a objetos de Python es diferente y mucho más rico.

C/C++

C++ es un lenguaje multipropósito, orientado a objetos, compilado y con características de bajo y medio nivel (por ello muy potente).

C++ es una referencia para cualquier lenguaje. Los sistemas operativos actuales están escritos en C y/o C++.

Cabe destacar, además:

  • C++ es el lenguaje muy utilizado en la creación de SOs, videojuegos, y cualquier otro software donde se requiera de un enorme rendimiento, gracias a sus características de bajo nivel.
  • Dispone de una librería estandar impresionante.
  • La posibilidad de agregar funcionalidades ha permitido mejoras en el rendimiento.

Añado que muchos lenguajes existentes están inspirados en C, por lo que su sintaxis es muy parecida.

Como posible parte negativa, se ha criticado de C++ el hecho de no disponer de recolector de basura, como sí lo tiene, p. ej. Java y smalltalk.

C vs C++ ¿Cual elegir?

Para mí la respuesta es clara: C++.

Aunque C y C++ puedan considerarse dos lenguajes independientes, lo cierto es que C es un sobconjunto de C++. C++ amplia C y le añade mejoras (a pesar de lo que digan los de la vieja escuela, fans de C), y le proporciona la tecnología de objetos, tendencia clave hoy en día.

Un número considerable de expertos recomiendan aprender directamente C++, en lugar de empezar por C. Coincido en ello. Existen algunas características de C++ que por practicidad dejan obsoletas e innecesarias otras de C.

C++ y Python

Una comparación tiene sentido cuando se comparan lenguajes de características similares. Python es interpretado, de alto nivel con tipado dinámico. C es compilado, de bajo nivel con tipado estático. Como consecuencia lógica de esto el desarrollo en Python es 10 veces más rápido que en C/C++, pero el rendimiento de una aplicación C/C++ es mucho mejor.

Obviamente no se puede esperar que el rendimiento de un lenguaje de alto nivel sea superior al de uno de bajo nivel. Los objetivos de ambos lenguajes son diferentes. Ninguno de los dos es peor. Son lo que son.

Esto, sumando al hecho de que Python está escrito en C, hace de los dos lenguajes una combinación ideal. No son rivales, sino complementarios.

Otras características:

  • Python es mucho más sencillo y soporta más paradigmas que C/C++.
  • Los programas en C++ pueden embeber código Python, y Python puede utilizar bindings sobre bibliotecas en C/C++.

Java

Actualmente propiedad de Oracle, Java es un lenguaje compilado, multipropósito, multiplataforma, de alto nivel, con tipado estático y orientado a objetos.

El núcleo de Java es su máquina virtual. Tarda bastante en cargarse, aunque cuando lo hace es relativamente rápida.

Mi percepción particular sobre Java, es como a medio camino entre C++ y Phyton, sin tener, ni de lejos, lo mejor ni de uno ni de otro.

Desventajas (muchas):

  • Funcionar con una filosofía de “puro Java”, con una doctrina extremadamente restrictiva. Python por el contrario, está basado en una filosofía de libertad, integrándose con facilidad con otros lenguajes de programación, y no presentando restricciones absurdas que acotan el lenguaje.
  • Java requiere de muchas más instrucciones para realizar una misma tarea que Python. El desarrollo en Python es 5 veces más rápido que en Java.

Ventajas:

  • Java está enormemente extendido, debido principalmente a la adopción del lenguaje por parte de pesos pesados como Sun e IBM. Existen muchísimas ofertas de trabajo para un desarrollador JAVA o Java EE, lo que lo hace un lenguaje muy deseado. No obstante, observa también que existen ya muchos programadores Java.

Historia de los lenguajes de programación

Lista no exhaustiva de lenguajes:

Año Nombre: descripción Paradigmas
1952 A-0: Imperativo
1954 FORTRAN: Orientado al cálculo científico Imperativo
1958 ALGOL: Éxito a nivel universitario, pero no industrial. Procedural
1959 LISP: Usa notación prefijada y dispone de una gestión automática de la memoria Imperativo y funcional
1960 COBOL: Deciende de A-0, de sintaxis muy pesada. Imperativo
1962 SIMULA: Desciende de ALGOL, introduce el concepto de clases. Imperativo, precursor de la orientación a objetos
 1963 CPL: Desciende de AGOL, FORTRAN y COBOL. Introduce el código objeto y así la compilación en dos fases: de fuente a objeto y de objeto a máquina. Facilita así la portabilidad del código. CPL evoluciona a BCPL en 1967, resolviendo así sus problemáticas  Imperativo
 1969 B: Descendiente de BCPL.
 1971 Pascal: Nació con propósitos educativos, y termino triunfando en su época, en el ámbito industrial Imperativo
 1972 Smalltalk: Desciende de SIMULA y LISP. El primer lenguaje orientado a objetos. Dispone de recolector de basura y herencia simple, e introduce el sistema de gestión de excepciones. Orientado a objetos
 1972 C: Desciende de B. Lenguaje de referencia de los lenguajes imperativos modernos. Es el lenguaje con el que se construyen aun hoy los sistemas operativos. Imperativo
 1972 Prolog: Introduce el paradigma de programación lógica. Lógico
1975 Scheme: Desciende de LISP. Programación funcional pura. Puede orientarse a objetos mediante el uso de macros. Funcional
1977 Modula: Desciende de ALGOL y de Pascal. Inspirará a JAVA, C# y Python Imperativo, procedural, genérico
 1980 C++: Inicialmente llamado “C con clases”. Mejora y amplia el lenguaje C. Funciones virtuales, sobrecarga de operadores, gestión de excepciones, … Imperativo, orientado a objetos, genérico
1987 Perl: Está particularmente adaptado a la manipulación de archivos de texto  y expresiones regulares. Imperativo, orientado a objetos, funcional
1991 Python: Lenguaje interpretado. Considero que el que tiene una mayor proyección de futuro.
1993 Ruby: Lenguaje de alto nivel, inspirado en Python LISP, Smalltalk, Eiffel, Ada y Perl. Gran lenguaje, de sintaxis simple y capaz de competir los grandes como Python. Imperativo, orientado a objetos, concurente y funcional
1995 Delphy: Desciende de Pascal. Hace hincapié en las librerías gráficas.
Imperativo, orientado a objetos.
1995 Java: Orientado a objetos
1995 PHP Imperativo, orientado a objetos desde PHP 5.3
1998 Erlang Concurrente y funcional
2000 D: Sucesor de C. Imperativo, orientado a objetos, programación por contrato
2009 Go: Desarrollado por Google. Su objetivo es alcanzar la mayor rapidez posible. Concurente

 

Desarrollo para dispositivos móviles

En este campo debemos diferenciar principalmente 3 tipos de desarrollo:

Desarrollo nativo

Suelen en principio mejores al estar desarrolladas con la herramienta (SDK) que cada SO proporciona. Presentan sin embargo la gran desventaja de que si queremos desarrollar así para todas las plataformas (iOS, Android, Windows Phone,…, deberemos aprender  las herramientas de cada uno.

Desarrollo web

Las aplicaciones web, también llamadas webapps, están basadas en HTML, CSS y JavaScript. No se emplea un SDK para el desarrollo, lo cual permite programar con independencia de la plataforma. Estas apps requieren de conexión a Internet.

Desarrollo híbrido

Las apps híbridas se desarrollan con HTML, CSS y JavaScript. Posteriormente se compilan o empaquetan, de tal forma que el resultado final es parecido a una aplicación nativa.

De nuevo vuelven los mismos principios abordados.

  • Realiza lo máximo con los menos lenguajes posibles.
  • Desarrolla una vez, funciona en todos los dispositivos.

Reflexión y comparativa entre los 3 tipos de desarrollo

En este caso, con mi recomendación de la creación de apps web o híbridas con HTML, CSS y JavaScript, tecnologías que puede que nos veremos obligados a aprender para crear sitios web.

En detrimento de los defensores del desarrollo nativo, que conlleva aprender un lenguaje para cada sistema (lo que a mí me parece una locura), diré que aunque aun hoy el rendimiento y posibilidades de una app nativa no puede igualarse con las no nativas, hay opiniones de profesionales que afirman que eso cambiará, y que la tendencia y el futuro es el desarrollo con HTML5.

Para la conversión del desarrollo de estas apps en híbridas, destaco dos herramientas:

  • Kivy: Biblioteca Python software libre para la creación de apps usando este mismo lenguaje.
  • Adobe Phonegap / Cordoba. Software libre de licencia Apache 2.0. para la creación de apps híbridas con HTML, CSS y JavaScript.

En algún momento ampliaré detalles sobre el desarrollo de apps, y en concreto sobre el uso de una de las dos herramientas anteriores.

A pesar de que haría lo posible por evitarlo, podría ser necesario crear una aplicación nativa, si el acceso a los recursos de hardware del teléfono son importantes.

Otras alternativas:  | Sitio oficial de desarrollo Android | Sitio oficial de desarrollo Ubuntu Phone

 


Deja tus comentarios sobre el tema. ¿A qué lenguajes de los expuestos crees que les falta o les sobra importancia? ¿Cuales faltan o sobran?