¿Por qué hay tantos lenguajes de programación?

Existen más de 250 lenguajes de programación. Algunos son ampliamente utilizados en el mundo de los negocios, como C ++, Java, JavaScript, Ruby y Python. Otros son principalmente académicos, como Lisp. Sin embargo, otros son oscuros y esotéricos. Es posible que se pregunte: "¿Por qué hay tantos lenguajes de programación?"

Eso es muy parecido a preguntar: "¿por qué hay tantos campos de las matemáticas? Tenemos álgebra, ¿por qué necesitamos geometría, cálculo y mecánica de fluidos?" Cada lenguaje de programación tiene como objetivo resolver un problema particular. Más de un idioma puede resolver el mismo problema, pero cada uno lo abordará de manera diferente.

Estas son algunas de las principales diferencias en los lenguajes de programación.

Legibilidad y mantenibilidad

Algunos lenguajes son más fáciles de leer para un ser humano, lo que facilita la colaboración de un programador con el código de otro programador. Python, por ejemplo, tiene la reputación de ser fácil de leer. Hace cumplir una sangría estricta de las líneas para definir sus bloques de código, lo que facilita la vista de un programa y su estructura. Otros idiomas también permiten la sangría, pero como una opción estilística, no como un requisito.

En contraste, Perl es un lenguaje que le permite al programador escribir el mismo programa de muchas maneras diferentes, pero el propósito del programa puede no ser claro de inmediato para otro lector. Tal programa puede ser conveniente para escribir, pero difícil de entender y editar para otra persona.

Actuación

Algunos idiomas se interpretan, y otros se compilan. Un programa compilado debe ser procesado por un preprocesador, compilador y enlazador antes de que pueda ser ejecutado por la computadora. Este software intermedio especializado realiza un análisis léxico, traduciendo el programa al lenguaje de máquina. También puede optimizar las instrucciones resultantes, buscando formas inteligentes de hacer que el programa se ejecute más rápido.

Los programas compilados normalmente se desempeñan mejor que los programas interpretados. Por ejemplo, C, C ++ y Objective-C son lenguajes que normalmente compilan en un código de máquina muy rápido. Los videojuegos y el software del sistema a menudo se escriben en estos idiomas, para exprimir cada bit del rendimiento de la CPU.

Por otro lado, los programas de lenguaje interpretado son ejecutados por un software llamado intérprete, que ejecuta las instrucciones del programa sin compilarlas primero en un código de máquina. Aunque el intérprete a veces analiza el programa en un lenguaje intermedio, lo que da como resultado una optimización, el rendimiento nunca es tan rápido como el código de máquina compilado.

Un beneficio importante de los lenguajes interpretados es su potencial para el desarrollo interactivo. Debido a que no es necesario compilar todo el programa antes de poder ejecutarlo, el código se puede ejecutar de manera interactiva. Está familiarizado con esto si alguna vez ha usado la línea de comando de su sistema operativo: ingresa un comando y ve los resultados. Dicha interfaz se denomina REPL, o "read-eval-print-loop". Un REPL le permite ejecutar comandos (o bloques de comandos) individualmente y ver los resultados. Lisp, Perl, Python, NodeJS, Ruby y JavaScript son ejemplos de lenguajes interpretados que se pueden ejecutar en un REPL.

Las interfaces de comandos interactivas, como el símbolo del sistema de Windows y bash, también califican como idiomas interpretados. Los programas en estos "idiomas" se denominan archivos por lotes o scripts de shell.

Casos de uso especifico

A menudo, los idiomas son especialmente buenos para escribir tipos específicos de programas. Por ejemplo, NodeJS está diseñado para escribir aplicaciones de un solo hilo para la web. Su E / S de archivos no bloqueantes permite que los programas sigan funcionando ("no se bloqueen") mientras esperan que se transmitan los datos necesarios.

Otro ejemplo es el lenguaje de programación R, que se especializa en el análisis estadístico. Los programas escritos en R se benefician de pruebas y modelos analíticos incorporados, y herramientas para manipular de manera eficiente grandes cantidades de datos.

Facilidad de prototipado

Algunos lenguajes permiten la creación rápida de prototipos: el programador puede "simplemente comenzar a escribir" y construir componentes sobre componentes hasta que el programa esté completamente configurado.

Por ejemplo, el sitio web Reddit fue escrito originalmente en Lisp. Después del lanzamiento de Reddit, todo el sitio se reescribió en Python por muchas razones, tanto técnicas como logísticas. Si bien la refactorización de todo el código era una tarea importante, los propietarios del sitio no se arrepintieron. En una publicación del blog de 2005, comentaron que Lisp les permitió crear algo sin saber exactamente en qué se convertiría.

Bibliotecas disponibles

Por lo general, cuando comienza un nuevo proyecto de programación, no desea reinventar la rueda. Es decir, no desea escribir funciones para tareas comunes como calcular una raíz cuadrada o encontrar la primera aparición de un carácter en una cadena. Por esta razón, casi todos los lenguajes de programación proporcionan un conjunto de bibliotecas estándar de funciones comunes. Los programadores pueden preferir un lenguaje debido a las bibliotecas que proporciona.

Por ejemplo, las bibliotecas estándar de C proporcionan funciones de alto rendimiento para muchas operaciones de sistema de bajo nivel. Perl proporciona muchas bibliotecas robustas, y también el repositorio de módulos CPAN para descargar y utilizar en su programa. Python proporciona una amplia gama de funciones y módulos incorporados para casi todo bajo el sol. Clojure, un lenguaje parecido a Lisp que se ejecuta en la JVM, se beneficia de su capacidad para ejecutar código desde las extensas bibliotecas existentes de objetos y métodos Java.

Seguridad

No todos los idiomas se prestan para escribir código de seguridad. El lenguaje de programación C, por ejemplo, es conocido por tener características (o falta de ellas) que pueden conducir a vulnerabilidades devastadoras, como la anulación de referencia de puntero nulo. Otros idiomas intentan abordar estas preocupaciones con reglas más estrictas.

Por ejemplo, algunos idiomas imponen restricciones sobre qué operaciones se pueden realizar en varios tipos de datos. El más estricto de estos lenguajes a veces se denomina "fuertemente tipado" y puede ofrecer tranquilidad a los programadores que priorizan la seguridad y la estabilidad en el desarrollo de software. Ejemplos de lenguajes fuertemente tipados incluyen Rust, Nim, Ocaml y Haskell.

Los idiomas también pueden poner límites a la "mutabilidad", la capacidad de un objeto de datos para cambiar de estado. En lugar de los objetos cuyos valores se sobrescriben, estos lenguajes favorecen los objetos "inmutables": valores en la memoria que no se pueden cambiar sin una excepción explícita. Los objetos inmutables han atraído el interés ya que las CPU de varios núcleos se han generalizado, debido a su tendencia a promover la "seguridad de subprocesos". En un programa seguro para subprocesos, más de un procesador puede operar en un conjunto de datos con un riesgo de error muy reducido. Los lenguajes que priorizan objetos inmutables incluyen Rust y Clojure.

Soporte comunitario

Al escribir un programa en un nuevo idioma, es útil tener acceso a una comunidad activa y apasionada de desarrolladores que usan y contribuyen activamente al trabajo de los demás. Antes de elegir un lenguaje de programación, descubra más sobre la comunidad de ese lenguaje. Algunos idiomas tienen una base de usuarios vibrante, dinámica y emocionante de la que quizás desee formar parte y otros idiomas pueden tener poca o ninguna comunidad.

Expresividad

Al escribir un programa, los pensamientos y las habilidades de resolución de problemas del programador están "hablando" a través de ese lenguaje. Como resultado, los programadores tienden a preferir los lenguajes en los que se sienten cómodos expresándose. Sin embargo, es difícil definir qué hace que un lenguaje y un programador trabajen bien juntos. En última instancia, la única forma de saber con qué idioma se siente cómodo es utilizar diferentes idiomas para diferentes proyectos y compararlos por sí mismo.