En primer lugar, este es un artículo traducido del nodo de despedida de TJ.js. De hecho, he sufrido algún impacto después de leer este artículo, pero no estoy de acuerdo con algunas de las opiniones del autor. Por ejemplo, creo que el registro de paquetes de Node.js es una de sus muchas ventajas, pero GO no tiene en cuenta a este respecto. Debido al nivel personal, no entiendo muchas cosas al traducir. También fui al blog del autor y a StackOverflow para hacer algunas preguntas para obtener respuestas. Todavía hay muchas cosas que no están en su lugar en la traducción, y espero obtener un punto de vista.
PD. Como principiante Node.js, gracias a TJ por sus esfuerzos y ir hasta el final.
texto:
Diga adiós a node.js
Dejando el reino nodo.js
He estado luchando contra Node.js en producción durante el tiempo suficiente y desafortunadamente desde que ya no disfruté trabajando en este trabajo, al menos en este momento, es mi despedida oficial. Más importante aún, necesito un mantenedor.
El nodo es realmente excelente de alguna manera, pero después de todo, no es una herramienta adecuada para el tipo de software que me ha interesado últimamente. Todavía planeo usar Node como sitio web, pero si está interesado en mantener cualquier proyecto, simplemente deje un mensaje para escribir su nombre de usuario GitHub, nombre de usuario NPM y nombre del proyecto para informarme. Por lo general, todo lo que pido es que no cambie completamente su API existente. Si realmente quieres hacer esto, es mejor comenzar un nuevo proyecto.
KOA es un proyecto que continuaré manteniendo. (Con CO y amigos)
La historia del Santo Grial
Siempre me ha encantado C, pero todos los que trabajan en el desarrollo C saben que es valioso pero propenso a los errores. Es difícil demostrar la elección del lenguaje en el trabajo diario, ya que no es exactamente el trabajo más rápido. La simplicidad también es la razón por la que siempre ha sido elogiado, pero no irás muy lejos sin muchas plantillas.
A medida que más personas participan en el desarrollo de sistemas distribuidos, la tendencia de desarrollo del rendimiento del nodo sobre la usabilidad y la robustez me ha hecho más frustrado. Durante la semana pasada, he reescribido un sistema distribuido relativamente grande en GO, que es robusto, funciona mejor y es fácil de mantener y tiene una cobertura mejor comprobable debido a la belleza general y más fácil de desarrollar un código sincrónico.
No digo que Go sea un santo grial, no es perfecto, pero Go es una excelente respuesta para mí para muchos idiomas que existen hoy. A medida que cada vez más de estos idiomas de "próxima generación" como Rust y Julia encuentran su propio lugar y maduro, estoy seguro de que tendremos más soluciones excelentes.
Personalmente, estoy muy emocionado por Go debido a su velocidad de iteración, estoy muy emocionado de ver que están ansiosos por alcanzar la versión 2.0, y según las noticias que he escuchado, no tienen miedo de romper las grandes cosas originales. Si es cierto, estoy feliz, más porque creo que si es realmente beneficioso para este idioma, debería desglosar rápidamente lo que ya está allí. Pero tampoco soy un gigante de software que ejecuta muchos sistemas. :D
Editado por: Debo haber malinterpretado algunas listas de correo de envío, y no están ansiosos por hacer algunos cambios destructivos en ningún momento. @Enneff
¿Por qué ir?
Si el nodo funciona para usted y no tiene nada de qué preocuparse, sigue siendo una gran herramienta. Pero si algo te molesta, no te olvides de saltar de tu caja y ver qué más hay fuera de la caja, me atrae a unas pocas horas después de usar inicialmente ir para construir el producto.
Nuevamente, no estoy allí para decir que Go es definitivamente el mejor idioma y tienes que ir con él. Pero para su edad, es muy maduro y robusto. (Aproximadamente a la misma edad que el nodo). La reconstrucción de tipo es divertida y simple, las herramientas de tarea y depuración proporcionadas por GO son excelentes, y la comunidad tiene regulaciones muy fuertes sobre documentación, formatos, puntos de referencia y diseño de API.
Mientras estaba tan acostumbrado al nodo extremadamente modular y había experimentado la biblioteca estándar podrida de Ruby, cuando escuché por primera vez sobre Go, pensé que su biblioteca estándar era horrible. Después de zambullirme en este idioma, me di cuenta de que la mayoría de las bibliotecas estándar son necesarias en esta etapa, como la compresión, JSON, IO, IO, operaciones de cadena, etc. La mayoría de estas API están bien definidas y potentes. Es fácil escribir todo el programa con solo usar estas bibliotecas estándar.
Paquetes de terceros
La mayoría de las bibliotecas GO se ven similares, la mayoría del código de terceros que he usado hasta ahora es de alta calidad, y es difícil encontrarlos en el nodo porque JavaScript atrae a los desarrolladores en diferentes niveles de habilidad.
No hay registro para los paquetes GO, por lo que generalmente verá 5 o 6 mismos paquetes al mismo tiempo. En algún momento, esto puede causar cierta confusión, pero tiene un efecto secundario interesante, y debe decidir cuál es la mejor opción revisando cuidadosamente cada paquete. A través del nodo, generalmente hay paquetes de especificaciones como "Redis", "MongoDB-Native" o "Zeromq", por lo que se detendrá allí e inferirá que son los mejores.
Si está haciendo un trabajo distribuido, encontrará que los impresionantes tipos de datos subyacentes concurrentes de Go son muy útiles. Podemos obtener algo similar por los generadores en el nodo, pero en mi opinión, los generadores solo están hechos a la mitad. Sin el manejo de errores independientes, la pila de informes sigue siendo ordinaria incluso si es mejor. Cuando estas soluciones funcionan bien, no quiero esperar a que la comunidad se reorganice durante tres años.
En mi opinión, el manejo de errores de Go es sobresaliente. El nodo es excelente en términos de lo que tiene que pensar sobre cada error y decidir cómo hacerlo. Sin embargo, el nodo falla en:
Podrías repetir la devolución de llamada
No puede hacer una devolución de llamada y perderse en un estado inestable (por ejemplo, olvide pasar un error para manejar la devolución de llamada. Cuando ocurra un error, el nodo se tragará el error sin ningún comentario)
Es posible que reciba el error de comida para llevar
Los emisores pueden obtener múltiples eventos incorrectos
Olvidé el evento equivocado para lidiar con él arruinará todo
A menudo no estoy seguro de lo que se necesita para manejar los errores
El manejo de errores es muy redundante
La devolución de llamada es terrible
En Go, cuando termina mi código, termina y no puede volver a ejecutarlo en una declaración. Esto es incierto en el nodo. Pensará que un programa se ejecuta por completo hasta que una biblioteca llame inesperadamente una devolución de llamada varias veces, o no borra los manejadores correctamente y luego hace que el código se ejecute nuevamente. Es bastante difícil encontrar estas razones en el código de producción real, ¿por qué molestarse con estos? Otros idiomas no le permitirán experimentar estos dolores.
El nodo del futuro
Todavía espero que Node haga un buen trabajo, muchas personas invierten enormemente en él, y tiene ese potencial. Creo que Joyent y el equipo deben centrarse en la usabilidad: si su aplicación es frágil y difícil de depurar, refactorizar y desarrollar, el rendimiento no tiene sentido.
En 4-5 años todavía tendremos este error vago "Error: GetAddrinfo Eaddrinfo", y este hecho nos dice dónde están las prioridades de desarrollo del nodo. Comprensiblemente, cuando te enfocas en construir el núcleo del sistema, es fácil perderse estas cosas. Creo que los usuarios han expresado sus opiniones sobre tales cosas una y otra vez, pero no han visto ningún resultado. Por lo general, obtenemos algunas respuestas por afirmar que lo que tenemos ya es perfecto. En la práctica, este no es el caso.
Las transmisiones se interrumpen, las devoluciones de llamada no son fáciles de usar, los errores no están claros, las herramientas no son fáciles de usar, existen regulaciones comunitarias, pero parecen faltantes en comparación con GO. A pesar de esto, puedo continuar usando el nodo para algunas tareas específicas, como crear páginas web o algunas API o prototipos fragmentados. Si el nodo puede solucionar algunos de sus problemas fundamentales, entonces tiene la oportunidad de seguir siendo relevante, pero cuando hay otra solución que tiene un rendimiento más alto que la disponibilidad cuando los argumentos de mayor rendimiento y mayor disponibilidad no van demasiado lejos.
Si la comunidad de nodos decide adoptar generadores e implementarlos en un nodo muy central y pasar errores de manera apropiada, existe la posibilidad de hacer esta referencia. Esto mejorará completamente la usabilidad y la robustez del nodo.
La buena noticia es que hablé con un tipo grande y talentoso que contribuyó con el código central en Strongloop no hace mucho. Están adoptando explícitamente la forma correcta de solucionar estos problemas para que los nodos futuros sean más fáciles de trabajar escuchando las respuestas de los desarrolladores a la plataforma y planeando encontrar la forma correcta de solucionar estos problemas. No estoy seguro de cómo terminará el conflicto entre varias compañías en el desarrollo simultáneo de la parte central, pero espero que gane el conductor del desarrollador.
Esto no significa que sea un ataque contra las personas, muchas personas realmente talentosas están trabajando con o en el nodo, pero esto ya no es algo en lo que me interesa. He pasado un gran momento en la comunidad de nodos y conocí a algunas personas realmente interesantes.
¡El significado de la historia es que no debes estar restringido por tu propio círculo! Vea qué en otro lugar y podrá disfrutar de la programación nuevamente. ¡Hay muchas soluciones increíbles fuera de esto, y el error que cometí es que esperé demasiado para jugar con ellas!