¿Cuál es el lenguaje de programación más incomprendido y por qué?

Yo diría JavaScript / EcmaScript .

Es increíblemente diverso y se ha demostrado que es útil en muchos dominios y plataformas. También es bastante incomprendido, mal implementado y maltratado debido a peligrosas verrugas y trampas que lo permiten. Sin embargo, dada una buena ingeniería y herramientas que protegen de esos problemas, JavaScript también puede ser un lenguaje significativamente poderoso que los desarrolladores pueden resolver rápidamente problemas complejos y desafiantes.

En estos días, encuentro que JavaScript / CoffeeScript puede resolver todas mis necesidades en toda la pila de desarrollo. Por ejemplo, con algo como MeteorJS, puedo crear una aplicación de pila completa, que incluye almacenamiento de datos y enlace de datos completo en todos los clientes, con muy poco código. Con menos de 50 (20?) Líneas de código, incluido el código UI, puedo crear una aplicación que sincronice todos los navegadores con la base de datos. Literalmente puedo actualizar datos usando una consulta en Mongo y ver cada actualización de cliente automáticamente, sin código adicional. ¡Intenta eso en cualquier otro idioma!

Del mismo modo, usando Ionic, puedo desarrollar una aplicación muy respetable y de alto rendimiento usando JavaScript, HTML, CSS, con poco esfuerzo, multiplataforma. No es tarea fácil usar otros idiomas.

También agregaré CoffeeScript como un lenguaje bastante incomprendido.

Personalmente, considero que CoffeeScript es una herramienta poderosa para resolver los aspectos peligrosos de JavaScript. (CoffeeScript también es bastante incomprendido en la comunidad, pero no es el “más”).

Además, CoffeeScript elimina los argumentos perpetuos con respecto al estilo de colocación de corchetes, etc. He crecido para preferir lenguajes que usan sangría para definir bloques sobre los idiomas entre corchetes. Cuando se combina con Jade (Pug) y Sass, puedo ser libre de eliminar mucho ruido visual en mi código. Es mucho más agradable escribir Jade que escribir HTML. (La mitad de las líneas de código y sin elementos de cierre que no coincidan, como

)

Al igual que Python, los bloques de código CoffeeScript se definen por sangría. Esto coincide con el reconocimiento visual humano de las agrupaciones. Estoy a favor del código legible por humanos, y la sangría es un factor importante en la comprensión de los bloques lógicos. ¿Cuándo fue la última vez que no pudo ver un error porque olvidó sus aparatos ortopédicos? ¡Eso nunca debería suceder!

CoffeeScript me salva de tantas cosas como:

  • Abusar del alcance variable
  • Doble es igual a ambigüedad. (CoffeeScript se transmite a triples iguales, que es el comportamiento deseado)
  • Comprobación nula en línea simple.
    • Reemplace if(a !== null){return ab;} else {return undefined;} con return a?.b .
    • Realmente, también debería estar buscando indefinido, como en este ejemplo de CoffeeScript
  • Muchas características útiles que ahora están en ES6, como la desestructuración:
    • {a,b} = obj lugar de a = obj.a; b = obj.b; a = obj.a; b = obj.b;
  • Expresiones regulares más simples que son mucho más manejables (y comentables). Las expresiones regulares multilínea de CoffeeScript son más fáciles de entender (y comentables):

/// [
\ – \: \; \. \, \ \? # Puntuación
\ (\) # Paréntesis
\[\] # Corchetes
\ {\} # Llaves
] + # Coincide con cualquiera de estos, una o más veces
///

  • Vea mi blog sobre consejos y trucos de CoffeeScript para más información. Vale la pena leer, si estás de acuerdo conmigo o no.

Por supuesto, en cualquier idioma, las prácticas de ingeniería de software deficientes pueden arrojar resultados deficientes. Sin embargo, diría que usar herramientas para mejorar la línea de base es algo bueno. Sí, JavaScript tiene muchos, muchos problemas, pero las herramientas como CoffeeScript proporcionan formas de evitar esos escollos.

Todos los lenguajes tienen dificultades, como macros c, bloques de código sin corchetes, etc. Utilizamos herramientas como IDE, linters y advertencias de compilación para protegernos de algunos de los puntos peligrosos.

Agregaré – JavaScript podría aprender una o dos cosas de otros idiomas – para mejorar la seguridad. Puedo ver algún valor en cosas como TypeScript. Creo que si TypeScript y CoffeeScript se combinaran, podría ser un lenguaje poderoso, ¿quizás TypedCoffee?

JavaScript es el lenguaje más incomprendido. Todos piensan que es tan fácil de usar, tan versátil, tan universalmente popular. ¡Mal en todos los aspectos!

JavaScript es un lenguaje fundamentalmente defectuoso. Sus numerosas “verrugas” y “problemas” con frecuencia ponen a los principiantes en problemas de una manera que simplemente no ocurre con mejores idiomas como Smalltalk y Go.

Parece que JavaScript está haciendo metástasis en cualquier otra área de TI, como dispositivos móviles, computadoras de escritorio, IoT, juegos, robótica, etc. Desafortunadamente, no está ganando tracción porque en cada una de esas áreas, tiene la opción de elegir mejores idiomas. En desarrollo web, no tienes elección .

JavaScript tampoco es tan popular como la gente cree. En casi todos los índices de clasificación de idiomas, no supera el # 6. (En Redmonk, JavaScript es anómalo porque todos los proyectos web, independientemente del idioma utilizado, deben tener al menos algo de JavaScript, lo que infla los números). La encuesta de usuarios de StackOverflow contiene todo tipo de sesgo de selección. En resumen, no hay evidencia confiable de la popularidad de JavaScript. Todo es bombo.

Descargo de responsabilidad: publiqué la pregunta. Como Richard Kenneth Eng logró la mayoría de los puntos principales en su respuesta, voy a hablar sobre otro lenguaje incomprendido: Java.

Java es increíblemente mal entendido: el 95% de lo que dicen los críticos al respecto es incorrecto. Como Java es el lenguaje de instrucción para muchos estudiantes, estas críticas no deben tomarse al pie de la letra ni propagarse a ciegas. Decir que Java está sin datos es simplemente incorrecto. Permítanme tomar los mitos más comunes, señalando por qué están equivocados.

  • Mito 1: Java es lento cuando se usa para el desarrollo de aplicaciones.
  • Verdad: esto solo es cierto si no le importa un bledo la calidad del código y / o cualquier cosa, excepto escribir rápidamente mucho código. En la mayoría de los dominios de aplicación, este enfoque puede ser aceptable durante la creación de prototipos, pero no durante la producción. Las aplicaciones web de juguete sin datos serios y / o aspectos de misión crítica son los principales proyectos de desarrollo en los que vuela este enfoque. En otros dominios, nunca es aceptable escribir código de baja calidad. En mi campo, las aplicaciones médicas, el resultado más probable del enfoque defendido por las personas que presentaron este mito es una gran cantidad de usuarios muertos o gravemente heridos.
  • La razón principal por la que los desarrolladores aficionados aman a JS / Python / etc. es la ausencia de verificación de tipo de error (interpretado vs. compilado, etc.). Pero esa es también la razón por la cual los lenguajes de secuencias de comandos nunca deben usarse para algo serio.
  • Mito 2: los programas Java son mucho más largos (recuento de líneas) de lo que deberían ser.
    • Verdad: en otros idiomas, una vez que incluye todo el código defensivo que el lenguaje ejecuta para usted, el programa suele ser más largo, pero no en Java. Algunos de los programas más cortos y no triviales que he creado fueron construidos con Java.
  • Mito 3: Java es un dinosaurio.
    • Verdad: Java es actual con cualquier lenguaje convencional de calidad de producción que conozco en términos de características y salvaguardas. Muchos de los proyectos serios y “sexys” que existen en Java. La mayoría de las plataformas de computación en la nube, no juguetes relativos como SaaS, sino cosas como IaaS y PaaS, están en Java. Lo mismo es cierto para IoT crítico para la vida … Etc. No puedo pensar en ningún otro lenguaje que vea un uso más crítico para la misión (final de la historia).
  • Mito 4: Java funciona mal.
    • Verdad: a excepción de la administración de memoria, Java es tan rápido o más rápido que C y C ++. La gestión de la memoria es solo un 10% más lenta.

    Bueno, podría enumerar tres en la parte superior de mi cabeza.

    • Delphi: esta fue realmente / es la mejor manera de bloquear un ejecutable de Windows, un gran compilador rápido, los proyectos a menudo se compilaron en un solo ejecutable, el ejecutable resultante simplemente se podía insertar en un directorio, sin necesidad de instalador. No logró ganar tracción debido a que era una variante de Pascal. Lo resistí durante años por esa razón, C fue lo suficientemente bueno para mí. Una vez que comencé a usarlo, me enamoré y me pregunté por qué me había resistido durante tanto tiempo.
    • Adelante: es maravilloso en toda su rareza. Es probable que el idioma que HP debería haber escrito cuando innovaron. Lamentablemente, el lenguaje nunca se prendió entre los verdaderos creyentes. Postdata siendo su prodigio. RPN no es para todos, supongo.
    • Prolog: cuando los sistemas basados ​​en el conocimiento estaban de moda, Prolog tuvo su día al sol. El mundo simplemente no parecía estar listo para un lenguaje declarativo cuando salió. Realmente espero ver esto resucitado pronto.

    JavaScript: el lenguaje de programación más incomprendido del mundo

    JavaScript, también conocido como Mocha, también conocido como LiveScript, también conocido como JScript, también conocido como ECMAScript, es uno de los lenguajes de programación más populares del mundo. Prácticamente todas las computadoras personales del mundo tienen al menos un intérprete de JavaScript instalado y en uso activo. La popularidad de JavaScript se debe por completo a su papel como lenguaje de script de la WWW.

    A pesar de su popularidad, pocos saben que JavaScript es un lenguaje de programación de propósito general dinámico orientado a objetos muy agradable. ¿Cómo puede ser esto un secreto? ¿Por qué este lenguaje es tan incomprendido?

    El nombre

    El prefijo Java sugiere que JavaScript está de alguna manera relacionado con Java, que es un subconjunto o una versión menos capaz de Java. Parece que el nombre fue seleccionado intencionalmente para crear confusión, y de la confusión viene un malentendido. JavaScript no se interpreta Java. Java se interpreta Java. JavaScript es un idioma diferente.

    JavaScript tiene una similitud sintáctica con Java, al igual que Java tiene con C. Pero no es más un subconjunto de Java que Java es un subconjunto de C. Es mejor que Java en las aplicaciones para las que Java (fka Oak) estaba originalmente destinado .

    JavaScript no fue desarrollado en Sun Microsystems, el hogar de Java. JavaScript fue desarrollado en Netscape. Originalmente se llamaba LiveScript, pero ese nombre no era lo suficientemente confuso.

    El sufijo -Script sugiere que no es un lenguaje de programación real, que un lenguaje de script es menos que un lenguaje de programación. Pero es realmente una cuestión de especialización. En comparación con C, JavaScript intercambia el rendimiento por potencia expresiva y dinamismo.

    Además: JavaScript: el lenguaje de programación más incomprendido del mundo

    Tengo que estar de acuerdo con C #. La “razón”: porque no es multiplataforma. La verdadera razón a) porque es MS b) porque NO es Java.

    Mencioné eso en otra pregunta, pero estaba en una empresa donde decidieron cambiar todos los servidores a Windows, escritorios donde ya Windows. Decidieron usar solo SQL Server y … [pausa dramática] Java. Espera, hay más, hay una razón: “Porque Java es multiplataforma y ha estado fuera por más tiempo”. No les pareció divertido cuando sugerí que deberíamos usar COBOL o C ++.

    También lo llaman una copia de Java (en realidad es una copia de C ++ igual que Java) PERO, siendo una copia, significa que examinaron C ++ y Java, y decidieron NO cometer los mismos errores. Haciéndolo “mejor” y más fácil de aprender y usar. Y ahora ES multiplataforma, así que tengo curiosidad por saber qué van a usar como “razón” para no usar C #

    Ninguno de los idiomas es así, en realidad depende del usuario