Entrevista con Ryan Dahl, creador de Node.js

Ryan dahl Ryan Dahl presentó Node.js en 2009, se retiró unos años más tarde e hizo un nuevo proyecto la semana pasada: deno: un tiempo de ejecución seguro de TypeScript en V8 ( GitHub , desempaquetado ).

Es hora de recordar la entrevista que Ryan le dio al podcast de Mapping The Journey en agosto de 2017, sobre sí mismo, su carrera, sobre Node.js y por qué dejó de hacerlo, en qué está trabajando ahora (en ese momento).

Un fragmento de la traducción de esta entrevista ya estaba en Habré: Creator of Node.js: "Para los servidores, no puedo imaginar otro idioma que no sea Go" . Esta publicación contiene la traducción completa.

Ryan Dahl es ingeniero en el proyecto Google Brain y creador de Node.js, un tiempo de ejecución de JavaScript basado en el motor Chrome V8. Ryan se dedica actualmente a la investigación de aprendizaje profundo. Principalmente trabaja en la transformación de imágenes: coloración y súper resolución. Participó en el desarrollo de varios proyectos de código abierto, incluidos HTTP Parser y libuv.

Pramod: Hola a todos. Bienvenido a Mapping the Journey. Cuando se trata de Node.js, todos conocen el nombre de Ryan Dahl. Mostró que estamos tratando incorrectamente la entrada / salida, y nos enseñó cómo desarrollar usando el modelo "puro asíncrono". Nuestro invitado de hoy es Ryan Dahl, un hacker, talentoso programador y creador de Node. Ryan, estoy muy feliz de conocerte, es un gran honor. Bienvenido

Ryan: Hola! También me alegro de verte.

P .: Ryan, eres mejor conocido como el creador de Node. Dime, ¿qué hiciste antes de interesarte por la tecnología?

R: Cuando era niño, vivía en San Diego. Cuando tenía 6 años, mi madre me compró una Apple 2C, así que tuve acceso a una computadora bastante temprano. Por cierto, ahora tengo 36 años. Así que crecí justo durante la formación de Internet. Al principio estudié en una universidad local, y después de él ingresé a la Universidad de California en San Diego para estudiar matemáticas. Luego ingresé a la escuela de posgrado en matemáticas en la Universidad de Rochester. Sí, allí estudié topología algebraica, una disciplina bastante abstracta que me pareció muy hermosa. Pero después de un tiempo me aburrí, porque pensé que ella no tenía aplicaciones de la vida real. Después de graduarme, decidí obtener un doctorado, pero me di cuenta de que no quería dedicar el resto de mi vida a las matemáticas y dejé el programa. Compré un boleto de ida a Sudamérica y pasé un año allí como "estudiante hambriento". Y luego comenzó a hacer sitios con un chico, Eric. Y así comenzó mi carrera como desarrollador. Hice un sitio en Ruby on Rails para una compañía de snowboard.

P .: ¡Genial! Esta es probablemente una experiencia interesante: salga del programa de doctorado, vaya a Sudamérica y conviértase en desarrollador web.

R .: Lo haría. Es solo que te acostumbras a trabajar con tareas abstractas después de graduarte, y el desarrollo del sitio web es un proceso muy específico. Pero intenté convertir todo esto en una especie de hermosa teoría matemática, como las que estudié en la magistratura. Creo que me gustó mucho que Ruby te permita expresar tus pensamientos más claramente durante el desarrollo. Esto me interesó y provocó algunos pensamientos. Creo que se trata solo de Rails. El esquema Modelo-Vista-Controlador no era nuevo entonces, pero me parece que se hizo popular precisamente gracias a Rails. Fue esta combinación lo que me gustó.

P: Sí, el desarrollo web es una actividad interesante, y Ruby es una gran herramienta. Después de eso, fuiste un desarrollador independiente en Alemania. Uno de tus proyectos fue Node. Continuaste trabajando en ello durante otros 6-8 meses, ¿verdad?

R: Eso es. Después de Sudamérica, mudé a la niña a Alemania: es alemana y necesitaba regresar a la universidad. Comencé a ir a una conferencia de Ruby donde la gente discutió este nuevo paradigma Modelo-Vista-Controlador. Allí conocí a un chico llamado Chris Neukirchen. Creó Rack, un proyecto que esencialmente era una abstracción simplificada de un servidor web. Rack convirtió el servidor web en una interfaz con una única función en la que podía realizar solicitudes y recibir respuestas. Luego trabajé con el módulo Nginx en un proyecto independiente para Engineyard. Permítame recordarle que en Nginx todo funciona de forma asíncrona, por lo que cuando crea un módulo para él, debe evitar bloqueos. Conocí el proyecto Rack de Chris Neukirchen justo cuando estaba trabajando con E / S sin bloqueo en el servidor web Nginx. Creo que es por eso que tuve la idea de combinar estas dos cosas.

P .: Resulta que, sobre la base de Rack y Nginx, surgió la idea de desarrollar un marco que ejecute el código Javascript desde el lado del servidor y aumente significativamente el rendimiento. ¿Cómo decidiste pasar los próximos 6 meses haciendo esto?

R: Estos dos elementos, Rack y Nginx con su asincronía, juntos simplificaron la interfaz del servidor web. En diciembre de 2008, Chrome fue lanzado. Y con él, el motor JavaScript V8. Más precisamente, no el motor en sí, sino el tiempo de ejecución donde tiene lugar la compilación JIT. En general, con el lanzamiento de V8, comencé a entenderlo. El V8 parecía interesante, ordenado y funcionaba rápido. Y de repente me di cuenta. JavaScript es de un solo subproceso, y todos ya están escribiendo algoritmos sin bloqueo en él. Quiero decir, todos ya están haciendo solicitudes AJAX en el navegador, que de todos modos no están bloqueando. Pensé: genial, lo que necesito es JavaScript más E / S asíncrona y un poco de funcionalidad para un servidor HTTP. Y me inspiró tanto la idea que sin descanso trabajé en ella durante los siguientes 4 años.

P .: Sí, JavaScript y las E / S asíncronas funcionaron bien. Creo que los desarrolladores solo estaban esperando ese marco. Y le pregunto por curiosidad: cuando desarrolló Node, ¿tuvo algún tipo de mentor o lo logró usted mismo?

R: En general, hice todo por mí mismo. Algunos de mis amigos son programadores y me dieron algunos consejos, pero comencé a trabajar solo en mi habitación. Luego me mudé a San Francisco y conocí a muchos programadores realmente profesionales en el trabajo en Joyent. Ya allí, muchos dieron consejos y sugerencias para Node.

P .: Claro. Cuéntanos sobre el proceso de desarrollo de Node. Por supuesto, ha pasado mucho tiempo desde 2009 ...

R: Para mí, los mejores momentos de la vida son cuando me sumerjo en algo con la cabeza, cuando creo en alguna idea. Y cuando tengo tiempo para trabajar diligentemente en ello. Node fue una idea que necesitaba ser implementada, y de no ser por mí, alguien más la habría tomado. Dio la casualidad de que tenía poco trabajo y suficiente tiempo libre. Podría dedicar Node durante varios meses, solo en ese momento puedes lanzar la versión inicial. Y fue genial y divertido.

P .: Clase, hicieron un gran trabajo. El nodo se basa en el modelo de programación asíncrono puro. ¿Crees que esta idea funcionó bien?

R: Una pregunta interesante. Han pasado varios años, y yo mismo no he trabajado en Node en algún lugar entre 2012 y 2013. Por supuesto, Node ha crecido enormemente durante este tiempo. Cuando se fue por primera vez, di muchas conferencias e intenté explicar que tal vez estábamos haciendo todo mal y que las E / S sin bloqueo ayudarían a resolver muchos problemas de desarrollo. O podríamos olvidarnos completamente de los hilos y salir adelante con abstracciones de procesos y serialización. Pero al mismo tiempo, dentro del marco de un proceso, se procesarían muchas solicitudes y, por lo tanto, alcanzaríamos la asincronía. En ese momento, creía sinceramente en esta idea, pero en los últimos años me di cuenta de que está lejos de ser la única oportunidad. Especialmente después del lanzamiento de Go. En mi opinión, Go apareció incluso antes, pero lo escuché por primera vez en 2012. Luego ya tenía un buen tiempo de ejecución y hilos verdes de alta calidad, y con todo esto era fácil usar abstracciones. Era como bloquear E / S, pero, según tengo entendido, la interfaz entre Go y el sistema operativo a través de hilos verdes en realidad no es de bloqueo.

Sin embargo, todo esto estaba disponible para el usuario en forma de una interfaz de bloqueo y, en mi opinión, este modelo tiene ventajas. Como regla general, es más fácil entender lo que sucede en los algoritmos de bloqueo. Cuando hay una secuencia de acciones, puede seguirla: realice A, espere una respuesta o tal vez detecte un error. Luego ejecute B y también obtenga una respuesta o error. En Nodo, todo es más complicado porque tienes que saltar a otra llamada de función.

P .: También me gusta mucho el modelo de programación en Go. Usar Goroutines es un placer. Ahora mi equipo está escribiendo una aplicación distribuida en Go.

R: Sí, para algunos tipos de aplicaciones Go es el más adecuado, por ejemplo, al construir un servidor. Ni siquiera puedo imaginar cómo trabajar con otra cosa. Aunque, sin embargo, creo que el paradigma de no bloqueo funcionó muy bien para Javascript, en el que no hay hilos. Además, en Javascript ahora existe la palabra clave asíncrona y puede trabajar con funciones asincrónicas, por lo que ya no tendrá que apresurarse entre las funciones anónimas y comprender la naturaleza de las devoluciones de llamada. Las versiones más recientes de Javascript han facilitado el trabajo. Sin embargo, creo que Node no es la mejor opción para un servidor web a gran escala. Para esto, yo mismo definitivamente elegiría Ir. Honestamente, por eso dejé de trabajar en Node. Me acabo de dar cuenta de que este no es un sistema ideal para desarrollar un servidor.

Curiosamente, me parece que Node realmente se mostró brillantemente solo en el lado del cliente. Le permite utilizar scripts con astucia al crear sitios. Por ejemplo, Browserify, por así decirlo, incluye Javascript del lado del cliente. Esto permite que el cliente procese JavaScript en el servidor. Otro ejemplo son los pequeños servidores de desarrollo, o incluso los servidores de producción que manejan el tráfico en vivo. El nodo puede ser muy útil y conveniente para algunas cosas. Pero si está creando un gran servidor DNS distribuido, no recomendaría elegir Node.

P: A los desarrolladores de todo el mundo les resultará útil pensar en ello. Para cualquier empresa, es importante elegir la herramienta adecuada, por lo que tiene una actitud bastante objetiva hacia Node. Primero presentó Node.js en la conferencia JsConf 2009 de Berlín. ¿Quizás te sorprendió que haya logrado el éxito tan rápido?

R: por supuesto. En general, durante cuatro años enteros no dejé de preguntarme. Node se ha desarrollado a un ritmo increíble y a la comunidad realmente le gustó.

P: Después de eso, te uniste a Joyant en San Francisco y trabajaste en Node de forma continua, ¿verdad? Cuéntanos tu experiencia allí. Los desarrolladores estaban muy contentos y tú estabas en el centro de los eventos.

R: Sí, fue uno de los mejores momentos de mi vida. Realmente estaba en el centro de los eventos, fui a varias conferencias. Una vez que incluso visité Japón, y la gente me pidió que me tomara una foto ... Incluso me sentí incómoda. Cuando comenté algo en la red, sentí que cientos de personas me respondieron de inmediato. Luego me di cuenta de que tenía que elegir cuidadosamente mis palabras y pensar en cómo me percibían; parece que realmente me escucharon, y esto fue inusual. No me gustó todo esto. Después de todo, soy programador y solo quiero escribir código, y a veces expreso mi opinión sin demasiada precaución. En este sentido, estaba un poco incómodo.

P: ¿Tenía 29 o 30 años cuando creó Node? Y ya se ha convertido en una tecnología tan influyente.

R: si. Pero entonces aún era más probable que fuera un desarrollador novato.

P .: Ryan, en ese momento había muchos proyectos diferentes que funcionaban con JavaScript en el lado del servidor. Node no fue la única solución, pero fue la más exitosa, ¿por qué piensas?

R: Es cierto, varias personas intentaron adaptar JavaScript para el trabajo del servidor. Ahora ni siquiera recuerdo sus nombres.

El hecho es que en todos estos proyectos se utilizó el bloqueo de entrada / salida, y esto no funcionó muy bien con la forma en que se organizó JavaScript, ya que no funciona con secuencias. Y si usa el bloqueo de E / S, entonces no podrá procesar solicitudes. Es decir, hay que procesarlos uno a la vez, y no sale nada. Además, agregué un módulo HTTP de calidad y mostré cómo configurar un servidor HTTP, así como un servidor TCP simple. Traté de asegurarme de que estas cosas funcionaran correctamente y que las personas pudieran construir sitios sin ningún problema. Debo admitir que crear un servidor web no es una tarea fácil, y muchos proyectos necesitaban una funcionalidad que la comunidad tenía que completar sola. Pero nadie construyó nada, porque no había nada con lo que usar el sistema. En mi opinión, para cualquier nuevo marco, o el producto en su conjunto, necesita una muestra básica que pueda usar de inmediato. Esta era la ventaja de Node: las personas podían simplemente descargarlo y configurar un servidor web de inmediato.

P .: De hecho, los buenos diseños son muy importantes, al igual que la facilidad de instalación y uso. Muchos más ya podían escribir código en JavaScript, por lo que podían ponerse manos a la obra de inmediato. Cuando comencé a trabajar con Node, mi conocimiento de JavaScript también me ayudó mucho.

R: Me parece que estamos acostumbrados a pensar que cambiar de idioma es bastante fácil. Pero incluso si ya conoce algún idioma, no es tan fácil construir un contexto para un nuevo idioma. Muchos desarrolladores ya conocen Javascript, por lo que están interesados ​​en usar un lenguaje familiar en un nuevo contexto, con nuevas herramientas. Resulta que el mismo idioma abre más oportunidades.

P .: Eso es seguro. En 2012, una gran cantidad de desarrolladores trabajaron en Node. ¿Por qué decidiste irte y entregar el proyecto a Isaac Schluter de Joyent?

R: Creo que hubo dos razones para esto. Luego trabajé en Node durante 4 años y, en general, hice todo lo que planeé. Nunca esperé que Node se convirtiera en una gran API. Mi idea era crear un núcleo pequeño y compacto, sobre el cual las personas pudieran construir sus módulos. Quería admitir varias características clave. Los módulos de extensión se agregaron desde el principio, luego arreglamos las bibliotecas de red, HTTP, UDP, TCP y proporcionamos acceso a todos los sistemas de archivos. Luego, un equipo de cinco personas se encargó de la importante tarea de configurarlo todo para Windows. Queríamos usar abstracciones de Windows, puertos de finalización, para E / S asíncrona. Por lo tanto, tuvimos que reescribir la biblioteca raíz, y de esto obtuvimos la biblioteca libuv. En un momento, todo estaba listo, y lanzamos Node para Windows. Entonces pensé: genial. He logrado mi objetivo y me alegro de haber logrado recordarlo todo. Por supuesto, todavía hay miles de errores que se pueden solucionar hasta el final de la vida, pero el equipo tiene suficientes personas que pueden encargarse de esto. Yo quería hacer otras cosas. Además, salió Go, y para mí Node ya no era la única solución para el desarrollo del servidor. Bueno, no quería ser el centro de atención cada vez que escribía algo en un blog.

P .: Claro. Sí, no a todos les gusta. Cuando comenzó a trabajar en Node, probablemente tenía ciertos planes. ¿Crees que Node los ha completado ahora?

R: Por supuesto, Node superó todas mis expectativas. Después de todo, ahora es utilizado por cientos de miles de personas.

P .: Dígame, ¿qué decidió hacer cuando completó esta interesante etapa de desarrollo de Nodo?

R: Después de dejar Joyent, me mudé a Nueva York y tomé unas cortas vacaciones para trabajar en mis propios proyectos. Tuve varios de ellos. Instagram salió en ese momento, luego era original y sin complicaciones. Todos decían: "Guau, es tan simple que lo habría construido yo mismo". Y, por supuesto, yo también lo pensaba. Tenía un proyecto de red social, también construí un sistema de compilación para C ++ y otro sistema de compilación para HTML, que era similar a Browserify: empaquetaba de forma inteligente Javascript y HTML. En general, tuve muchos proyectos, pero me parece que ninguno de ellos fue realmente exitoso. Algunos de ellos todavía están en desarrollo, por ejemplo, mi red social. Algún día lo tomaré de nuevo. Eso es lo que hice por un tiempo. Luego comencé a leer y aprender sobre redes neuronales convolucionales y cómo se resuelve el problema de la clasificación de imágenes, y estaba muy interesado en el aprendizaje automático.

P: También fuiste residente del programa Google Brain. ¿Cuáles son tus impresiones?

R: Sí, recientemente pasé un año en Mountain View. Volveré un poco: TensorFlow salió hace dos años.

Al mismo tiempo, en el laboratorio de aprendizaje automático, Google Brain anunció un nuevo programa para residentes, según el cual unas 20 personas están invitadas allí. Creo que la idea era invitar a personas que no están necesariamente familiarizadas con el aprendizaje automático, pero que piensan en matemáticas y programación. Aquellos que estaban interesados ​​en trabajar con estas nuevas ideas. El aprendizaje automático cambia constantemente y se está haciendo mucho trabajo, pero ahora la comunidad finalmente se ha centrado en las redes neuronales. Se cree que este es el algoritmo más eficiente para el aprendizaje automático. Por lo tanto, surgió la idea: reunir personas que estén interesadas en trabajar con el nuevo marco TensorFlow, para posiblemente llegar a algunas conclusiones interesantes. Pasé un año en el laboratorio. Básicamente, desarrollé modelos y escribí artículos científicos sobre ellos. En su mayor parte, trabajé con tareas de transformación de imágenes. Es decir, si hay algún tipo de imagen de origen, debe predecir qué imagen se generará. En mi opinión, esta es una tarea muy interesante. Uno de los ejemplos reales es la coloración. Puede tomar una imagen en blanco y negro e intentar predecir qué colores resultarán. Lo más interesante es que para esta tarea hay una infinidad de datos para el entrenamiento. Después de todo, puede eliminar completamente la saturación de cualquier foto en color y obtener la imagen original en blanco y negro. Uno de los principales problemas en el aprendizaje automático es la necesidad de una gran cantidad de datos, y hay muchos datos para tales tareas. Más recientemente, mucha investigación sobre modelos generativos. Por ejemplo, hay redes generativas-adversarias y redes convolucionales de píxeles que han aprendido a percibir imágenes reales, es decir, a distinguir entre imágenes reales y copias artificiales que se parecen a las reales.Quería utilizar los resultados de estos estudios de modelos generativos y una base de datos interminable para el entrenamiento, y aplicar todo esto a las tareas de transformación de imágenes. Investigué la superresolución: este es un proceso que le permite aumentar la resolución de la imagen original. También trabajé en la tarea de transformar entre imágenes y completé dos proyectos de coloración.

P: ¡Gracias por la gran explicación, Ryan! También leí que TensorFlow es una plataforma poderosa para tareas de aprendizaje automático. Clasificación de imágenes, transformación: por supuesto, soy especialmente bueno en ellas, pero estoy seguro de que todo esto es muy emocionante. ¿Sigues trabajando en el campo del aprendizaje automático?

R: Sí, todavía trabajo en Google, pero ya como ingeniero y hago tareas similares. Estudio modelos generativos y ayudo a los investigadores a construir sistemas y modelos de nueva generación.

P .: ¡Genial! Aunque los modelos generativos casi no están relacionados con sus actividades pasadas: Javascript, Node y desarrollo web ...

R: Eso es seguro. Pero aún así, comencé con las matemáticas y tengo una buena base matemática. Bueno, no soy de los que están haciendo campaña para un área específica. No quiero convertirme en un gurú ni en JavaScript ni en aprendizaje automático. Simplemente me gusta explorar oportunidades interesantes. Sobre todo, me inspira a inventar y construir algo nuevo que beneficie a la humanidad.

.: . , . Optimistic Nihilism , , . , ?

R: Sí, necesito ser más cuidadoso con las predicciones ... Así que solo comparto mi opinión personal: estamos inimaginablemente lejos de modelar la inteligencia humana. Los sistemas de aprendizaje automático con los que trabajamos son muy primitivos o no funcionan en absoluto. Acabo de escribir una publicación de blog sobre mi residencia en Google Brain, y allí enumeré los problemas que surgen al desarrollar tales modelos. Me parece que aquellos que están lejos de esta esfera a menudo piensan que puedes tomar un modelo, pasarle datos y todo funcionará por sí solo. Pero no es tan simple. Hay muchas trampas y problemas poco investigados. Para obtener incluso los resultados más modestos, a veces lleva muchos meses de experimentación y personalización de filigrana. Así que todavía estamos muy lejos de imitar el cerebro humano,pero ya están surgiendo tecnologías prometedoras, por ejemplo, redes neuronales convolucionales o el método de error de propagación inversa. Y, lo que es alentador, estas tecnologías se basan en un modelo de redes neuronales, que no se parece tanto al cerebro humano, sino que en cierta medida está inspirado por el conocimiento al respecto. También tenemos GPU y métodos para entrenarlos, y ya sabemos cómo llevar a cabo una capacitación distribuida con ellos, al menos en parte. Por lo tanto, en mi opinión, se están sentando las bases para sistemas más grandes e inteligentes en este momento. Personalmente, soy ateo y no creo que mi cerebro sea más que químicos y neuronas. Mi conciencia y la conciencia de cualquier persona están de alguna manera codificadas en las interacciones de estas neuronas. Por lo tanto, en principio, no hay obstáculos paraPara simular estos procesos, simplemente se necesitan más investigaciones y desarrollos en esta área. Es demasiado temprano para predecir cuánto tiempo llevará.

P .: Ya veo. Ryan, has visto mucho. Dime, ¿cómo crees que evolucionará la tecnología en 20 años?

R: Sigo con gran interés el aprendizaje automático y las oportunidades que se abren. Incluso antes de crear una verdadera inteligencia artificial, estas tecnologías se pueden encontrar en muchas aplicaciones diferentes. En principio, serán muy útiles en cualquier sistema en el que necesite hacer suposiciones razonables. Por ejemplo, puede usar la visión por computadora para clasificar materiales en centros de reciclaje. Simplemente hay innumerables áreas donde las tecnologías básicas de aprendizaje automático serían útiles. Creo que se aplicarán cada vez más en una variedad de procesos, y esto tendrá un gran impacto en el campo de la tecnología y en la humanidad en general.

P .: Estoy de acuerdo, el aprendizaje automático es un tema emocionante. Es muy interesante ver cómo los automóviles sin conductor conducen a lo largo de Mountain View. Algún día en el futuro, será genial simplemente recostarse en una silla y confiarle a la máquina un control completo. Ryan, gracias por el excelente marco Node y por visitarnos. ¡Y buena suerte en futuros proyectos!

R: Gracias por la invitación, ¡fue interesante hablar!

P .: Gracias! Eso es todo Estaba feliz de conversar con Ryan, un chico humilde y genial. Ya logró mucho al comienzo de su carrera como desarrollador y fue impresionante. ¡Nos vemos en 2 semanas para ver la próxima historia!

Source: https://habr.com/ru/post/es413187/


All Articles