¿Cuáles son los beneficios y desventajas de cada lenguaje de programación CS?

Esa es toda una lista, y ni siquiera incluye ninguno de mis idiomas favoritos 😉 Una respuesta correcta sería demasiado larga, por lo que no escribiré una respuesta adecuada.

  • Java: Reconocieron muchas de las cosas más importantes, sobre todo, la recolección de basura y la seguridad de tipos, pero son molestas verbalmente y parecen estar atascadas para siempre con algunas características horribles (covarianza de tipo array).
  • C: ofrece una elegancia aparentemente simple, y actualmente es indispensable para algunos tipos de programación de sistemas de bajo nivel, pero el comportamiento indefinido lo hace inadecuado para la programación de aplicaciones generales (y despide a cualquiera que le diga lo contrario).
  • C ++: el hermano menor grotesco de C Tiene algunas ideas brillantes que algunas personas brillantes pueden usar para hacer cosas brillantes, y creo que otros idiomas aún tienen mucho que aprender de esto, pero para la mayoría de los programadores probablemente ofrezca demasiada información. Y todavía es inseguro.
  • C #: Al igual que Java, pero mejor en algunos aspectos (tipos de valor, genéricos confiables) y peor en otros (encerrado en un ecosistema molesto y costoso).
  • JavaScript: El lenguaje ensamblador de la web. Al igual que el lenguaje ensamblador, es probable que deba evitar escribirlo a mano la mayor parte del tiempo, pero a diferencia del lenguaje ensamblador, a menudo no puede hacerlo. Tiene algunas fallas serias de diseño, entre ellas, la combinación de tablas y espacios de nombres, pero está mejorando. Y al menos se pone lambda semi-derecha.
  • PHP: asqueroso, sin cualidades redentoras.
  • Python: un lenguaje inexplicablemente popular sin una clara razón de ser. Buena sintaxis hasta que llegas a sobrecargar o quieres sentencias en un lambda, que no tiene porque el BDFL (¡es cierto!) No sabe cómo escribir un analizador.
  • Visual Basic: En este punto, C # en ropa BASIC. Basta de charla.
  • Perl: Mi segundo amor, un artefacto arcano de los años 90. Aún es bueno para los de una sola línea cuando AWK no lo corta, pero probablemente no debería usarse para programas nuevos por más tiempo.
  • Delphi: ¿Alguien usa esto más?
  • MATLAB: rutinas matriciales rápidas en envolturas lentas; un diseño de lenguaje horrible que podría tener que usar de todos modos, y si lo usa durante el tiempo suficiente, el Síndrome de Estocolmo lo hace mejor.
  • F #: como OCaml pero con interacción .NET y sin algunas de las características más interesantes de OCaml. Probablemente no sea una mala elección si necesita trabajar en .NET.
  • Ruby: una joya de un idioma, el verdadero sucesor de Smalltalk. Tiene un diseño coherente que lo hace agradable de usar, pero aún sufre de enfermedades de la mesa, y tiende a ser demasiado lento.
  • Transact: No conozco a este, probablemente porque no soy un DBA.
  • R: El mejor lenguaje de estadísticas, que desafortunadamente no dice mucho. Es uno de los idiomas con los que la gente hace grandes cosas a pesar de los mejores intentos de sus diseñadores por interponerse en su camino.
  • Pascal: una idea importante en los años 70 que hoy no tiene relevancia.
  • Objective-C: su administración de memoria es tan difícil que muchos programadores ni siquiera lo intentan, asumiendo que en su lugar puedes reiniciar las aplicaciones de tu iPhone cuando se quedan sin memoria y fallan. Mientras Apple lo dijera, su beneficio era poder escribir aplicaciones nativas de iOS, pero tal vez debería ser suplantado por Swift lo antes posible.

Al menos en mi opinión, tratar de enumerar los idiomas y enumerar los pros y los contras de cada uno tiene muy poco sentido. Casi cualquier característica de un idioma en particular puede ser un profesional o una estafa, según el propósito al que se quiera colocar.

Por ejemplo, consideremos Java con un poco más de profundidad que las otras respuestas (hasta ahora) que intentaron.

Java es bien conocido por ser bastante detallado. Por un lado, esto tiende a traducirse en que es bastante legible a nivel microscópico. Cuando su principal preocupación es una línea de código individual, por lo general tiene suficiente para leer el código sin referirse a otras partes del código. Incluso hasta (digamos) los proyectos de tamaño de clase de la universidad, esto funciona bastante bien (aunque incluso para ellos, empieza a volverse torpe).

Desafortunadamente, la misma característica comienza a convertirse en un problema serio para proyectos realmente grandes. El volumen total comienza a convertirse en un problema mucho antes que si la tarea equivalente se implementa con muchos otros lenguajes de programación. Esto se ve agravado por la relación requerida entre los nombres de clase y la estructura de directorios. Un proyecto grande puede fácilmente terminar con miles de directorios, cada uno de los cuales contiene exactamente un elemento: otro directorio. Navegar por este lío a nivel del sistema de archivos se convierte rápidamente en una pesadilla.

Otra característica de Java es que no está permitido escribir sobrecargas de operadores (algunas están integradas, pero otras no están permitidas). Por un lado, esto hace que sea fácil saber que algo como `a = b + c` no hace nada” divertido “a tus espaldas. Al mismo tiempo, significa que (por ejemplo) la clase BigInteger en la biblioteca estándar es * extremadamente * torpe de usar (por ejemplo, el mencionado “a = b + c” termina algo así como `a.Assign (b. Añadir (c)); `

Espero que esos ejemplos sean suficientes para ilustrar mi punto: ambas son características básicas del lenguaje. Dependiendo de la situación y el uso, puede ser un profesional o una estafa. Si tuviera que seguir su formato sugerido y tratara de escribir las cosas como ventajas y desventajas, probablemente las escribiría como si fueran contras, pero mi pensamiento refleja mi experiencia (trabajando en sistemas grandes) más que el lenguaje en sí. Naturaleza existencial (por así decirlo) de esas características del lenguaje / verrugas.

Ampliaré un poco la respuesta de Jesse.
C ++ es excelente, solo necesita comprender que el 10% más complejo se requiere para escribir bibliotecas y no debe ser tocado por simples mortales. Casi necesitas una guía nativa para aprenderlo ahora, y quieres aprender el C ++ “Moderno”, no el C ++ “Antiguo”. Si bien parecen lo mismo, el Modern es mucho más simple y seguro. Si se mantiene en el camino conocido, puede estar seguro, y si tiene un Gurú en el personal, puede ser muy productivo. Está destinado a reemplazar a C y hace hincapié en que cada operación básica se ejecuta en un tiempo conocido. Si desea utilizar los 8 núcleos o los 1024 núcleos en la GPU, este es el idioma para usted.

Delphi. Un dialecto de Pascal que fue reemplazado por C # cuando el arquitecto fue a Microsoft.

DO#. En realidad, ya no estás atrapado en el ecosistema. Existe Mono, Xamarin, que produce una versión para Mac, Android e iOS y la plataforma Unity para crear juegos que utilizan C #.

Transact-SQL o PL / SQL. El último lenguaje funcional. Usted especifica qué, no cómo y la máquina lo resuelve por usted. Hay dialectos que aparecen en Linq (.Net) y Streams (Java 8). Increíblemente eficiente al usar cientos de CPU de manera eficiente, sin puntos muertos, efectos secundarios u otros problemas. Sin embargo, no juega bien en múltiples máquinas. También extremadamente limitado en lo que hace.

Usted pidió beneficios y desventajas de cada uno. Voy a comentar sobre los que conozco y tal vez agregar algunos otros …

Java – Ventajas: Un montón de bibliotecas de apoyo. Si miras no tendrás que reinventar la rueda.
Desventajas: Aparición de la inseguridad. Dependencia de JDK que complica el despliegue. Java basada en la interfaz de usuario a menudo klunky y lento.

C – Ventajas: Un montón de muestras por ahí.
Desventajas: En gran medida dependiente de la plataforma. Gestión de la memoria.

C ++ – Ventajas: OO!
Desventajas: Difícil de captar la sintaxis especial. Difícil de entender la programación de otros programadores.

C # – Ventajas: Un montón de bibliotecas de apoyo.
Desventajas: la dependencia del marco. Dependencia de la plataforma.

Javascript – Ventajas: Un montón de marcos y ejemplos.
Desventajas: diferencias de navegador.

Python – Ventajas: excelente sintaxis, numerosos ejemplos
Desventajas: falta de compatibilidad con versiones anteriores: las nuevas versiones rompen la sintaxis existente.

Visual Basic – Ventajas: muchos ejemplos, muchas bibliotecas, componentes enchufables.
Desventajas: dependencias de .NET framework, dependencia de plataforma.

Perl – Ventajas: Terso
Desventajas: Terso

MATLAB – Sin experiencia

F # – Sin Experiencia

Ruby – Sin Experiencia

R – Sin Experiencia

Pascal – Delphi! Ventajas – Sintaxis simple
Desventajas: falta soporte actual

Objective-C: Ventajas: Lo que C ++ debería haber sido sintácticamente.
Desventajas: La sintaxis es muy oscura y ajena. Útil sólo para el desarrollo de Apple.

Swift: Ventajas: Sintaxis simple, excelente para el desarrollo de Apple
Desventajas: Solo bueno para el desarrollo de la manzana.

Adición: COBOL, que es más popular de lo que podría imaginar y se usa en más lugares de los que puede imaginar.

Ventajas: sintaxis inglesa simple. Seguro. Hacia adelante Norma de idioma actual.
Inconvenientes: Aparición de la antigüedad. Requiere compiladores caros (aunque GNU COBOL es una excepción). Falta de implementación del estándar de lenguaje actual.

C: Es difícil (de aprender). Pero es difícil.
C ++: Es más fácil. Pero sigue siendo difícil.
C #: Es aún más fácil. Pero Microsoft.
JavaScript: Es fácil y puedes ejecutarlo en el navegador. Pero es fácil desordenar cuando crees que es fácil.
PHP: No. Nooooooooooo.
Python: Es más fácil y más desordenado que JS. Pero es fácil estropearlo.
Perl: Es algo fácil. Pero tienes que asegurarte de que tu código sea fácil de leer.
Delphi: ¿Quién usa esto?
MATLAB: Es un lenguaje que tiene más significado para las matemáticas que para otros propósitos de programación.
F #: no es tan dificil Pero Microsoft.
Ruby: Es más fácil y más desordenado que JS. Pero es fácil estropearlo.
Transact: ¡¡¿Qué? !!
R: Lo mismo con MATLAB.
Pascal: ¿Quién usa esto?
Objective-C: Es difícil, y Apple.

Mis adiciones personales:
Java: no es tan dificil Pero hay relativamente poca azúcar sintáctica.
Scala: Un montón de azúcar sintáctico y más fácil en los ojos. Pero herramientas relativamente inmaduras, especialmente para principiantes.
Haskell: Aprenderás las cosas de manera funcional. Pero tu cerebro dolerá, y todos los idiomas de los que aprendas serán abismales (suponiendo que sean los primeros; de lo contrario, Haskell estará un poco loco).
Ur / Web (intenté esto): Puedes construir servidores web. Pero la documentación existente no es muy útil.
TI-Basic: ¡Está en tus calculadoras! Pero dejará una visión distorsionada de la programación, así como la tentación de jugar juegos en la clase de matemáticas.
Asamblea: Difícil de aprender. Pero difícil de aprender.
Scratch: arrastrar y soltar. Pero arrastra y suelta.

Es muy difícil establecer ventajas y desventajas si no se aclara lo que se pretende lograr con un lenguaje de programación.
Un “buen” lenguaje de programación es aquel con el que puede implementar sus requisitos de la manera más productiva. Esto puede incluso incluir el uso de varios idiomas muy diferentes al mismo tiempo en el mismo proyecto, y también depende de las preferencias personales de los miembros del equipo del proyecto, la educación, etc.
En mi humilde opinión, hay muy pocas ventajas o desventajas generales de un lenguaje de programación. Y si los hay, se debe principalmente a la “vejez”, o simplemente porque el tiempo pasa y los nuevos conceptos reemplazan a los antiguos. Por ejemplo, consideraría el caso de Pascal: el beneficio puede ser que aún puede mantener el software que se escribió hace 25 años, aparte de eso, puede que no haya mucho. Además, si pretende escribir software para la plataforma iOS, lo más probable es que termine usando Swift o Objective-C, independientemente de cualquier otro beneficio o problema que estos idiomas puedan tener.
Luego, algunos de los lenguajes de programación que mencionó están diseñados simplemente para un propósito especial, como por ejemplo R o MATLAB, pero no tiene sentido si desea implementar una interfaz de usuario para Windows, por ejemplo.
Para resumir: creo que no ayuda mucho discutir la estética de un lenguaje de programación a nivel académico. Muchas personas tienden a hacer eso, y hay algo de diversión en ello, pero considere la charla de ese programador. Realmente no te ayuda mucho cuando se trata de aplicaciones prácticas. Por supuesto, creo que Clojure, Ruby, Scala, Swift, Erlang o Haskell son más “hermosos” que Java o C #, pero sin embargo, el 90% del código que escribo para el trabajo está escrito en Java, C # y un JavaScript …

Es simple ¿Cuánto tienes que hacer para escribir para que valga la pena hacer algo? Realmente me gusta comparar código en Rosettacode.org.
Utilicé Python desde antes de principios de siglo y todavía me sorprende su expresividad para un lenguaje básicamente imperativo. Aun así, sigo pensando que Haskell es el mejor en expresividad pero no puedo usarlo en el trabajo. El lenguaje matemático es tan expresivo, creo, pero tampoco puedo usarlo. Puedo usar la raqueta y satisface mi necesidad de escribir poco para lograr grandes logros. Creo que es tan expresivo como Haskell y ofrece mucho más. Se ajustará a mis necesidades en los próximos años. Escribir lenguajes es la mejor manera de evitar el tedio de la programación. Raqueta sobresale en eso.