"Ich habe nur eine Lehrmethode: nur arbeiten" - Interview mit Ryan Dahl (Node.js, Deno)



Der 27. Mai markiert 10 Jahre, seit Ryan Dahl die allererste Version von Node.js veröffentlicht hat. In den letzten zehn Jahren ist das Projekt mehr als erfolgreich geworden, aber Ryan selbst hat bereits auf andere Dinge umgestellt. Was macht er jetzt? Wie kann sein neues Projekt JavaScript-Entwicklern helfen? Was hält er von verschiedenen Sprachen, Bildung und Generationswechsel?

Am 25. Mai, zwei Tage vor dem Runden Datum, wird Ryan auf unserer HolyJS-Konferenz in St. Petersburg sprechen. In der Zwischenzeit fragten ihn die Mitglieder des HolyJS-Programmkomitees, Eugene Bunopus Kot und Dmitry Dmitrymakhnev Makhnev , ausführlich zu all dem. Auf Medium haben wir eine englische Version des Interviews veröffentlicht und für Habr eine russische Version gemacht.

Eugene : Viele Leser kennen Sie dank Node.js bereits, aber können Sie uns etwas über sich erzählen?

Ryan : Ich komme aus San Diego, Kalifornien. Ich habe an der Universität Mathematik studiert und mein Spezialgebiet an der Graduiertenschule der Universität von Rochester war die algebraische Topologie. Aber nach drei Jahren dachte ich: „Wofür verschwende ich mein Leben? Das sind zu seltsame und abstrakte Dinge. “

Deshalb verließ ich die Graduiertenschule, ging auf Reisen und war nach einiger Zeit mit dem Programmieren beschäftigt. Ich denke, viele haben einen ähnlichen Weg eingeschlagen. Mitte der 2000er Jahre beschäftigte ich mich mit Webentwicklung. Zuerst mochte ich Ruby on Rails und Ruby im Allgemeinen. Es ist ein Glück, dass Node zur richtigen Zeit am richtigen Ort ist. Zufälligerweise dachte ich über die entsprechenden Probleme nach, als Node möglich wurde.

Eugene : Also war es Glück? Oder hatten Sie eine bestimmte Vision von diesem Projekt und gingen von Anfang an davon aus, dass es sehr erfolgreich sein würde?

Ryan : Wird eine Person an einem Projekt arbeiten, wenn sie nicht hofft, dass sie erfolgreich sein wird? Natürlich werden diese Hoffnungen meistens nicht erfüllt. Wir geben auf und beginnen etwas anderes zu tun - wie es bei allen meinen Projekten bis auf eines passiert ist. Mit Node hatte ich definitiv Glück. Dann kam Chrome heraus (und damit V8), und ich dachte viel über nicht blockierende E / A nach und darüber, wie sie durch Webframeworks dargestellt werden können, und all dies ging gut mit JavaScript.

Eugene : Jetzt machst du Deno . Können Sie über aktuelle Arbeiten und zukünftige Pläne sprechen?

Ryan : Mein langjähriger Mitarbeiter Bert Belder und ich versuchen, ein Startup zu gründen. In den letzten anderthalb Jahren haben wir mit ihm an mehreren Projekten gearbeitet, eines davon ist Deno. Bert spielte eine große Rolle bei der Entwicklung von Node. Er übernahm den größten Teil der Portierung von Node nach Windows. Darüber hinaus ist er einer der Autoren von Libuv .



Eugene : Glaubst du, Deno erwartet in naher Zukunft große Erfolge? Werden Sie beispielsweise in fünf Jahren weiter daran arbeiten?

Ryan : Ich habe keine Ahnung, ob Deno in fünf Jahren existieren wird - höchstwahrscheinlich nicht, weil die meisten Projekte mit nichts enden. Aber im Moment fängt Deno mich ein und gibt mir Arbeitszufriedenheit.

Ich denke im Moment bin ich nicht zufrieden mit dem Zustand, in dem sich die dynamischen Sprachen befinden. Ich vermisse ein schnelles, bequemes und ziemlich vielseitiges Werkzeug. Sowohl Node als auch Python sind gut, aber ich finde sie unangemessen komplex oder in gewisser Weise schlecht gestaltet. Am Ende versuche ich also, ein Tool für meinen eigenen Workflow zu erstellen.

Eugene : Während wir Fragen vorbereiteten, lasen wir ein Interview auf der Mapping the Journey-Website. Dort sagten Sie, Sie würden mit maschinellem Lernen arbeiten. Und bald darauf nahmen sie Deno auf der JSConf EU und präsentierten es . Ihre Interessen haben sich also verschoben?

Ryan : In den letzten Jahren habe ich mich mit Algorithmen für maschinelles Lernen beschäftigt. Ich werde nicht auf die Details des Projekts eingehen, an dem ich gearbeitet habe, aber es war ein JavaScript-Framework für maschinelles Lernen. Aus diesem Grund habe ich Node zum ersten Mal seit Jahren ausprobiert, und dies hat einige meiner Probleme mit Node geklärt. Dies führte zur Präsentation auf der JSConf, in der der Deno-Prototyp gezeigt wurde. Dann zeigte das Projekt großes Interesse, so dass Bert mitmachte. Und wir haben weiter daran gearbeitet. Und später werde ich zu diesen ML-Projekten zurückkehren.

Ich möchte Deno besonders mit WebGL verbinden. Wie Sie wahrscheinlich wissen, läuft Deno auf V8, das wiederum Teil der riesigen Welt der Chrome-Software-Infrastruktur ist. Chrome verfügt über eine Angle-Bibliothek, die WebGL implementiert. Wenn Sie eine Verbindung herstellen, kann Deno die GPU programmieren. Und GPUs sind für Trainingsmodelle vieler moderner neuronaler Netze erforderlich. Ich möchte wirklich, dass Deno mir den gewünschten Prozess für die Arbeit mit mathematischer Programmierung bietet. Ich glaube, dass ein erheblicher Teil der Aufgaben in Statistik und Mathematik insgesamt auf eine Art Datenspiel zurückzuführen ist, und dies ist sehr praktisch für dynamische Sprachen.

Generell gibt es nicht so viele dynamische Sprachen auf der Welt, besonders wenn es um populär und schnell geht. JavaScript eignet sich daher hervorragend zum Definieren eines Modells. In vielen Fällen werden die Berechnungen auf die GPU übertragen, sodass die Geschwindigkeit einer dynamischen Sprache oder Ihre Laufzeit nicht so wichtig sind. Im Allgemeinen habe ich vor, früher oder später auf all diese Dinge zurückzukommen, aber bisher liegt mein Fokus auf Deno.

Dmitry : Ist Deno jetzt einsatzbereit? Kennen Sie interessante Fälle der tatsächlichen Verwendung von Deno?

Ryan : Es scheint mir, dass verschiedene Menschen unterschiedliche Schmerzschwellen haben. Wenn Sie bereit sind, mit Fehlern, fehlender Dokumentation und sich ändernden APIs zu leben, kann Deno für einige Aufgaben auch heute noch verwendet werden. Im Allgemeinen ist er jedoch noch nicht produktionsbereit. Es ist jetzt in Version 0.3 und ich werde die Version, die ich für die Verwendung durch andere Personen als geeignet erachte, als 1.0 bezeichnen. Dies ist ein ziemlich großes Projekt, wir schaffen eine neue Plattform. Um dies zu tun, muss viel Arbeit geleistet werden, und wir versuchen, es richtig zu machen. Wenn Sie jedoch ein Hacker sind, haben Sie keine Angst davor, sich die Hände schmutzig zu machen und im Falle eines Problems ein Problem zu hinterlassen oder eine Anfrage zu ziehen - dann kann dies verwendet werden.

Eugene : Was muss Deno hinzugefügt werden, damit Unternehmen es in der Produktion einsetzen können?

Ryan : Bei Deno konzentrieren wir uns auf andere Situationen als bei Node.js. Wir versuchen, einen Zugriff auf den Computer auf niedrigerer Ebene bereitzustellen. Insbesondere möchten wir, dass Deno als Rostkiste importiert werden kann und in andere Systeme eingebettet werden kann.

Angenommen, Sie haben einen eigenen Webserver oder ein System ohne Server und möchten Clients die Möglichkeit geben, JavaScript auszuführen. Vielleicht möchten Sie nicht auf das V8-Niveau absteigen, ein rohes V8 bietet Ihnen wenig. Es wird eine gewisse Infrastruktur benötigt, aber die volle Laufzeit, die jemand auf einem Desktop-Computer möglicherweise hat, ist bereits zu hoch. Wir hoffen, dieses "Einbettungs" -Szenario abdecken zu können. Wir arbeiten noch daran, wie die API in diesem Fall aussehen soll. Wir haben auch Leistungsprobleme, denen wir folgen . Wir müssen eine bessere Dokumentation bereitstellen. Im Allgemeinen gibt es noch viel zu tun.

Dmitry : Eine der Aufgaben von Deno ist die integrierte Unterstützung für TypeScript. In letzter Zeit hat sich TypeScript weit verbreitet. Viele Unternehmen haben damit begonnen, es nicht nur im Browser, sondern auch für Node.js zu verwenden. Ich habe gehört, dass ihn auch Leute aus dem Kernteam von Node.j gelobt haben. Kann TypeScript Ihrer Meinung nach jemals JavaScript in Browsern ersetzen und eine eigene Laufzeit (möglicherweise mit einer virtuellen Maschine) erwerben?

Ryan : Einer der Vorteile von TypeScript ist, dass es eine Obermenge von JavaScript ist und es daher nicht ersetzt. Was ich mir wirklich vorstellen kann, ist, dass TypeScript in Standards fällt und optionale Typen in JavaScript erscheinen, aber dies wird sehr bald geschehen.

Dynamische Sprachen sind in der Anfangsphase der Entwicklung sehr nützlich, beispielsweise wenn Sie einen Prototyp erstellen. Der Vorteil von TypeScript (und die Idee optionaler Typen im Allgemeinen) besteht darin, dass Sie die Implementierung mit zunehmender Reife des Prototyps schrittweise „verdrehen“ können, indem Sie den Code mit Typen versehen. Dies muss nicht gleichzeitig geschehen, sodass Sie immer noch sehr schnell vorgehen und neue Ideen in JavaScript skizzieren können.

Ich weiß nicht, ob es möglich ist, Typen in der virtuellen V8-Maschine zur Optimierung der Laufzeit zu verwenden. Es klingt sehr schwierig, und ich habe nicht genug Kompetenz, um zu sagen, ob es einen signifikanten Gewinn geben wird. Bei Deno verwenden wir den in JavaScript implementierten TypeScript-Compiler. Sie können sich eine Rust-Implementierung eines Compilers vorstellen, der schneller in JavaScript übersetzt wird. Dies ist möglich, das swc- Projekt arbeitet daran.

Eugene : Kann TypeScript JavaScript ersetzen? Angenommen, in ES 2020 wird TypeScript mit JavaScript in einer Sprache zusammengeführt.

Ryan : Ja, Typen können durchaus zum Standard hinzugefügt werden. Scheint TC 39 JavaScript-Standards zu regulieren? Soweit ich weiß, wurde diese Möglichkeit bisher nicht diskutiert. Aber ich denke, es ist noch lange her, obwohl dies möglich ist.

Eugene : Kennst du Dart? Hast du es jemals benutzt? Was denkst du über ihn?

Ryan : Ich habe es aus Neugier versucht, aber das ist lange her. Die Ziele von Dart ähneln denen von TypeScript - es ist eine dynamische Sprache mit optionalen Typen. Wie gesagt, so können Sie Ihren Workflow sehr bequem organisieren. Im Gegensatz zu TypeScript ist Dart jedoch keine Obermenge von JavaScript, sondern eine andere Sprache. Vielleicht breitet es sich deshalb viel langsamer aus.

Zwar hat Flutter jetzt an Popularität gewonnen, also bin ich vielleicht hinter dem Leben hier zurückgeblieben. Auf die eine oder andere Weise gelang es TypeScript, dasselbe Ziel zu erreichen, ohne eine neue Sprache zu erstellen.

Wenn eine neue Sprache auftaucht, fällt es ihm leicht, Neugierde zu wecken, aber es ist viel schwieriger, die Leute dazu zu bringen, sie zu benutzen. Die Vorteile müssen sehr bedeutend sein. Zum Beispiel war ich Rust gegenüber sehr skeptisch. Mir schien, dass alles, was er tun kann, bereits in C ++ ist, das ich aktiv benutze. Erst kürzlich habe ich Rust näher kennengelernt und mir wurde klar, dass es für mich C ++ leicht ersetzen kann. Im Allgemeinen muss eine neue Sprache, um erfolgreich zu sein, um eine Größenordnung besser sein als die alte.

Eugene : Mit Sprachen - wie mit Autos - fährt man sowieso manchmal mit dem Bus.

Ryan : Genau.

Eugene : Trotz der Popularität von TypeScript ist JavaScript mittlerweile allgegenwärtig: im Backend, Frontend, auf Mobilgeräten, in React Native, Raspberry Pi und so weiter. Anscheinend haben wir eine Revolution und es gibt eine Sprache, die alles kann. Ist das wirklich so? Oder wird es immer spezielle Sprachen für spezielle Aufgaben geben?

Ryan : JavaScript ist einfach so interessant, weil es überall funktioniert. Es ist jedoch erwähnenswert, dass TypeScript zwar von vielen als separate Sprache wahrgenommen wird, jedoch in JavaScript kompiliert wird. Aus meiner Sicht funktioniert TypeScript also auch überall. Im Allgemeinen stimme ich Ihrer Aussage zu. Natürlich wird JavaScript in absehbarer Zeit die Sprache von Browsern und mehreren Geräten bleiben. Deshalb benutze ich es weiterhin - es bietet eine Vielzahl von Möglichkeiten.

Dmitry : Aber glauben Sie nicht, dass sich diese Popularität von JavaScript verschlechtern könnte? Das Web ist mittlerweile zu einer unverzichtbaren Plattform für jeden Dienst geworden, und JavaScript ist die einzige Sprache, in der Sie Webdienste in der Produktion schreiben können. Vielleicht wäre es besser, wenn wir eine Wahl hätten und nicht alle Plattformen unter einer Sprache geschärft würden? Vielleicht brauchen wir verschiedene virtuelle Maschinen in Browsern?

Ryan : Ich denke, das hat die Popularität von Wasm verursacht. Darauf können Sie beispielsweise Rust in Code kompilieren, der in einem Browser ausgeführt werden kann.

Es klingt großartig, aber ich frage mich, wie gut es für Sprachen mit Garbage Collection oder anderen Laufzeit-Tools funktioniert. Obwohl es technisch möglich sein mag, Python über Wasm zum Erstellen einer Site zu verwenden, vermute ich, dass das Ergebnis umständlich und langsam sein wird. Ich denke, hier wird sich nur Erfahrung zeigen.

Dmitry : Wenn ich also etwas anstelle von JavaScript verwenden möchte, muss ich eine Sprache lernen, die in Wasm umgewandelt werden kann?

Ryan : Oder in JavaScript. Tatsache ist, dass JavaScript einen Garbage Collector und vieles mehr hat. Wenn Sie eine dynamische Sprache verwenden, ist es daher sinnvoller, in JavaScript zu übersetzen, als in Wasm zu kompilieren und gleichzeitig Ihre gesamte Laufzeit einschließlich des Garbage Collector und mehr zu kompilieren. Sie müssen eine Menge Ressourcen investieren, obwohl der V8 wahrscheinlich besser mit der Speicherbereinigung umgehen kann. Aber ja, Dart wird in JavaScript kompiliert und Sie können Websites darauf schreiben. Es gibt andere Sprachen, die dasselbe tun.



Dmitry : Da wir über verschiedene Sprachen sprechen, welche alte oder neue Sprache finden Sie für das Studium im Jahr 2019 interessant?

Ryan : Ich mag Rust wirklich. Es hat viele interessante Funde, zum Beispiel die Idee eines einzelnen veränderlichen Objekts. Es hat einen großartigen Compiler, der extrem optimierten Code bietet. Aber Rust zu verstehen ist nicht einfach. Ich brauchte mehrere Monate, um zu verstehen, was dort vor sich ging. Im Allgemeinen ist Rust eine sehr interessante Sprache, aber keineswegs universell.

Wenn Sie nur eine Anwendung schreiben, schreiben Sie sie höchstwahrscheinlich nicht in Rust, sondern in etwas Einfacherem: Ruby, JavaScript oder Python. Aber es gibt Situationen, in denen Rust seine Arbeit hervorragend macht. Zum Beispiel eignet es sich hervorragend zum Schreiben von Datenbanken, Webservern oder in unserem Fall von virtuellen Maschinen. Es gibt die volle Kontrolle über alles, was in Ihrem Code passiert, jedoch auf Kosten der Komplexität, die dem Entwickler offensteht.

Rust ist ein neues Wort beim Schreiben von Code auf niedriger Ebene und hat gegenüber Go erhebliche Vorteile. Go verfügt über einen Garbage Collector, eignet sich also hervorragend für Hochleistungsserver, ist übersichtlich und das Schreiben ist sehr einfach. Es gibt jedoch Zeiten, in denen ein Garbage Collector ein Minus und kein Plus sein kann. Deno zum Beispiel hat einen solchen Fall. Wir verpacken einen V8, der bereits einen Garbage Collector hat. Es würden sich zwei Sammler in einem Prozess herausstellen, und ihre Interaktion kann katastrophal erscheinen. Der V8 ist an sich schon ungeheuer komplex. Im Allgemeinen ist Rust perfekt für unsere Zwecke. Es wird interessant sein zu sehen, welche neuen Anwendungen es für Rust gibt, wenn es in Wasm kompiliert werden kann.

Dmitry : Was halten Sie von der wachsenden Beliebtheit funktionaler Sprachen? Zum Beispiel Elm für das Frontend oder Idris.

Ryan : Ich habe keines von beiden ausprobiert, daher kann ich nichts dazu sagen.

Eugene : Was ist mit funktionalen Sprachen im Allgemeinen?

Ryan : Der funktionale Stil ist ziemlich gut. Dies bedeutet nicht, dass die gesamte Anwendung ausschließlich aus Map, Reduce und dergleichen bestehen sollte. Es gibt Situationen, in denen es einfacher ist, in einem imperativen Stil zu arbeiten und leichter zu lesen. Beide Ansätze sind in Rust und JavaScript sehr gut kombiniert, sodass es nicht erforderlich ist, sich auf nur einen zu beschränken. Letztendlich ist die CPU immer noch unerlässlich, sie arbeitet nach den an sie gesendeten Anweisungen. Daher ist es ratsam, über Code im selben Paradigma nachzudenken.

Eugene : Und in welchem ​​Stil ist Deno geschrieben? Objektorientiert oder funktional?

Ryan : Beides benutzt. Es hängt alles von dem spezifischen Ziel ab, das wir erreichen wollen.

Eugene : Wir haben bereits besprochen, welche Sprachen Sie bevorzugen, aber was ist mit den Tools? Was ist deine Lieblings-IDE? Schreiben Sie unter MacOS oder Linux?

Ryan : Ich schreibe in vim, benutze iTerm2 und mein Computer ist ein kleines MacBook. Ich reise viel und arbeite deshalb oft an einem Laptop. An einem bestimmten Punkt bemerkte ich, dass es für mich nach der Arbeit hinter einem großen Monitor sehr schmerzhaft ist, auf einen Laptop umzusteigen. Deshalb habe ich mir selbst beigebracht, die ganze Zeit an einem Laptop zu arbeiten.

Bei mir ist eine Linux-basierte Systemeinheit, die ich über SSH verbinde. Ich bin ziemlich altmodisch bei der Auswahl von Tools, meistens sind dies UNIX-ähnliche Dinge. Ich verwende LLDB zum Debuggen.

Ich habe in Visual Studio Code gearbeitet, aber jetzt schreiben wir unsere eigene Plattform, sodass es nicht viele Integrationen gibt, die Sie von der IDE gewohnt sind. Normalerweise haben solche Dinge nichts mit dem zu tun, woran ich arbeite, und am Ende lenkt mich das alles ab. Ich bin es gewohnt, mit Bare-Code zu arbeiten. Dies ist besonders praktisch, wenn Sie Software auf niedriger Ebene entwickeln. Ich denke, wenn ich eine Website oder Anwendung für eine beliebte Plattform schreiben würde, würde ich Visual Studio Code verwenden.

Eugene : Im Allgemeinen sind Sie ein Programmierer der alten Schule.

Ryan : Wahrscheinlich ja.

Eugene : Dann wird die nächste Frage über die Schule sein. Anscheinend werden in naher Zukunft grundlegende Programmierkenntnisse in der Schule zusammen mit Mathematik, Englisch und anderen Fächern erlernt. Was denkst du darüber? Vielleicht wird in etwas weiter entfernter Zukunft auch maschinelles Lernen in den Lehrplan der Schule aufgenommen?

Ryan : Ich habe in den letzten 15 Jahren programmiert und in dieser Zeit ist unsere Community sehr gewachsen. 2005 schien es mir, dass ich das Wichtigste verpasst habe, obwohl wir nach heutigen Maßstäben noch wenige waren. Jetzt sind Programmierer überall. Offensichtlich ist die Programmierung auf ein großes Publikum angewachsen. Es ist eine wichtige Fähigkeit für eine große Anzahl von Menschen geworden. Und in diesem Sinne sollte das Programmieren in der High School unterrichtet werden. Aber beim maschinellen Lernen denke ich, dass grundlegendere Dinge für Schüler nützlicher sind.

Es scheint mir, dass es sich lohnt, im Mathematikunterricht aktiver Statistik zu studieren. In den USA durchlaufen die Schüler in der High School Algebra, quadratische Gleichungen, den Beginn der Matanalyse, Ableitungen und dergleichen. Algebra und Matan machen den größten Teil des Programms aus, und dann wird sie nur von einem sehr kleinen Teil der Menschen regelmäßig verwendet. Viele Fachleute müssen jedoch in der Lage sein, statistische Daten zu verarbeiten.

Das maschinelle Lernen befindet sich noch in einem experimentellen Stadium. Es ist unwahrscheinlich, dass in zehn Jahren alles so aussehen wird wie jetzt - dieser Bereich ändert sich zu schnell.

Eugene : Da wir über die jüngere Generation gesprochen haben, hatten wir vor ungefähr einer Woche einen Schulausflug in unserem Büro. , 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/de450752/


All Articles