“Solo tengo un método de enseñanza: solo trabajo” - entrevista con Ryan Dahl (Node.js, Deno)



El 27 de mayo se cumplen 10 años desde que Ryan Dahl lanzó la primera versión de Node.js. Durante la última década, el proyecto se ha vuelto más que exitoso, pero el propio Ryan ya ha cambiado a otras cosas. ¿Qué está haciendo él ahora? ¿Cómo puede su nuevo proyecto ayudar a los desarrolladores de JavaScript? ¿Qué piensa él de los diferentes idiomas, la educación y el cambio generacional?

25 de mayo, dos días antes de la fecha de la ronda, Ryan hablará en San Petersburgo en nuestra conferencia HolyJS. Mientras tanto, los miembros del comité del programa HolyJS Eugene bunopus Kot y Dmitry dmitrymakhnev Makhnev le preguntaron en detalle sobre todo lo anterior. En Medium, publicamos una versión en inglés de la entrevista, y para Habr hizo una versión en ruso.

Eugene : Muchos lectores ya te conocen gracias a Node.js, pero ¿podrías contarnos un poco sobre ti?

Ryan : Vengo de San Diego, California. Estudié matemáticas en la universidad, y mi especialidad en la escuela de posgrado en la Universidad de Rochester era la topología algebraica. Pero después de tres años, pensé: “¿En qué estoy desperdiciando mi vida? Estas son cosas demasiado extrañas y abstractas.

Por lo tanto, dejé la escuela de posgrado, fui a viajar y después de algún tiempo estuve involucrado en la programación. Creo que muchos han hecho un camino similar. A mediados de la década de 2000, me involucré en el desarrollo web. Al principio, me gustaba Ruby on Rails y Ruby en general. En cuanto a Node, es una suerte estar en el lugar correcto en el momento correcto. Casualmente, estaba pensando en los problemas correspondientes justo cuando Node se hizo posible.

Eugene : ¿Entonces fue suerte? ¿O tuvo una cierta visión de este proyecto y desde el principio asumió que sería súper exitoso?

Ryan : ¿Una persona trabajará en un proyecto si no espera tener éxito? Por supuesto, la mayoría de las veces estas esperanzas no se cumplen. Nos damos por vencidos y comenzamos a hacer otra cosa, como sucedió con todos mis proyectos, excepto uno. Con Node, definitivamente tuve suerte. Luego, Chrome acaba de salir (y con él V8), y pensé mucho en la E / S sin bloqueo y cómo pueden ser representados por los marcos web, y todo esto funcionó bien con JavaScript.

Eugene : Ahora estás haciendo Deno . ¿Puedes hablar sobre el trabajo actual y los planes futuros?

Ryan : Mi socio de larga data, Bert Belder, y yo estamos tratando de crear una startup. Durante el último año y medio, hemos trabajado con él en varios proyectos, uno de ellos es Deno. Bert jugó un papel importante en el desarrollo de Node, hizo la mayor parte del trabajo de portar Node a Windows. Además, es uno de los autores de Libuv .



Eugene : ¿Crees que Deno espera un gran éxito en el futuro cercano? ¿Seguirás trabajando en eso, digamos, en cinco años?

Ryan : No tengo idea si Deno existirá en cinco años, lo más probable es que no, porque la mayoría de los proyectos terminan en nada. Pero por ahora, Deno me captura y me da satisfacción laboral.

Creo que por el momento no estoy satisfecho con el estado en que se encuentran los lenguajes dinámicos. Echo de menos una herramienta rápida, conveniente y bastante versátil. Tanto Node como Python son buenos, pero los encuentro irrazonablemente complejos o mal diseñados de alguna manera. Entonces, al final, estoy tratando de hacer una herramienta para mi propio flujo de trabajo.

Eugene : Mientras preparábamos las preguntas, leímos una entrevista en el sitio web de Mapping the Journey. Allí dijiste que estabas trabajando con el aprendizaje automático. Y poco después, tomaron y presentaron a Deno en JSConf EU. ¿Entonces tus intereses han cambiado?

Ryan : En los últimos años, me he entregado a algoritmos de aprendizaje automático. No entraré en los detalles del proyecto en el que estaba trabajando, pero era un marco de aprendizaje automático de JavaScript. Debido a esto, probé Node por primera vez en años, y esto aclaró algunos de mis problemas con Node. Esto llevó a la presentación en JSConf, en la que se mostró el prototipo Deno. Luego, el proyecto mostró un gran interés, por lo que Bert se unió. Y seguimos trabajando en ello. Y luego volveré a esos proyectos de ML.

Especialmente quiero conectar Deno a WebGL. Como probablemente sepa, Deno se ejecuta en V8, que a su vez es parte del vasto mundo de la infraestructura de software de Chrome. Chrome tiene una biblioteca Angle que implementa WebGL. Conectarse a esto permitiría a Deno programar la GPU. Y las GPU son necesarias para entrenar modelos de muchas redes neuronales modernas. Realmente me gustaría que Deno me proporcionara el proceso deseado para trabajar con programación matemática. Creo que una parte importante de las tareas en estadística y matemáticas en su conjunto se reduce a una especie de juegos de datos, y esto es muy conveniente para hacerlo con lenguajes dinámicos.

En términos generales, no hay tantos lenguajes dinámicos en el mundo, especialmente cuando se trata de popular y rápido. Entonces JavaScript es excelente para definir un modelo. En muchos casos, los cálculos se transferirán a la GPU, por lo que la velocidad de un lenguaje dinámico o su tiempo de ejecución no serán tan importantes. En general, planeo volver a todas estas cosas tarde o temprano, pero hasta ahora mi enfoque está en Deno.

Dmitry : ¿Deno está listo para usar en producción ahora? ¿Conoces casos interesantes de uso real de Deno?

Ryan : Me parece que diferentes personas tienen diferentes umbrales de dolor. Si está listo para vivir con errores, falta de documentación y cambio de API, entonces, para algunas tareas, Deno puede usarse incluso hoy. Pero en general, aún no está listo para la producción. Ahora está en la versión 0.3, y designaré como 1.0 la versión que considero adecuada para otras personas. Este es un proyecto a gran escala, estamos creando una nueva plataforma. Para hacer esto, se necesita mucho trabajo, y estamos tratando de hacerlo correctamente. Sin embargo, si eres un hacker, no tengas miedo de ensuciarte las manos y dejar un problema o una solicitud de extracción en caso de que surja un problema, entonces esto puede usarse.

Eugene : ¿Qué se necesita agregar a Deno para que las compañías comiencen a usarlo en la producción?

Ryan : En el caso de Deno, nos enfocamos en situaciones diferentes que con Node.js. Estamos tratando de proporcionar un acceso de nivel inferior a la computadora. En particular, queremos que Deno pueda importarse como caja Rust y que pueda integrarse en otros sistemas.

Supongamos que tiene su propio servidor web o sistema sin servidor, y desea proporcionar a los clientes la capacidad de ejecutar JavaScript. Tal vez no desee bajar al nivel V8, un V8 sin formato le proporcionará poco. Se necesita algo de infraestructura, pero el tiempo de ejecución completo que alguien en una computadora de escritorio podría tener ya es demasiado. Esperamos cubrir este escenario de "incrustación". Todavía estamos trabajando en cómo debería ser la API en este caso. También tenemos problemas de rendimiento que estamos siguiendo . Necesitamos proporcionar una mejor documentación. En general, hay trabajo por hacer.

Dmitry : una de las tareas de Deno es el soporte integrado para TypeScript. Recientemente, TypeScript se ha extendido bastante, muchas compañías comenzaron a usarlo no solo en el navegador, sino también para Node.js. Escuché que la gente del equipo central de Node.js también lo elogió. En su opinión, ¿puede TypeScript reemplazar JavaScript en los navegadores y adquirir su propio tiempo de ejecución (posiblemente con una máquina virtual)?

Ryan : Uno de los beneficios de TypeScript es que es un superconjunto de JavaScript, por lo que no lo reemplazará. Lo que realmente puedo imaginar es que TypeScript caerá en estándares y los tipos opcionales aparecerán en JavaScript, pero esto sucederá muy pronto.

Los lenguajes dinámicos son muy útiles para la etapa inicial de desarrollo, por ejemplo, cuando prototipa algo. La ventaja de TypeScript (y la idea de los tipos opcionales en general) es que a medida que el prototipo madura gradualmente, puede "torcer" gradualmente la implementación al anotar el código con tipos. Esto no tiene que suceder al mismo tiempo, por lo que aún puede moverse muy rápido y esbozar nuevas ideas en JavaScript.

En cuanto a si es posible usar tipos en la máquina virtual V8 para optimizar el tiempo de ejecución, no lo sé. Suena muy difícil, y no tengo la competencia suficiente para decir si habrá una ganancia significativa. En Deno, utilizamos el compilador TypeScript implementado en JavaScript. Puede imaginar una implementación de Rust de un compilador que se traduce a JavaScript más rápido. Esto es posible, el proyecto swc está trabajando en ello.

Eugene : ¿Puede TypeScript reemplazar a JavaScript? Supongamos que, en ES 2020, TypeScript se fusionará en un idioma con JavaScript.

Ryan : Sí, los tipos bien pueden agregarse al estándar. ¿TC 39 parece regular los estándares de JavaScript? Que yo sepa, hasta ahora esta posibilidad no ha sido discutida. Pero creo que aún falta mucho tiempo, aunque esto es posible.

Eugene : ¿Conoces a Dart? ¿Lo has usado alguna vez? Que piensas de el

Ryan : Lo intenté por curiosidad, pero eso fue hace mucho tiempo. Los objetivos de Dart son similares a TypeScript: es un lenguaje dinámico con tipos opcionales. Como dije, esto le permite organizar muy convenientemente su flujo de trabajo. Pero, a diferencia de TypeScript, Dart no es un superconjunto de JavaScript, es un lenguaje diferente. Quizás debido a esto, se propaga mucho más lentamente.

Es cierto que Flutter ha ganado algo de popularidad ahora, así que tal vez me he quedado atrás de la vida aquí. De una forma u otra, TypeScript logró alcanzar el mismo objetivo sin crear un nuevo lenguaje.

Cuando aparece un nuevo idioma, es fácil para él despertar la curiosidad, pero hacer que la gente lo use es mucho más difícil. Los beneficios deben ser muy significativos. Por ejemplo, era muy escéptico sobre Rust. Me pareció que todo lo que él puede hacer ya está en C ++, que utilizo activamente. Solo recientemente conocí a Rust más de cerca, y quedó claro que para mí puede reemplazar fácilmente a C ++. En general, para que un nuevo idioma tenga éxito, debe ser un orden de magnitud mejor que el antiguo.

Eugene : Con los idiomas, como con los autos, de todas formas a veces viajarás en autobús.

Ryan : exactamente.

Eugene : A pesar de la popularidad de TypeScript, JavaScript ahora es generalmente omnipresente: en el backend, frontend, en dispositivos móviles, en React Native, Raspberry Pi, etc. Aparentemente, tenemos una revolución, y hay un idioma que puede hacer todo. ¿Es esto realmente así? ¿O siempre habrá idiomas especiales para tareas especiales?

Ryan : JavaScript es tan interesante porque funciona en todas partes. Pero vale la pena señalar que, si bien muchas personas perciben TypeScript como un lenguaje separado, se compila en JavaScript. Entonces, desde mi punto de vista, TypeScript también funciona en todas partes. En general, estoy de acuerdo con su declaración. Por supuesto, en el futuro previsible, JavaScript seguirá siendo el idioma de los navegadores y dispositivos múltiples. Por lo tanto, sigo usándolo, ya que ofrece una amplia gama de posibilidades.

Dmitry : ¿Pero no crees que esta popularidad de JavaScript podría ser peor? La web ahora se ha convertido en una plataforma indispensable para cualquier servicio, y JavaScript es el único lenguaje en el que puede escribir servicios web en producción. ¿Quizás sería mejor si tuviéramos una opción, y todas las plataformas no se perfeccionaran en un idioma? ¿Quizás necesitamos diferentes máquinas virtuales en los navegadores?

Ryan : Creo que eso fue lo que causó la popularidad de Wasm. En él, puede compilar, por ejemplo, Rust en código que se puede ejecutar en un navegador.

Suena increíble, pero me pregunto qué tan bien funciona para los idiomas con recolección de basura u otras herramientas de tiempo de ejecución. Aunque es técnicamente posible usar Python a través de Wasm para construir un sitio, sospecho que el resultado será engorroso y lento. Creo que solo la experiencia se mostrará aquí.

Dmitry : Es decir, si quiero usar algo en lugar de JavaScript, ¿necesito aprender un idioma que se pueda transformar en Wasm?

Ryan : O en JavaScript. El hecho es que JavaScript tiene un recolector de basura y mucho más. Por lo tanto, si usa un lenguaje dinámico, tiene más sentido traducir a JavaScript que compilar en Wasm, y al mismo tiempo compilar todo su tiempo de ejecución, incluido el recolector de basura y más. Tendrá que invertir muchos recursos, aunque el V8 probablemente funcionará mejor con la recolección de basura. Pero sí, Dart compila en JavaScript y puede escribir sitios web en él. Hay otros idiomas que hacen lo mismo.



Dmitry : Ya que estamos hablando de diferentes idiomas, ¿qué idioma antiguo o nuevo te parece interesante para estudiar en 2019?

Ryan : Realmente me gusta Rust. Tiene muchos hallazgos interesantes, por ejemplo, la idea de un solo objeto mutable. Tiene un gran compilador que proporciona código extremadamente optimizado. Pero entender Rust no es fácil. Me llevó varios meses entender lo que estaba pasando allí. En general, Rust es un lenguaje muy interesante, pero de ninguna manera universal.

Si solo está escribiendo una aplicación, lo más probable es que no la escriba en Rust, sino en algo más simple: Ruby, JavaScript o Python. Pero hay algunas situaciones en las que Rust hace su trabajo de manera brillante. Por ejemplo, es ideal para escribir bases de datos, servidores web o, en nuestro caso, máquinas virtuales. Le da control total sobre todo lo que sucede en su código, pero a costa de la complejidad, que está abierto al desarrollador.

Rust es una nueva palabra en la escritura de código de bajo nivel; tiene ventajas significativas sobre Go. Go tiene un recolector de basura, por lo que es ideal para servidores de alto rendimiento, es conciso y escribir en él es muy simple. Sin embargo, hay momentos en que tener un recolector de basura puede ser un inconveniente, no un plus. Deno, por ejemplo, tiene ese caso. Envolvemos un V8 que ya tiene un recolector de basura. Serían dos recolectores en un proceso, y su interacción puede parecer catastrófica. El V8 ya es monstruosamente complejo en sí mismo. En general, Rust es perfecto para nuestros propósitos. Será interesante ver qué nuevas aplicaciones hay para Rust cuando se puede compilar en Wasm.

Dmitry : ¿Qué opinas de la creciente popularidad de los lenguajes funcionales? Por ejemplo, Elm para la interfaz, o Idris.

Ryan : No he probado ninguno de los dos, así que no puedo decir nada sobre ellos.

Eugene : ¿Qué pasa con los lenguajes funcionales en general?

Ryan : El estilo funcional es bastante bueno. Esto no significa que toda la aplicación deba consistir únicamente en asignar, reducir y similares. Hay situaciones en las que es más fácil trabajar en un estilo imperativo y más fácil de leer. Ambos enfoques están muy bien combinados en Rust y JavaScript, por lo que no es necesario limitarse a uno solo. En definitiva, la CPU sigue siendo imprescindible, funciona según las instrucciones que se le envían. Por lo tanto, es aconsejable pensar en el código en el mismo paradigma.

Eugene : ¿Y en qué estilo está escrito Deno? En orientado a objetos o funcional?

Ryan : Usé ambos. Todo depende del objetivo específico que estamos tratando de lograr.

Eugene : Ya hemos discutido qué idiomas prefiere, pero ¿qué pasa con las herramientas? ¿Cuál es tu IDE favorito? ¿Escribes en MacOS o Linux?

Ryan : Escribo en vim, uso iTerm2, y mi computadora es una pequeña MacBook. Viajo mucho y por eso a menudo trabajo en una computadora portátil. En cierto momento, noté que después de trabajar detrás de un monitor grande, es muy doloroso para mí cambiarme a una computadora portátil. Por lo tanto, me enseñé a mí mismo a trabajar en una computadora portátil todo el tiempo.

En mi lugar hay una unidad de sistema basada en Linux, me estoy conectando a través de SSH. Soy bastante anticuado en la elección de herramientas, en su mayoría son cosas similares a UNIX. Estoy usando LLDB para la depuración.

Trabajé en Visual Studio Code, pero ahora estamos escribiendo nuestra propia plataforma, por lo que no hay muchas integraciones que se acostumbren a esperar del IDE. Por lo general, tales cosas no tienen nada que ver con lo que estoy trabajando, y al final, todo esto me distrae. Estoy acostumbrado a trabajar con código simple, esto es especialmente conveniente al desarrollar software de bajo nivel. Creo que si escribiera un sitio web o una aplicación para una plataforma popular, usaría Visual Studio Code.

Eugene : En general, eres un programador de la vieja escuela.

Ryan : Probablemente sí.

Eugene : Entonces la siguiente pregunta será sobre la escuela. Aparentemente, las habilidades básicas de programación en el futuro cercano se estudiarán en la escuela junto con matemáticas, inglés y otras materias. ¿Qué opinas de esto? ¿Quizás en un futuro algo más lejano, el aprendizaje automático también ingresará al plan de estudios de la escuela?

Ryan : He estado programando durante los últimos 15 años, y durante este tiempo nuestra comunidad ha crecido mucho. En 2005, me pareció que echaba de menos todo lo más importante, aunque para los estándares actuales todavía éramos pocos. Ahora, los programadores están en todas partes. Obviamente, la programación ha crecido a una gran audiencia. Se ha convertido en una habilidad importante para un gran número de personas. Y con eso en mente, sí, la programación debe enseñarse en la escuela secundaria. Pero sobre el aprendizaje automático, creo que las cosas más fundamentales son más útiles para los estudiantes de secundaria.

Me parece que en las lecciones de matemáticas vale la pena estudiar más activamente las estadísticas. En los EE. UU., En la escuela secundaria, los estudiantes pasan por álgebra, ecuaciones cuadráticas, el comienzo del matanálisis, derivados y similares. Álgebra y matan ocupan la mayor parte del programa, y ​​luego una parte muy pequeña de las personas los usa regularmente. Pero se requiere que muchos profesionales puedan procesar datos estadísticos.

En cuanto al aprendizaje automático, todavía está en una etapa experimental. Es poco probable que en diez años todo se vea igual que ahora, esta área está cambiando demasiado rápido.

Eugene : Como estábamos hablando de la generación más joven, tuvimos una excursión desde la escuela en nuestra oficina hace aproximadamente una semana. , 15 , , Python Rust. , 2005 , , -, . , YouTube . , .

: .

: , ?

: , . , . YouTube . , . . , , - , . , . .

: , , . ? - , ?

: , , . , . , , . - Rust, , Rust. , : .

: , , — ? - Rust, . ?

: . - ?

: . , , . ? pull requests ? , ?

: . .

: , . YouTube, . - ? ?

: — . YouTube, . Hacker News Reddit, — - . , , - . YouTube . - , . , (, ), YouTube.

: ?

: , . , , JavaScript. — , . . , , . HolyJS. ?

: 2016 , .

: , NodeJS . . ? ? ?

: , Joyent. , , , . , , Deno, . , Deno.

: , ?

: , , . , , , . , . -, , , . , . , , , , , . , — …

: , V8 Volkswagen Beetle?

: !

: , V8.

: , , . , . , , , .

: . ? , . , . ?

: , . , . . , Facebook Google, . - , — , . , . , . - , .

: IT , « » , . , . , IT , ?

: , « » — , . , . , , . , . .

: . , — , — . , . ?

: . , . .

: . , ?

: . .

: , , ?

: , . , - , — . , — , .

: HolyJS 2019 -. , !

: , .

HolyJS Deno: «Deno, a new Way to JavaScript». , .

- , Online- ( - ). , 24-25 , .

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


All Articles