Escribiría mis rencores personales sobre el Javascript. ES6 arregló muchas cosas, por lo que este lenguaje es al menos soportable para mí ahora.
Debo decir que probablemente piense que este lenguaje tiene un “gran potencial” porque tiene funciones de primera clase, alta disponibilidad (¡cualquier navegador!), Un gran seguimiento celoso y algunas bibliotecas frontales que le permiten escribir impresionantes demostraciones visuales. Este es probablemente el único punto positivo de esta plataforma de tiempo de ejecución.
Primero , no hay forma de escribir nada. Por diseño. Javascript es un lenguaje con escritura 100% dinámica. Esto realmente obstaculiza seriamente su capacidad de escribir código autodocumentado, porque cuando lee la definición de alguna función, no tiene idea de cuáles son sus argumentos, qué puede hacer con ellos aparte de lo que hace actualmente esta función.
- Cómo implementar una aplicación Django en AWS
- ¿Cuáles son las ventajas y desventajas del estilo CGI OO y el estilo CGI orientado a funciones en Perl?
- Cómo estructurar un CMS simple
- ¿Es posible trabajar de forma remota como desarrollador Front End y seguir viviendo de manera decente?
- ¿Dónde puedo obtener un dominio gratuito (.com) y alojamiento gratuito para construir un sitio de WordPress?
En segundo lugar , su sistema de tipos también es realmente débil. Es tan débil y las reglas de conversión implícitas son tan intrincadas que puedes obtener errores muy oscuros de la nada. Este es un problema tan malo en Javascript que es fuente de bromas en la industria. Hay varios videos de WTF que lo explican en detalle. Y si desea combatir este problema con el uso de `===` comparación estricta en todos los lugares donde necesita verificar la igualdad, se está metiendo en un primer problema: es realmente muy difícil deducir los tipos de objetos leyendo el código , y Javascript no proporciona ninguna ayuda. Su comparación estricta puede ser perjudicial en lugar de útil, porque, por ejemplo, si compara la cadena de la entrada del usuario con el número codificado, siempre obtendrá “falso”. Su lógica es correcta, pero su gestión de tipos no lo es. Incluso si está dentro de un tiempo de ejecución tipado dinámico débil.
Tercero , este es el único idioma que conozco que no incluye ningún sistema de módulos, es decir, llamar a un archivo de código fuente desde otro archivo de código fuente. Por diseño. Porque el código Javascript está siendo invocado por los fragmentos “ en el navegador. Por lo tanto, su código HTML se convierte en su sistema de módulos, lo cual es completamente absurdo y difícil de realizar en aplicaciones grandes y serias. ES6 introdujo el concepto de módulos (finalmente), pero aún no puede tenerlo dentro de los navegadores, al menos por ahora, porque los módulos ES6 se importan estáticamente, lo que significa que primero el navegador debe descargar todos sus archivos de código fuente, luego realizar el importaciones, y solo entonces lo ejecutará. La solución actual es agrupar todos los módulos en un solo archivo Javascript que se llama desde la página HTML, pero conduce a problemas de código innecesarios en algunas páginas, lo que lleva a otra solución ad hoc. Además, tenemos módulos de estilo NPM, que se importan dinámicamente, en tiempo de ejecución, y como resultado son totalmente incompatibles con los módulos ES6. En resumen, esto es un desastre, y es completamente inaceptable en el lenguaje de nivel de producción.
Cuarto , configurar una cadena de herramientas para el desarrollo moderno de Javascript fullstack es un infierno. Es una pesadilla. Ni siquiera explicaré por qué. Simplemente intente instalar y configurar las siguientes piezas de tecnología desde la carpeta vacía a la página de trabajo index.html en el navegador:
- Node.js
- NPM
- Express.js para el código de back-end
- Ruta del índice Barebones para Express.
- Babel para ES6
- Webpack + recarga de módulo caliente
- Sus bibliotecas favoritas para el desarrollo frontend. Quizás tengas suerte si pruebas con vainilla. Excepto que no: el barebones Javascript no contiene nada necesario para un desarrollo web serio, de todos modos terminará con algunas dependencias.
Quinta . ES6 solucionó todo esto, pero la sintaxis fue irritante inicialmente. La variable `this` cambia su valor dependiendo de dónde se llamó su función. Palabra clave `function` en todas partes. No hay otras abstracciones en el Javascript, y la palabra clave más utilizada es de 8 letras de largo. Es doloroso escribir. La estúpida palabra clave `var` siempre es necesaria pero nunca obligatoria, por lo que no hay forma de imponer su presencia.
Sexto . No precisa aritmética de enteros. Todos los números son “dobles”. WHAAA ?!
Siete . La API de fecha / hora incorporada es horrible. No es intuitivo, tiene sorpresas desagradables (por ejemplo, la salida de la llamada `getMonth ()` o las marcas de tiempo son milisegundos desde el comienzo de la época de Unix), es simplemente difícil de usar. Incluso la clase PHP DateTime recorre círculos alrededor de la API de fecha / hora de Javascript, y PHP es probablemente el lenguaje más odiado y despreciado.
Ocho. Por diseño, dados los puntos 1 y 2, nunca obtendremos la autocompletación adecuada e “Ir a la definición” para Javascript. Buena suerte navegando más de 100 bases de código KLOC sin él.
Noveno . En cuanto a la depuración, no, no es difícil de depurar. Incluso me gusta la consola Javascript y las maravillas de `console.log`, que es capaz de imprimir de manera bonita cualquier tipo de objeto que arroje dentro de la consola. Los navegadores modernos incluyen el depurador de Javascript de forma predeterminada, y solo puede establecer un punto de interrupción en cualquier línea de código que desee y activarlo mediante un toque inteligente con la interfaz de usuario. El problema es que en 2017 las bases de código Javascript generalmente se compilan a partir de archivos de código fuente separados en un blob minible ilegible, que es completamente inútil para depurar. Esta es una razón por la que no puede simplemente abrir su sitio de producción, establecer un punto de interrupción y depurar algo en vivo. Debe tener una copia local o un servidor de prueba configurado sin minificación.
Décimo . Todo Javascript en la página se ejecuta en el mismo hilo de ejecución. ¿Se incluye un error de sintaxis en un archivo de código fuente Javascript separado para rastrear el comportamiento de los usuarios? Aquí está su IU destruida o pantalla blanca si su sitio web es una aplicación de una sola página.
En conclusión, personalmente no me gusta por completo el Javascript por su biblioteca estándar miserable que me obliga a depender de un código de terceros altamente volátil para todo. Su semántica es severamente limitante porque la única abstracción que tienes es la función, y con ES6 tenemos una sintaxis concisa que resuelve algunos problemas pero es realmente difícil de leer. Todavía no tenemos un sistema de módulos que funcione de forma nativa en los navegadores, y probablemente nunca lo hará. La cadena de herramientas, aunque impresionante, es muy difícil de configurar y configurar.
Este entorno de lenguaje es simplemente doloroso de usar después de cualquier otro lenguaje de producción. Mira lo que puedes hacer con bases de código Java puras en algunos IDE decentes como IntelliJ IDEA. Su conjunto de características se parece al juguete de un niño después de monstruos como C ++ 14 (ni siquiera mencionaré 17) o Haskell. Su mejor apuesta en la gestión de dependencias es agrupar todo, o puede obtener compilaciones rotas de la nada en cualquier momento.
Lo único que me hace tocarlo es porque Javascript ha ganado el concurso de popularidad y es el único idioma utilizado en los navegadores web, por lo que no hay otra opción y no hay forma de evitarlo.