¿Qué opina de los artículos en los medios que dicen que JS es malo y que Node.js está a punto de morir, etc.?

Durante años, ha habido un odio casi religioso, o al menos tribal, hacia JavaScript entre los desarrolladores geniales “en grupo”. JavaScript y PHP ambos. Si eras un programador hotshot, era genial odiarlo en JavaScript.

Lo sé, porque yo era parte de eso. Elegiría JavaScript como todos los demás. ¡Era un blanco tan fácil! Tantos problemas bien conocidos. Se colgó en el DOM, y como resultado tuvo que lidiar con tortuosas incompatibilidades del navegador. ¡Y había tantos malos desarrolladores de JavaScript!

Luego conocí y trabajé con un desarrollador que respetaba e insistió en que, en el fondo de JavaScript, había un núcleo de un buen lenguaje.

Al principio, realmente no me importó. Esto fue a principios de la década de 2000. Estábamos haciendo juegos casuales que tenían un tamaño máximo de descarga de 20Mb. Lua fue nuestro lenguaje de script preferido porque era muy pequeño, rápido, fácil de insertar y elegante. Para incluir un intérprete de JavaScript, estábamos buscando un mínimo de 10Mb de sobrecarga. Así que nos quedamos con Lua.

Y más tarde me doblé en Lua (un lenguaje que tiene un parecido sorprendente con las “partes buenas” de JavaScript) y escribí un juego que dependía mucho de él. Incluso escribí el código del lado del servidor en Lua. [1] De hecho, fue una locura rápida, y Lua era y es un lenguaje muy elegante, flexible y poderoso, pero comencé a ver sus grietas.

Finalmente, tuve la oportunidad de trabajar con JavaScript mientras trabajaba en Amazon. Tenía un juego en el que quería trabajar que se beneficiaría de JavaScript [2], por lo que tenía un motivo alternativo para aprender el idioma. Debido a ese prejuicio de JavaScript en toda la industria, mi ligero interés me consiguió el trabajo, ya que todos los demás dieron un paso atrás al pedir voluntarios.

Así que me sumergí en aprender JavaScript. Leí “JavaScript: The Good Parts” de Crockford. Aprendí sobre linters, Node.js, scripts de compilación, Grunt (y luego Gulp) y la transpilación.

Y dentro de JavaScript, como mi amigo había sugerido años antes, encontré ese lenguaje al que se refiere Crockford. Sí, hay un gran lenguaje dentro de JavaScript.

Pero lo más importante, hay un ecosistema increíble en Node.js. Uno de los puntos recurrentes de Lua era que no tenía un administrador de paquetes o ecosistema robusto. Tiene LuaRocks, pero juro que solo funciona de manera confiable en una plataforma a la vez para cada paquete, y esa plataforma rara vez es Windows (recuerde, soy un desarrollador de juegos, y los desarrolladores de juegos están fuertemente enfocados en Windows). Hay algunas excepciones notables, pero muchos de los paquetes también estaban incompletos o rotos de otras maneras. Esto significaba que poner en marcha un entorno siempre era un desafío, más aún si tenía que ser multiplataforma.

Pero Node.js tiene un gran ecosistema. NPM no es perfecto, pero es mucho mejor de lo que había usado antes. Y cuando un paquete funcionaba en una plataforma, normalmente solo funcionaba en todas partes. (Más recientemente, el administrador de paquetes de hilo hace un trabajo aún mejor que npm, pero estoy divagando).

Y JavaScript, aunque todavía no es tan rápido como LuaJIT, sigue siendo bastante rápido. Mucho más rápido que Ruby o Python. PHP, gracias a una decisión de ingeniería profundamente pobre en Facebook que ha resultado en una gran cantidad de esfuerzos de ingeniería, se ha mejorado en velocidad en varios órdenes de magnitud, pasando del peor desempeño a estar a la par con JavaScript para un rendimiento bruto, pero aún así no tiene un lenguaje excelente escondido en él. He usado PHP. Tiene las partes malas de JavaScript sin las buenas.

Hablando de esas “partes malas”, eso es lo que ayuda a evitar. Si no sabe qué es un linter, es una herramienta que se ejecuta en su código que aplica ciertas convenciones y prácticas de codificación. Uno puede configurarse para evitar que caiga en muchas de las dificultades de JavaScript, de modo que esté escribiendo un código que sea más fácil de mantener y más robusto.

Y rendimiento: si bien LuaJIT es increíblemente rápido, JavaScript es lo suficientemente bueno y, en las últimas versiones de Node, en realidad supera a OpenResty. [3]

Pero el clavo final en el ataúd de Lua, y lo que me puso sólidamente en la corte de JavaScript, no es parte de JavaScript propiamente dicho, sino TypeScript.

Como desarrollador de juegos, venía de lenguajes como C ++ con tipos estáticos. Me sentí liberado por la falta de restricciones de los tipos dinámicos en Lua, pero a medida que los juegos y otros programas se volvieron más complejos, los tipos dinámicos se convirtieron en un obstáculo. Son un ejemplo clásico de deuda técnica: más rápido para comenzar a expensas de pagarlos con intereses a medida que el proyecto se expande.

Así que probé TypeScript, temiendo que tendría las mismas restricciones que C ++, pero dispuesto a intentarlo para evitar que los proyectos se vuelvan inmanejables a medida que crecen. ¿Y sabes qué? TypeScript le ofrece un sistema de tipos casi tan poderoso como el de C ++, pero con toda la flexibilidad de JavaScript justo para preguntar.

Y fue entonces cuando finalmente hizo clic. JavaScript y TypeScript ganan. Y me alejé de muchos años de ser un gran defensor de Lua. [4]

Volviendo a la pregunta original: he tenido debates con Richard Eng. No estamos de acuerdo sobre lo que es importante. Creo que hay muchos JavaScript terribles, en gran parte porque JavaScript es fácil de aprender para un principiante. Pero JavaScript, el lenguaje, siempre fue un intento de ser mejor que otros lenguajes contemporáneos; se basa libremente en Self, un lenguaje prototípico que se basa libremente en Smalltalk, que es el lenguaje por el que Richard defiende. Sin embargo, no veo muchos trabajos de Smalltalk fuera de Europa occidental, por lo que, dependiendo de dónde viva, es probable que no sea una buena opción de trabajo, independientemente de los méritos del idioma. Y, como en el caso de Lua, creo que no se puede descartar el ecosistema, y ​​el ecosistema de Node gana en picas.

En cuanto a si debe aprender el último marco: si está buscando trabajo, vea qué trabajos en su área están contratando y aprenda eso. Es realmente así de simple.

Pero trate de hacer que su empleador use un linter, o use uno usted mismo. Y lea “Las mejores partes”. Hay un gran lenguaje escondido allí. Intenta usarlo en lugar del resto. Como beneficio adicional, aprenda TypeScript. Es el idioma predeterminado / preferido de Angular, y su uso es prácticamente un superpoder.

Buena suerte.

PD: No me preocuparía por Node.js “muriendo” pronto tampoco. JavaScript sigue siendo uno de los diez idiomas principales, [5] y como usted señala, hay muchas posibilidades de trabajo. Los informes de la muerte de Node son muy exagerados, parafraseando a Mark Twain.

Notas al pie

[1] OpenResty® – Sitio oficial

[2] Steel Dragons: un nuevo tipo de juego de mesa

[3] Puntos de referencia del marco TechEmpower

[4] Adiós, Lua · RealMensch

[5] Índice de Popularidad de Lenguaje de Programación PYPL

El autor de ese artículo no está equivocado, pero como citó a muchas personas a las que se hizo referencia que abandonaron JS y pasaron a otro idioma, tienen sus razones.

Para mí, está bien, ya que estoy más en Front End, y mucho menos en back-end.

Sí, yo también soy flojo. Sé PHP pero no quiero profundizar en él. Entonces, lo que me queda es JS, que creo que sé (¡hasta qué punto? ¡Realmente no lo sé! A veces me siento sorprendido de mí mismo por saber algo y no saber algo; ¡ambos!).

Node.js es una herramienta, úsala o déjala. Depende totalmente de usted.

JS es malo pero no tienes otra alternativa para Front End. Que así sea.

Para el backend, hay muchas alternativas. De hecho, cada idioma tiene un marco para crear aplicaciones del lado del servidor, incluso en Swift. Entonces, lo que harás, elige uno y sigue adelante; y luego, si siente que no está haciendo el trabajo muy bien, cámbielo.

Ese es el ciclo de desarrollo de software.

Es por eso que los arquitectos de software deben prestar atención a sus necesidades, sus posibles necesidades futuras, las herramientas y la escalabilidad de las herramientas. Las herramientas se refieren a todo lo que usarán para crear la aplicación y mantenerla viva el mayor tiempo posible.

Había hecho una aplicación en PHP, ahora se me está yendo de las manos y ahora se está yendo de las manos y no puedo administrarla en PHP (hay buenas herramientas, marcos para hacerlo, pero recuerden, mencioné sobre la pereza mío). Así que lo estoy rehaciendo en JS a nivel de back-end.

No cambiaré hasta que sienta la necesidad de hacerlo.

El mercado está lleno de aplicaciones de todos los idiomas y marcos.

Si conoce JS, hay trabajos; si conoces Go, hay trabajos; Si conoce PHP, hay trabajos. Elige cualquier cosa y sigue adelante.

Las empresas contratan personas por su adaptabilidad y menos por su conocimiento del idioma. Si tienen experiencia en hacer ambas cosas, son contratados.

Sugeriré seguir trabajando en lo que sea que estés trabajando.

Había escuchado el análisis similar de NodeJS antes de 2–3 años atrás. Es más famoso ahora.


Si te gustó mi respuesta, te agradecería que la votaras al presionar el botón azul claro a continuación y puedas seguirme si quieres leer más como estos. O puedes visitar mi blog Time to Hack.

Decir que JS es un lenguaje descuidado es como decir que el cielo es azul, ¡bueno, duh! Fue diseñado de esa manera (para no competir con Java, que era el lenguaje que el socio de Netscape, Sun, estaba promoviendo).

Pero muchos de los problemas en realidad provienen de no usarlo según lo previsto. Si lo usa para habilitar algún botón cuando alguien completa un campo de formulario o algo, en realidad funciona bastante bien; es solo cuando comienza a escribir programas de más de 50–100 líneas que s ** t llega al abanico.

Sin embargo, la realidad es que a menudo no tiene otra opción cuando se trata de qué lenguaje de programación usar, por lo que prácticamente toda discusión sobre los méritos de los diferentes lenguajes de programación es solo por diversión , excepto si está sucediendo entre diseñadores de idiomas, lo cual es más probablemente no lo es (pueden evaluar un idioma y ver las fallas sin necesidad de señalarlas; a menudo es bastante obvio dónde las cosas saldrán mal y dónde no, se necesitan datos duros, no opiniones).

TL; DR: Sí, JS es malo. No, esto no te excusa de tener que aprenderlo.

Tony Hoare – Wikipedia, el hombre que inventó la referencia “nula” en términos informáticos lo llamó su “error de mil millones de dólares”.

JS casi de forma única se triplica en este error de diseño con nulo, cualquiera e indefinido. Ese hecho por sí solo es causa de una elevación vigorosa de las cejas. Incluso entre otros lenguajes de interferencia de tipo / tipo inestable, JS se destaca por su extraña extraña (solo PHP se acerca).

¿Eso significa que debes ignorar a JS? No. Debe saberlo si está haciendo algo en un navegador web. Incluso si va a usar un transpiler para evitar las trampas de oso JS más desagradables (uso TypeScript), debe comprender el resultado. Eso significa que JS también es una habilidad esencial para muchos trabajos, como habrás notado.

No estoy de acuerdo con Richard sobre los frameworks y esencialmente nunca hago nada sin al menos Vue y generalmente Angular. Los marcos le brindan una gran cantidad de funcionalidades de alto nivel donde alguien más ya ha trabajado en lo peor para usted. Escribir todo su propio JS desde cero se vuelve molesto ya que olvida otro caso en el que cambiar los argumentos a un operador hace algo extraño. Sin embargo, podría comprometerme solo con JQuery (si tuviera que hacerlo, lo que no hago).

El lado del servidor JS (Node, MEAN) es un asunto completamente diferente. No puedo pensar en un caso en el que haría eso, excepto “órdenes de arriba”. Aparte del hecho de que siempre hay mejores soluciones (¡es JS!) No me gusta usar el mismo lenguaje para toda la pila en principio general. Es muy fácil comenzar a ver todo como un clavo cuando estás golpeando un martillo de un solo idioma todo el tiempo.

TL; DR: Aprenda ES6 y webpack. Eso te dará una idea de por dónde empezar en MEAN. Luego, implemente en Angular / Vue / TypeScript / Go / Python / C # / Java si puede. Si no te dejan, entonces ReactJS / ExpressJS no es ciencia espacial con tu conjunto de habilidades.

¡Hola!

Creo que no encontrarás ningún desarrollador de software honesto que te diga que JavaScript es un gran lenguaje y que le encanta usarlo. Es decir, desarrolladores honestos.

Incluso hay un libro llamado “Las partes buenas de JavaScript” o algo así y la mera noción de la existencia de este libro me da escalofríos.

Pero aquí está la cosa: la mayoría de los desarrolladores de JS saben de su existencia y es probable que pueda hacer cosas buenas con las partes buenas de JavaScript.

NodeJS es, en cambio, una bolsa de rocas completamente diferente. Ahora, déjenme ser completamente claro: creo que NodeJS es una idea realmente horrible, implementada mal y con una posibilidad muy, muy, muy grande de convertirse en un desastre no mitigado muy pronto.

Déjame explicarte mi razonamiento:

  1. Es una idea realmente horrible: esto se debe a que sus creadores pensaron que sería divertido aprovechar la popularidad de JavaScript para potenciar el back-end. El problema es que la gran mayoría de esos desarrolladores no tienen la menor idea sobre la escala, la sincronización y una serie de otros temas que son absolutamente fundamentales para hacer back-end
  2. Implementado mal: cómo un desarrollador acaba de romper Node, Babel y miles de proyectos en 11 líneas de JavaScript, Rage-quit: Coder no publicó 17 líneas de JavaScript y “rompió Internet”. En serio, esto es malo
  3. Una oportunidad muy, muy, muy, muy grande de convertirse en un desastre no mitigado: Ver 2. En serio, esto ni siquiera está en el ámbito de “malo”. Esto es, no sé, más que malo. Es ridículo con un poder infinito positivo. No hay una hipérbole que sea casi suficiente para describir la cantidad de error que es.

Te daré el consejo que le di a otra persona aquí: aprende Haskell, luego usa JavaScript de manera funcional. Se puede hacer. Aprenda JQuery, Angular y KnockoutJS. Eso es. Usa esos. Deja el resto solo.

Si hubiera seguido esa filosofía (sepa dónde está el dinero) en los años 60 y 70, sería un programador de mainframe, sin nada para escribir programas. Su teléfono es más potente que un IBM 360, por lo que la tecnología ha superado la filosofía.

JavaScript es un lenguaje utilizable pero, como con cualquier lenguaje diseñado cuando las reglas estaban en algún lugar entre suelto e inexistente, es posible escribir un código terrible con él. También es posible escribir un gran código con él.

Es el programador el que determina la calidad del código, no el idioma. Todavía hay programas COBOL que deben ser compatibles, y habrá nuevos idiomas que saldrán todo el tiempo. Eso no significa “dejar todo y aprender el último idioma” todo el tiempo. Hacer sombrero es una señal de que la programación es un pasatiempo para ti, no una profesión.

Son bastantes preguntas en una.

¿Qué hago con el tren de exageración / odio?

Los programadores promocionarán u odiarán todo, desde su lenguaje de programación hasta su editor de texto. En lugar de preocuparse por alguien que escribe una mierda matizada sobre cómo odian los espacios y las pestañas, se impondrá el código justo supremo. Si bien no debe despreciar lo que dice la gente, ya que a menudo puede impartir consejos sabios, debe aprender a separar la señal del ruido.

Se recomendó aprender tecnología donde fluye el dinero.

Si su objetivo es aprovechar su experiencia de programación para ganar dinero, entonces sí, eso parece un movimiento inteligente. Si bien puede obtener puntos de estilo arbitrario de algunas personas por aprovechar un lenguaje moderno u otro en el mejor de los casos, esos puntos pueden recompensarlo con algunas cervezas, pero es poco probable que pague el alquiler.

¿Debo aprender el último marco de o no?

Debe estar al tanto de las tendencias en cualquier lenguaje de programación que elija aprender y debe considerar invertir en nueva tecnología que esté generando un importante intercambio de ideas y, de un vistazo, parece estar basado en sólidos principios de desarrollo. En lo que respecta a JavaScript, Angular 1.xy React son bastante prolíficos en el front-end y Express es bastante dominante en el back-end (con Koa / Hapi y GraphQL en el radar).

Sí, vi a Richard odiando a JS con sus entrañas, y no está solo …

Por otro lado, hay personas como Eric Elliott que afirman que es el mejor idioma del mundo …

Richard hablaría sobre el síndrome de Estocolmo … pero eso es un poco simplista.

Personalmente, me mantengo en el medio: no es mi idioma preferido (aprecio la escritura fuerte), sé que tiene defectos y partes feas, y aprendí a evitarlos … Por otro lado, aprecio que me permita usar algunos estilo funcional de codificación (con Lodash, particularmente, y también con RxJS) y su evolución (ES6) va en la dirección correcta.

No creas que los que te dicen un idioma o incluso un marco (establecido) está a punto de morir, rara vez es cierto …

Node.js es “un tiempo de ejecución de JavaScript” que, con NPM, se convierte en un ecosistema de desarrollador completo, como ruby ​​o php o python, etc.

Eso no está mal, y no está a punto de morir.

Lo que es malo, y está a punto de morir, es esta idea de que “el nodo se comerá todo” y “todo se hará con el nodo”.

Los mismos phanboys que presionan a Node hoy estarán presionando algo más mañana.