¿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. Cuales son mejores para desarrollo Web, aplicaciones de escritorio, apps para dispositivos móviles, …
La presente lista sobre lenguajes de programación no es en absoluto exhaustiva. Asimismo, las recomendaciones aquí presentes son solo opiniones del autor. Existen muchos lenguajes excelentes y combinaciones entre estos. A la hora de elegir, juegan factores como la popularidad, la madurez del lenguaje, el ámbito de uso o paradigmas que abarca, la demanda de profesionales que dominen el lenguaje en cuestión… Todo esto hace difícil dencatarse hacia un solo lenguaje y a veces simplemente un detalle hace que nos decantemos por un lenguaje concreto.
La elección del/los lenguajes a aprender está en principio condicionada por el ámbito en el que vamos a programar. Como ejemplo de esto, si hacemos desarrollo web, JavaScript es imprescindible, así como el lenguaje de marcado HTML y los estilos CSS. Si únicamente hacemos desarrollo web, posiblemente queramos usar también JavaScript en el lado servidor con NodeJS. En caso contrario, puede que elijamos Python por su enorme versatilidad, potencia, simplicidad en el lenguaje, … Python nos funcionará como lenguaje web en el lado servidor (entre otros muchísimos ámbitos en los que podremos usar Python: apps escritorio, inteligencia artificial, …).
Otro ejemplo: 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.
Tabla de contenidos
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 posee un rendimiento excelente y es portable. Es rápido, teniendo en cuenta que se trata de un lenguaje interpretado, y que no podemos compararlo en este aspecto con lenguajes compilados.
- 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, dice en su libro «Phyton 3 – Los fundametnos del lenguaje»: «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 omnipresente en 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, …
En el ámbito del desarrollo web en el lado cliente (navegadores web), el estudio de JavaScript es absolutamente obligado. Es el lenguaje que todos los navegadores son capaces de interpretar, el ecosistema de Frameworks y demás herramientas alrededor de Javascript es gigantesco, y se podría añadir que a nivel laboral es uno de los lenjuages más demandados, si no el que más.
La total supremacía de JavaScript para la programación web en el lado cliente, hace incluso que parezca insensato recomendar una alternativa, 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. Por ahora, los navegadores no soportan Python de forma directa, sino a través de una especie de «traducción» artificial a JavaScript.
Una vez aprendidos los conceptos básicos de JavaScript, conviene empezar a usar un librería para agilizar el trabajo. Existen innumerables frameworks y bibliotecas para JavaScript, aunque en el ámbito de propósito general, son especialmente interesantes por su versatilidad y potencia, React.js, Angular y Vue.js. Sin embargo esto es solo una pequeña muestra de 3 librerías que se posicionaron como favoritas en un momento dado en el tiempo. Ahora cada día hay más y algunas han igualado a estas en pontencia y versatilidad. Además están las bibliotecas para propósitos más específicos, más especializadas en algún ámbito concreto.
Desde la aparición de Node.js, JavaSript es idoneo para trabajar en los lados cliente y servidor con un solo lenguaje.
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.
La naturaleza de lenguaje compilado de C++, nos permite realizar aplicaciones potentes, de una rapidez no alcanzable con un lenguaje interpretado.
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. No creo que a alguien se le ocurra crear un SO o un driver con Python, si es que es posible; ni tampoco es lo más práctico crear una aplicación web o de contabilidad con C/C++.
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.
Rust
Lenguaje de programación compulado, de propósito general y multiparadigma.
Tiene un enorme rendimiento, entre otros motivos porque es compilado, y no tiene runtime ni colector de basura.
Hay disponible un gran cantidad de herramientas y documentación.
Rust ha ganado muchísima popularidad, hasta el punto de ser actualmente el más demandado por las empresas. en relación a esto último debe observarse que, aunque otros lenguajes son mucho más utilizadeos, también hay mucha más oferta de programadores disponibles para estos.
El lenguaje Rust apareción en 2010, con una sintaxis similar a la de C y C++, y ha crecido rápidamente en popularidad y herramientas.
Tabla resumen de los lenguajes recomendados
Paradigma | Lenguaje | Tipo de lenguaje | Resumen |
---|---|---|---|
Desarrollo web | HTML + CSS | Leguaje de marcas y hojas de estilo | Imprescindible para el desarrollo web. Son los estándares web que conforman la estructura y el estilo de las páginas. |
JavaScript | Principalmente programación web en el lado cliente (navegador), También se puede usar en otros ámbitos: apps móviles, escritorio,… | Imprescindible en programación web, si queremos agregar contenido dinámico. Es el estándar de la programación web en el lado cliente. | |
NodeJS | Programación web en el lado servidor usando JavaScript como lenguaje. | Ofrece la ventaja de usar el mismo lenguaje que ya hemos aprendido en el cliente (JavaScript) | |
Multipropósito | Python | Lenguaje interpretado y multiparadigma, de alto nivel. | Multitud de ámbitos de aplicación. En el ámbito web, se usa en el lado servidor, alternativo a NodeJS. |
C++ | Lenguaje compilado y orientado a objetos. Tiene características de bajo y alto nivel. | Se complementa perfectamente con Python, permitiendo extender este. |
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. | Concurrente |
Deja una respuesta