«Je n'ai qu'une seule méthode d'enseignement: juste travailler» - entretien avec Ryan Dahl (Node.js, Deno)



Le 27 mai marque 10 ans depuis que Ryan Dahl a sorti la toute première version de Node.js. Au cours de la dernière décennie, le projet est devenu plus que réussi, mais Ryan lui-même est déjà passé à autre chose. Que fait-il maintenant? Comment son nouveau projet peut-il aider les développeurs JavaScript? Que pense-t-il des différentes langues, de l'éducation et du changement de génération?

Le 25 mai, deux jours avant la date du tour, Ryan prendra la parole à Saint-Pétersbourg lors de notre conférence HolyJS. Entre-temps, les membres du comité du programme HolyJS, Eugene bunopus Kot et Dmitry dmitrymakhnev Makhnev, lui ont posé des questions détaillées sur tout ce qui précède. Sur Medium, nous avons publié une version anglaise de l' interview et pour Habr une version russe.

Eugene : De nombreux lecteurs vous connaissent déjà grâce à Node.js, mais pourriez-vous nous en dire un peu plus sur vous?

Ryan : Je viens de San Diego, en Californie. J'ai étudié les mathématiques à l'université et ma spécialité à l'université de Rochester était la topologie algébrique. Mais après trois ans, je me suis dit: «Sur quoi je gaspille ma vie? Ce sont des choses trop étranges et abstraites. »

Par conséquent, j'ai quitté les études supérieures, je suis parti en voyage et après un certain temps, j'ai participé à la programmation. Je pense que beaucoup ont fait le même chemin. Au milieu des années 2000, je me suis impliqué dans le développement web. Au début, j'aimais Ruby on Rails et Ruby en général. Quant à Node, il a de la chance d’être au bon endroit au bon moment. Par coïncidence, je pensais aux problèmes correspondants au moment où Node devenait possible.

Eugene : C'était donc de la chance? Ou aviez-vous une certaine vision de ce projet, et dès le début vous pensiez qu'il serait super réussi?

Ryan : Une personne travaillera-t-elle sur un projet si elle n'espère pas qu'il réussira? Bien sûr, le plus souvent, ces espoirs ne sont pas satisfaits. Nous abandonnons et commençons à faire autre chose - comme cela s'est produit avec tous mes projets sauf un. Avec Node, j'ai vraiment eu de la chance. Ensuite, Chrome vient de sortir (et avec elle V8), et j'ai beaucoup pensé aux E / S non bloquantes et à la façon dont elles peuvent être représentées par les frameworks Web, et tout cela s'est bien passé avec JavaScript.

Eugene : Maintenant tu fais Deno . Pouvez-vous parler des travaux en cours et des plans futurs?

Ryan : Mon associé de longue date Bert Belder et moi essayons de créer une startup. Au cours de la dernière année et demie, nous avons travaillé avec lui sur plusieurs projets, dont Deno. Bert a joué un grand rôle dans le développement de Node, il a fait la plupart du travail de portage de Node vers Windows. De plus, il est l'un des auteurs de Libuv .



Eugene : Pensez-vous que Deno s'attend à un succès majeur dans un avenir proche? Allez-vous continuer à y travailler, disons, dans cinq ans?

Ryan : Je ne sais pas si Deno existera dans cinq ans - probablement pas, car la plupart des projets ne se terminent en rien. Mais pour l'instant, Deno me capture et me donne satisfaction au travail.

Je pense que pour le moment je ne suis pas satisfait de l'état dans lequel se trouvent les langages dynamiques. Je manque un outil rapide, pratique et assez polyvalent. Node et Python sont bons, mais je les trouve déraisonnablement complexes ou mal conçus à certains égards. Donc à la fin, j'essaye de créer un outil pour mon propre workflow.

Eugene : Pendant que nous préparions des questions, nous avons lu une interview sur le site Web Mapping the Journey. Là, vous avez dit que vous travailliez avec l'apprentissage automatique. Et peu de temps après, ils ont pris et présenté Deno au JSConf EU. Vos intérêts ont donc changé?

Ryan : Ces dernières années, je me suis adonné aux algorithmes d'apprentissage automatique. Je n'entrerai pas dans les détails du projet sur lequel je travaillais, mais c'était un framework d'apprentissage automatique JavaScript. Pour cette raison, j'ai essayé Node pour la première fois depuis des années, ce qui a clarifié certains de mes problèmes avec Node. Cela a conduit à la présentation à JSConf, dans laquelle le prototype Deno a été présenté. Ensuite, le projet a montré un énorme intérêt, de sorte que Bert a rejoint. Et nous avons continué à y travailler. Et plus tard, je reviendrai sur ces projets ML.

Je veux surtout connecter Deno à WebGL. Comme vous le savez probablement, Deno fonctionne sur V8, qui à son tour fait partie du vaste monde de l'infrastructure logicielle Chrome. Chrome possède une bibliothèque Angle qui implémente WebGL. La connexion à cela permettrait à Deno de programmer le GPU. Et les GPU sont nécessaires pour former les modèles de nombreux réseaux de neurones modernes. J'aimerais vraiment que Deno me fournisse le processus souhaité de travail avec la programmation mathématique. Je pense qu'une partie importante des tâches dans les statistiques et les mathématiques dans leur ensemble se résume à une sorte de jeux de données, ce qui est très pratique pour les langages dynamiques.

D'une manière générale, il n'y a pas tant de langues dynamiques dans le monde, surtout quand il s'agit de populaire et rapide. JavaScript est donc idéal pour définir un modèle. Dans de nombreux cas, les calculs seront transférés vers le GPU, donc la vitesse d'un langage dynamique ou votre runtime ne seront pas si importants. En général, je prévois de revenir à toutes ces choses tôt ou tard, mais jusqu'à présent, je me concentre sur Deno.

Dmitry : Deno est-il prêt à être utilisé en production maintenant? Connaissez-vous des cas intéressants d'utilisation réelle de Deno?

Ryan : Il me semble que différentes personnes ont des seuils de douleur différents. Si vous êtes prêt à vivre avec des bogues, un manque de documentation et des API changeantes, alors pour certaines tâches, Deno peut être utilisé même aujourd'hui. Mais en général, il n'est pas encore prêt pour la production. Il est maintenant dans la version 0.3 et je désignerai comme 1.0 la version que je considère appropriée pour une utilisation par d'autres personnes. Il s'agit d'un projet assez important, nous créons une nouvelle plateforme. Pour ce faire, beaucoup de travail doit être fait et nous essayons de le faire correctement. Cependant, si vous êtes un pirate, n'ayez pas peur de vous salir les mains et de laisser un problème ou de tirer une demande en cas de problème - alors cela peut être utilisé.

Eugene : Qu'est-ce qui doit être ajouté à Deno pour que les entreprises commencent à l'utiliser en production?

Ryan : Dans le cas de Deno, nous nous concentrons sur des situations différentes de celles de Node.js. Nous essayons de fournir un accès de niveau inférieur à l'ordinateur. En particulier, nous voulons que Deno puisse être importé sous forme de caisse Rust et qu'il puisse être intégré dans d'autres systèmes.

Supposons que vous ayez votre propre serveur Web ou système sans serveur et que vous souhaitiez offrir aux clients la possibilité d'exécuter JavaScript. Peut-être que vous ne voulez pas descendre au niveau V8, un V8 brut vous fournira peu. Une certaine infrastructure est nécessaire, mais le temps d'exécution à part entière que peut avoir quelqu'un sur un ordinateur de bureau est déjà trop. Nous espérons couvrir ce scénario «d'intégration». Nous travaillons toujours sur ce à quoi l'API devrait ressembler dans ce cas. Nous avons également des problèmes de performances que nous suivons . Nous devons fournir une meilleure documentation. En général, il y a du travail à faire.

Dmitry : L'une des tâches de Deno est la prise en charge intégrée de TypeScript. Récemment, TypeScript s'est répandu assez largement, de nombreuses entreprises ont commencé à l'utiliser non seulement dans le navigateur, mais aussi pour Node.js. J'ai entendu que les gens de l'équipe de base de Node.js l'ont également félicité. À votre avis, TypeScript peut-il remplacer JavaScript dans les navigateurs et acquérir son propre runtime (éventuellement avec une machine virtuelle)?

Ryan : L'un des avantages de TypeScript est qu'il s'agit d'un sur-ensemble de JavaScript, donc il ne le remplacera pas. Ce que je peux vraiment imaginer, c'est que TypeScript tombera dans les normes et que les types facultatifs apparaîtront en JavaScript, mais cela arrivera très bientôt.

Les langages dynamiques sont très utiles pour la phase initiale de développement, par exemple, lorsque vous prototypez quelque chose. L'avantage de TypeScript (et l'idée des types optionnels en général) est que, à mesure que le prototype mûrit, vous pouvez «tordre» progressivement l'implémentation en annotant le code avec des types. Cela ne doit pas se produire en même temps, vous pouvez donc avancer très rapidement et décrire de nouvelles idées en JavaScript.

Quant à savoir s'il est possible d'utiliser des types dans la machine virtuelle V8 pour optimiser l'exécution, je ne sais pas. Cela semble très difficile et je n'ai pas assez de compétence pour dire s'il y aura un gain significatif. Chez Deno, nous utilisons le compilateur TypeScript implémenté en JavaScript. Vous pouvez imaginer une implémentation Rust d'un compilateur qui se traduit en JavaScript plus rapidement. C'est possible, le projet swc y travaille.

Eugene : TypeScript peut-il remplacer JavaScript? Supposons que, dans ES 2020, TypeScript soit fusionné en un seul langage avec JavaScript.

Ryan : Oui, des types pourraient bien être ajoutés à la norme. Le TC 39 semble-t-il réglementer les normes JavaScript? Pour autant que je sache, cette possibilité n'a jusqu'à présent pas été discutée. Mais je pense que c'est encore longtemps avant, bien que ce soit possible.

Eugene : Connaissez-vous Dart? L'avez-vous déjà utilisé? Que penses-tu de lui?

Ryan : Je l'ai essayé par curiosité, mais c'était il y a longtemps. Les objectifs de Dart sont similaires à TypeScript - c'est un langage dynamique avec des types optionnels. Comme je l'ai dit, cela vous permet d'organiser très facilement votre flux de travail. Mais, contrairement à TypeScript, Dart n'est pas un sur-ensemble de JavaScript, c'est un langage différent. Peut-être à cause de cela, il se propage beaucoup plus lentement.

Il est vrai que Flutter a gagné en popularité maintenant, alors je suis peut-être en retard sur la vie ici. D'une manière ou d'une autre, TypeScript a réussi à atteindre le même objectif sans créer de nouveau langage.

Lorsqu'une nouvelle langue apparaît, il lui est facile d'éveiller la curiosité, mais amener les gens à l'utiliser est beaucoup plus difficile. Les avantages doivent être très importants. Par exemple, j'étais très sceptique à propos de Rust. Il m'a semblé que tout ce qu'il peut faire est déjà en C ++, que j'utilise activement. Ce n'est que récemment que j'ai connu Rust de plus près, et il est devenu clair que pour moi, il peut facilement remplacer C ++. En général, pour qu'une nouvelle langue réussisse, elle doit être d'un ordre de grandeur meilleure que l'ancienne.

Eugene : Avec les langues - comme avec les voitures, de toute façon vous allez parfois prendre un bus.

Ryan : Exactement.

Eugene : Malgré la popularité de TypeScript, JavaScript est désormais généralement omniprésent: sur le backend, le frontend, sur les appareils mobiles, dans React Native, Raspberry Pi, etc. Apparemment, nous avons une révolution, et il y a une langue qui peut tout faire. En est-il vraiment ainsi? Ou y aura-t-il toujours des langues spéciales pour des tâches spéciales?

Ryan : JavaScript est juste intéressant parce qu'il fonctionne partout. Mais il convient de noter que bien que de nombreuses personnes perçoivent TypeScript comme un langage distinct, il se compile en JavaScript. Donc, de mon point de vue, TypeScript fonctionne également partout. En général, je suis d'accord avec votre déclaration. Bien sûr, dans un avenir prévisible, JavaScript restera la langue des navigateurs et de plusieurs appareils. Par conséquent, je continue à l'utiliser - il offre un très large éventail de possibilités.

Dmitry : Mais ne pensez-vous pas que cette popularité de JavaScript pourrait être pire? Le Web est désormais devenu une plate-forme indispensable pour tout service, et JavaScript est la seule langue dans laquelle vous pouvez écrire des services Web en production. Peut-être serait-il préférable que nous ayons le choix et que toutes les plateformes ne soient pas affinées dans une seule langue? Peut-être avons-nous besoin de différentes machines virtuelles dans les navigateurs?

Ryan : Je pense que c'est ce qui a causé la popularité de Wasm. Sur celui-ci, vous pouvez compiler, disons, Rust en code qui peut être exécuté dans un navigateur.

Cela semble génial, mais je me demande dans quelle mesure cela fonctionne pour les langues avec la récupération de place ou d'autres outils d'exécution. Bien qu'il soit techniquement possible d'utiliser Python via Wasm pour créer un site, je soupçonne que le résultat sera lourd et lent. Je pense que seule l'expérience se montrera ici.

Dmitry : Autrement dit, si je veux utiliser quelque chose au lieu de JavaScript, dois-je apprendre un langage qui peut être transformé en Wasm?

Ryan : Ou en JavaScript. Le fait est que JavaScript a un garbage collector et bien plus encore. Par conséquent, si vous utilisez un langage dynamique, il est plus logique de traduire en JavaScript que de compiler dans Wasm, et en même temps de compiler l'intégralité de votre runtime, y compris le garbage collector et plus encore. Vous devrez investir beaucoup de ressources, bien que le V8 fasse probablement mieux avec la collecte des ordures. Mais oui, Dart compile en JavaScript et vous pouvez y écrire des sites Web. Il existe d'autres langues qui font de même.



Dmitry : Puisque nous parlons de différentes langues, quelle langue ancienne ou nouvelle trouvez-vous intéressante pour étudier en 2019?

Ryan : J'aime vraiment Rust. Il a de nombreuses découvertes intéressantes, par exemple, l'idée d'un seul objet mutable. Il a un excellent compilateur qui fournit du code extrêmement optimisé. Mais comprendre Rust n'est pas facile. Il m'a fallu plusieurs mois pour comprendre ce qui se passait là-bas. En général, Rust est une langue très intéressante, mais nullement universelle.

Si vous écrivez simplement une application, vous ne l'écrirez probablement pas dans Rust, mais dans quelque chose de plus simple: Ruby, JavaScript ou Python. Mais il y a des situations où Rust fait son travail avec brio. Par exemple, il est idéal pour écrire des bases de données, des serveurs Web ou, dans notre cas, des machines virtuelles. Il donne un contrôle total sur tout ce qui se passe dans votre code, mais au prix d'une complexité ouverte au développeur.

Rust est un nouveau mot dans l'écriture de code de bas niveau; il présente des avantages importants par rapport à Go. Go a un garbage collector, il est donc idéal pour les serveurs haute performance, il est concis et l'écriture est très simple. Cependant, il y a des moments où avoir un ramasse-miettes peut être un moins, pas un plus. Deno, par exemple, a un tel cas. Nous emballons un V8 qui a déjà un ramasse-miettes. Deux collecteurs dans un même processus se révéleraient, et leur interaction peut sembler catastrophique. Le V8 est déjà monstrueusement complexe en soi. En général, la rouille est parfaite pour nos besoins. Il sera intéressant de voir quelles nouvelles applications existent pour Rust quand il pourra être compilé dans Wasm.

Dmitry : Que pensez-vous de la popularité croissante des langages fonctionnels? Par exemple, Elm pour le frontend ou Idris.

Ryan : Je n'ai essayé ni l'un ni l'autre, donc je ne peux rien dire à leur sujet.

Eugene : Qu'en est-il des langages fonctionnels en général?

Ryan : Le style fonctionnel est plutôt bon. Cela ne signifie pas que l'application entière doit se composer uniquement de mappage, de réduction et autres. Il y a des situations où il est plus facile de travailler dans un style impératif et plus facile à lire. Les deux approches sont très bien combinées dans Rust et JavaScript, donc vous limiter à une seule n'est pas nécessaire. Au final, le CPU est toujours impératif, il fonctionne selon les instructions qui lui sont envoyées. Par conséquent, il est sage de penser au code dans le même paradigme.

Eugene : Et dans quel style est écrit Deno? En orienté objet ou fonctionnel?

Ryan : Utilisé les deux. Tout dépend de l'objectif spécifique que nous essayons d'atteindre.

Eugene : Nous avons déjà discuté des langues que vous préférez, mais qu'en est-il des outils? Quel est votre IDE préféré? Ecrivez-vous sur MacOS ou Linux?

Ryan : J'écris dans vim, j'utilise iTerm2 et mon ordinateur est un petit MacBook. Je voyage beaucoup et à cause de cela, je travaille souvent sur un ordinateur portable. À un certain moment, j'ai remarqué qu'après avoir travaillé derrière un grand écran, il était très douloureux pour moi de passer à un ordinateur portable. Par conséquent, j'ai appris à travailler sur un ordinateur portable tout le temps.

À ma place est une unité système basée sur Linux, je me connecte via SSH. Je suis assez démodé dans le choix des outils, ce sont principalement des choses de type UNIX. J'utilise LLDB pour le débogage.

J'ai travaillé dans Visual Studio Code, mais maintenant nous écrivons notre propre plate-forme, donc il n'y a pas beaucoup d'intégrations que vous attendez de l'IDE. Habituellement, de telles choses n'ont rien à voir avec ce sur quoi je travaille et, finalement, tout cela me distrait. J'ai l'habitude de travailler avec du code nu, ceci est particulièrement pratique lors du développement de logiciels de bas niveau. Je pense que si j'écrivais un site Web ou une application pour une plate-forme populaire, j'utiliserais Visual Studio Code.

Eugene : En général, vous êtes un programmeur de la vieille école.

Ryan : Probablement oui.

Eugene : Alors la prochaine question portera sur l'école. Apparemment, les compétences de programmation de base dans un proche avenir seront étudiées à l'école en même temps que les mathématiques, l'anglais et d'autres matières. Qu'en pensez-vous? Peut-être que dans un avenir un peu plus éloigné, l'apprentissage automatique fera également partie du programme scolaire?

Ryan : Je programme depuis 15 ans et pendant cette période, notre communauté s'est beaucoup développée. En 2005, il m'a semblé que j'avais raté tout ce qui était le plus important, même si, selon les normes actuelles, nous étions encore peu nombreux. Maintenant, les programmeurs sont partout. De toute évidence, la programmation a atteint un large public. C'est devenu une compétence importante pour un grand nombre de personnes. Et dans cet esprit, oui, la programmation devrait être enseignée au lycée. Mais en ce qui concerne l'apprentissage automatique, je pense que des choses plus fondamentales sont plus utiles pour les élèves du secondaire.

Il me semble que dans les cours de mathématiques, il vaut la peine d'étudier plus activement les statistiques. Aux États-Unis, au lycée, les élèves passent par l'algèbre, les équations quadratiques, le début de la matanalyse, les dérivés, etc. L'algèbre et le matan occupent la majeure partie du programme, puis une très petite partie des gens les utilisent régulièrement. Mais de nombreux professionnels sont tenus de pouvoir traiter des données statistiques.

Quant au machine learning, il est encore à un stade expérimental. Il est peu probable que dans dix ans, tout ressemblera à ce qu'il est aujourd'hui - ce domaine évolue trop rapidement.

Eugene : Puisque nous parlions de la jeune génération, nous avons eu une excursion de l'école dans notre bureau il y a environ une semaine. , 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 en mai, Ryan parlera davantage de Deno: il ouvrira l'événement avec sa performance «Deno, a new Way to JavaScript». Et en plus de cela, il y aura des dizaines d'autres rapports à la conférence .

En raison de la forte demande, nous avons fermé la vente de billets pour des visites personnelles, mais les billets en ligne restent disponibles (ils donnent accès à la diffusion en ligne de tous les rapports pendant la conférence et à leurs vidéos après celle-ci). Donc, même si vous ne parvenez pas à Saint-Pétersbourg du 24 au 25 mai, vous pouvez toujours regarder les performances de Ryan et d'autres.

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


All Articles