Hola Habr! Les presento mi traducción del artículo
" Las tres grandes mentiras sobre JavaScript " de Richard Kenneth. Este artículo fue escrito en mayo de 2016, pero su relevancia, en mi opinión, no ha desaparecido. Soy un programador novato, por lo que son posibles errores en términos de "comprensión". Entonces ...
Tres grandes mentiras sobre JavaScript
Hay dos tipos de mentiras: la mentira que decimos a los demás y la mentira que nos decimos a nosotros mismos para justificarlo.
Hay tres grandes mentiras que los fanáticos de JavaScript me dicen una y otra vez.
Mentiras # 1
JavaScript es el lenguaje de programación más incomprendido del mundo.Las personas no saben cómo usarlo correctamente y, por lo tanto, constantemente se enfrentan a todo tipo de problemas. Y esto es una mentira, porque en
JavaScript no hay nada incomprensible.
Este es un lenguaje de programación imperativo / de procedimiento ordinario con una pequeña cantidad de funcionalidad de programación (FP) y una controvertida función "orientada a objetos" llamada prototipos de objetos. ¿Y qué tiene de especial?
Básicamente, todos los problemas que surgen al usar JavaScript son culpa solo de las personas que lo usan: son ignorantes, son vagos, están acostumbrados a cómo se realiza la programación en Java o Python. ¿Qué no saben? Programación funcional?
¿Por qué, entonces, las personas no se equivocan al usar otros lenguajes FP, como
C #, Clojure, Dart, Elm, Erlang, F #, Julia, Haskell, Scala y Scheme ? La programación funcional es un paradigma bastante bien entendido en la industria de TI. Entonces, ¿qué hace que JavaScript sea particularmente problemático a este respecto?
Tal vez las personas no conocen los prototipos de objetos. En ese caso, lea
"Qué no son los prototipos de objetos de JavaScript" . Los prototipos, por supuesto, no son adecuados para el desarrollo de software. No son un nivel particularmente alto de abstracción de programación. Los prototipos son en su mayoría tablas hash distinguidas, de nivel bastante bajo y esto es lo que yo llamo "bloques de construcción" para la programación orientada a objetos reales (POO basada en clases). La gente puede no entender cómo usar prototipos de objetos, pero ¿por qué necesita aprender a "poner ladrillos"? Esto no vale su esfuerzo.
Sí lo entiendo. Los prototipos son muy flexibles. No poseen todos los "rituales" en los que se basa el clásico AKI. En este sentido, son divertidos de usar. Pero no se adaptan bien para aplicaciones grandes y, por lo tanto, las personas regresan a clases. Si los prototipos fueran un truco tan útil, se vería adaptado en todas partes, porque los prototipos se pueden modelar en lenguajes basados en clases, así como las clases se pueden modelar en lenguajes basados en prototipos. Y esto es algo que los programadores de
JavaScript no pueden entender.
Mentiras # 2
La programación asincrónica es una fortaleza clave de JavaScript. Bueno, primero comprendamos por qué la programación asincrónica incluso existe en
JavaScript .
Para desarrollar una interfaz gráfica de usuario (GUI), el bucle de eventos es -
de rigor (lo habitual) , ya sea en
Windows ,
X Window ,
OS X's Cocoa o un navegador web. Todos ellos manejan los eventos de entrada del usuario de forma asincrónica. ¿Significa esto que la programación asincrónica también es una potencia de
C ++ u
Objective-C ? Los bucles de eventos (con bibliotecas asincrónicas) también se han utilizado en
Python y
Perl y
Tcl . Entonces, supongo que todos tienen el poder de la programación asincrónica. (Me río cuando la gente usa la palabra inexistente "
asincronía " (
asíncrono es un adjetivo que describe objetos o eventos que no están coordinados en el tiempo ).
JavaScript también utiliza un bucle de eventos y un procesamiento asincrónico para admitir la interfaz de usuario del navegador web. ¿Eso lo convierte en un gran idioma?
Y ahora, este modelo computacional ha hecho que
Node.js sea bastante popular en el lado del servidor, donde se usa para el desarrollo sin GUI, es decir. para concurrencia de alto rendimiento.
El nodo es obviamente útil para muchas aplicaciones, pero es poco probable que se apodere del mundo de la concurrencia. Los eventos recientes muestran las limitaciones de
Node.js. Y sí, esto debería convencer a todos de usar solo JavaScript.
El ciclo de eventos ha sido descrito como "el paralelismo de los pobres.
A los partidarios de
Node les gusta mostrar los mismos ejemplos de grandes empresas (PayPal, Netflix, Walmart, Uber, etc.) una y otra vez. ¿Qué se puede comparar para cada ejemplo de
Node.js en la respuesta? - cientos de ejemplos de
Java ?
Java se ha probado innumerables veces para el desarrollo empresarial. Por eso es un estándar de la industria.
Node.js aún no se ha probado. Realmente no sabemos cuántas corporaciones intentaron usar
Node.js y finalmente lo abandonaron. No tenemos idea de cuál es la tasa de éxito real de los proyectos
Node.js. Para las empresas, optar por
Node.js sigue siendo un riesgo.
Predigo con confianza que Go reemplazará a Node en el futuro tan pronto como crezca su ecosistema de marcos y paquetes. Su trayectoria es innegable.
Idiomas como
Go y
Erlang / Elixir pueden superar fácilmente a
Node en la mayoría de los escenarios de concurrencia. Incluso el modelo de evento / bucle asíncrono no es sostenible a largo plazo. Deberíamos estar interesados en usar lenguajes de programación paralelos reales si nuestro objetivo es el máximo rendimiento. ¿Por qué comprometerse con
JavaScript ?
Mentiras # 3
JavaScript es el lenguaje de programación más popular del mundo.¿Es esto realmente así? Hay una gran
diferencia entre un idioma que se usa ampliamente de manera predeterminada y un idioma que se usa ampliamente.
Recuerde que en cualquier otro campo, excepto Internet, los desarrolladores no son rehenes de un idioma. Ignoramos este hecho bajo nuestro propio riesgo.
JavaScript es el único idioma nativo para un navegador web, por lo que esta es la forma más directa de escribir una aplicación de navegador. Sin embargo, la mayoría de los desarrolladores desprecian este lenguaje y si realmente tuvieran una mejor opción, lo harían. Puede verificarlo usted mismo si busca en Internet (foros, redes sociales, sitios web, etc.) las opiniones de las personas sobre
JavaScript . Hay muchas listas largas de
WAT y
WTF sobre
JavaScript que no encontrará para ningún otro idioma, excepto
PHP .
Lo que sabemos con certeza es que la web es muy popular, no JavaScript .
La mayoría de los principales índices de clasificación de idiomas no indican que
JavaScript es el lenguaje de programación más popular. Ni siquiera la segunda, tercera o cuarta posición. Según el
IEEE Spectrum (American Journal), este es
el lugar
número 8 ,
PYPL número 5 ,
TIOBE número 7 ,
CodeEval número 6 .
Redmonk (una empresa analítica) utiliza estadísticas de
Github , que muestran un número muy alto de
JavaScript , precisamente porque las aplicaciones web escritas en cualquier idioma deben tener al menos algo de
JavaScript para funcionar en el navegador; No hay opciones. Por lo tanto,
Redmonk no puede dar una calificación objetiva de las anomalías de
JavaScript ; de lo contrario, el lenguaje más popular es
Java .
Las encuestas de usuarios, por ejemplo, de StackOverflow, también contienen un sesgo similar en la selección. ¿Cómo podemos decir que
JavaScript es un lenguaje popular cuando no tenemos más remedio que usarlo solo? (Afortunadamente, los traductores están disponibles para nosotros).
Debemos recordar eso para otras áreas (por ejemplo, servidores de red, juegos y gráficos, dispositivos móviles, computadoras de escritorio, etc.). Hay una gran variedad en la elección de un lenguaje de programación. Las aplicaciones web son extremadamente únicas. (Al menos hasta que finalmente tenga lugar el lanzamiento de WebAssembly).
Cierto
Déjenme ser muy claro:
JavaScript no es un buen lenguaje de programación para el desarrollo de software .
JavaScript fue diseñado para ser un lenguaje de script ligero y fresco para un navegador web. Como tal, fue hecho para ser flexible y extremadamente indulgente, con mecanografía débil. Ni siquiera tiene el tipo entero correcto o el tipo de matriz correcto. ¿Qué idioma es este?
Escritura débil, este es el talón de Aquiles del lenguaje de programación con el que se desarrolla el software. Aunque esto hace que escribir scripts rápidos y simples para un navegador web sea muy fácil, también funciona en su contra cuando escribe aplicaciones grandes que requieren seguridad y confiabilidad. Esta es la razón por la cual la mayoría de los idiomas principales suelen estar fuertemente tipados (no confundir con los estáticamente tipados). ¡Y es muy, muy importante!
La tipificación débil y la coerción arbitraria resultante demuestran una falta total de disciplina lingüística. Esto explica la mayor parte de la lista de
WAT y
WTF.generado por JavaScript. (Además, el autor proporciona enlaces a recursos en línea, donde se proporciona una lista de verrugas
JavaScript ).