
Wie man mit Chrome DevTools entwickelt, weiĂź jeder. Und wie sieht die Entwicklung von Chrome DevTools selbst aus?
Alexei Kozyatinsky hat zuvor bei Google gearbeitet und genau das getan. Jetzt ist er zu Netflix
gewechselt , aber er ist nicht weit von seinen früheren Aktivitäten entfernt.
Was genau macht er jetzt? Wie realistisch ist es fĂĽr einen normalen Nicht-Google-Entwickler, etwas NĂĽtzliches in DevTools zu kopieren? Welche Computer verwenden Chrome-Ingenieure?
Wir veranstalten derzeit die HolyJS 2019 Piter-Konferenz, auf der Alexey bereits einen neuen Bericht mit dem Titel „Chrome DevTools Protocol“ veröffentlicht hat (die Aufzeichnung ist in der
kostenlosen Sendung zu sehen). Bei dieser Gelegenheit wurde er von zwei Mitgliedern des HolyJS-Programmkomitees
ausfĂĽhrlich befragt :
Dmitry DmitryMakhnev Makhnev und
Alexei zolotyh Zolotykh .
Dmitry Makhnev: Erzähl mir ein wenig über dich. Wo, wie, wo, was machst du jetzt?Alexei Kozyatinsky: Ich komme gleich wieder und sage Ihnen, dass Chrome DevTools bei Google seit mehr als vier Jahren arbeitet. Grundsätzlich habe ich einen JavaScript-Debugger erstellt und alles, was mit JavaScript, Node und allem zu tun hat, was man sich mit JavaScript im Allgemeinen vorstellen kann. Jetzt arbeite ich für eine andere Firma namens Netflix. Und hier kam ich zu einer sehr einfachen Sache: Sie haben ihre eigene interne Web-Engine mit ihrem eigenen seltsamen JavaScript. Und das Ganze braucht seine eigenen coolen Tools, die als "Chrome DevTools" bezeichnet werden können. Dementsprechend war es mein Ziel, diese Werkzeuge herzustellen.
Es ist immer noch relevant, ich mache etwas und bin absolut verantwortlich für alles: für das Backend dieses Geschäfts, damit das DevTools-Frontend normal funktioniert. Gleichzeitig ist es unser Ziel, so zu arbeiten, dass ich weiterhin Chrome DevTools schmuggele, um alle möglichen Patches zu aktualisieren. Damit es nicht so ist, dass wir uns gabeln, werden wir uns für immer zerstreuen und das Ergebnis der Arbeit meiner coolen Kollegen von Google verlieren. Also mache ich weiter wie zuvor - Chrome DevTools.
Dmitry: Cool.Alexei Zolotykh: Ihre Biografie zu HolyJS lautet wie folgt: „Er leitete die meisten Versuche des Unternehmens, das Leben von Entwicklern zu verbessern, angefangen bei asynchronen Stapeln bis hin zu den neuen modischen Abfrageobjekten.“ Warum zuerst versuchen? Und zweitens, können Sie uns mehr erzählen - geht es hier wahrscheinlich mehr um Google?Alexei: Beginnen wir mit dem Wort "Versuch". Sehr gute Frage. Und ich habe eine Antwort darauf. Dies war ursprünglich das Wort "Bemühungen". Da ich seit einigen Jahren in Kalifornien lebe und arbeite, ist mir eine Übersetzung gescheitert. Warum habe ich beschlossen, das Wort "Anstrengung" als "Versuch" zu übersetzen? Vielleicht ist dies immer noch kein "Versuch". Natürlich waren dies „Versuche“, weil wir versucht haben, etwas zu tun, aber dies waren erfolgreiche Versuche, die wir größtenteils abgeschlossen haben.
Gleichzeitig aber Query Objects - es war etwas Kleines, das auf Twitter oder auf dem Medium gelesen werden kann, und das haben wir abgeschlossen. Und asynchrones Debuggen ist das, was wir in Chrome DevTools ausführen müssen. Wir haben damit begonnen, es mehrmals versucht, weil dies keine triviale Sache ist. Sie versuchen eine Lösung: Hören Sie den Benutzern zu, sie kommen zu Ihnen und sagen: "Ich verstehe nicht, was hier passiert. Können Sie bitte etwas damit anfangen?" Sie versuchen es anders, versuchen etwas anderes zu tun, und so passiert Schritt für Schritt etwas. Es ist jedoch wichtig zu sagen, dass die meisten Versuche erfolgreich waren.
Bei Google habe ich den größten Teil meines Entwicklungslebens verbracht. Ich war einmal als Praktikant dort. Es war in wundervollen Zeiten, als es in St. Petersburg ein Google-Büro gab. Als ich dort ankam, war ich dazu verdammt, mich mit Chrome DevTools zu beschäftigen: Ich hatte keine andere Wahl, weil ich als Praktikant zum Chrome DevTools-Team kam. Mir wurde gesagt: „Hier ist ein sehr einfaches Praktikantenprojekt. Wir haben eine coole API, mit der wir den gesamten JavaScript-Code übernehmen, irgendwie verarbeiten, zurückgeben und Chrome anweisen können, anstelle des zu uns gekommenen JavaScript ein anderes JavaScript auszuführen. “
Wir hatten eine solche API und auf dieser Basis war es möglich, einen AST-Baum zu erstellen. Ich erinnere mich, dass es über AST-Bäume
einen ausgezeichneten Bericht über HolyJS gab. Es war notwendig, den AST-Baum zu analysieren und den Code so anzuweisen, dass die Ausführungszeit gemessen und tatsächlich ein Werkzeugprofiler geschrieben wurde. Und es war so ein Internetprojekt, ich habe es immer noch irgendwo auf GitHub. Es hat in Chrome schon sehr lange nicht mehr funktioniert, da die verwendete API aufgefordert wurde, es selbst auszuschneiden - es war schwierig zu warten. Ich war an diesem Tag sehr traurig, denn es war die API, auf der das gesamte Projekt aufgebaut war - "Löschen". Und ich habe es gelöscht. Nach drei Monaten wechselte ich von Praktikanten zu Ingenieuren - ich blieb bei Google und begann alles, was mit JavaScript zu tun hatte. Begonnen mit etwas sehr Einfachem: Ich musste console.log () reparieren. Und dann kam es allmählich vor, dass der Hauptteil des JavaScript-bezogenen Toolteams das Team aus irgendeinem Grund verließ, und mir blieb fast das gesamte JavaScript übrig. In diesem Moment war es sehr beängstigend, aber ich machte mich fertig und begann allmählich etwas zu tun, etwas zu verstehen.
Zur gleichen Zeit, als JavaScript entwickelt wurde, tauchten dort Versprechungen auf, wie wir wissen. Jetzt haben wir bereits async / await, Pfeilfunktionen wurden in allen möglichen Frameworks angezeigt, sodass wir Inline-Haltepunkte benötigten (ohne sie gab es keinen Weg) - und ich habe viele dieser kleinen Verbesserungen durchgeführt. Async-Stapel erwiesen sich als viel Arbeit. Dies ist ein Async-Modell, das Async in JavaScript in einer sehr einfachen Sprache beschreibt.
Und da Sie in Chrome DevTools im JavaScript-Frontend nicht arbeiten können und nichts über die V8-Engine wissen, musste ich mich im Verlauf all dieser Arbeiten immer mehr in V8 schmuggeln. Ich habe dort viele Patches. Irgendwann haben wir das JavaScript-Backend von Chrome-Code auf V8-Code verschoben. Dies war natürlich von Anfang an logisch, aber historisch gesehen war er nicht da. Zur gleichen Zeit kam Node zu uns, wir mussten es irgendwie unterstützen, und wir entschieden, dass wenn wir V8 debuggen können und Node V8 zu verwenden scheint, warum wir Node nicht mit uns unterstützen? Und wir haben es geschafft, in diesem Projekt war ich nicht das wichtigste, aber ich habe aktiv denen geholfen, die es getan haben. Ich mache das alles seit ungefähr fünf Jahren bei Google.
Dmitry: Was denkst du am coolsten und schwierigsten davon?Alexei: Aus irgendeinem Grund wird am besten an den letzten erinnert. Und das letzte war ein interessantes Projekt, das wir gemacht haben. Dies befindet sich jetzt in der Chrome DevTools-Konsole. Wenn Sie tippen, können Sie das Live-Ergebnis der Eingabe sehen. Wenn Sie neue JavaScript-Funktionen testen möchten (zu dieser Zeit war es BigInt), drucken Sie einfach in der Konsole, sehen sofort das Ergebnis und müssen nicht die Eingabetaste drücken und Ihre Konsole mit einer Milliarde Ergebnissen verstopfen. Und es richtig zu machen ist schwieriger als es sich anhört. Für uns war es sehr wichtig, dass wir mit der gierigen Ausführung all Ihrer Ausdrücke den Status Ihres Programms nicht zerstören, da sonst alle unsere Benutzer sehr verärgert wären. Und um dies zu tun, mussten wir JavaScript nehmen, V8 nehmen und die Fähigkeit hinzufügen: einen beliebigen Ausdruck ausführen, aber sicherstellen, dass er den Status Ihres Programms nicht ändert. Und es war lange Zeit schwierig und niemand hat es vor uns getan, es gibt keine solchen JavaScript-Engines mehr. Ich bin mir nicht sicher, ob es solche Motoren überhaupt gibt. Vielleicht gibt es in Java (weil in Java, wie wir wissen, alles da ist), aber ich bin mir nicht sicher. Und in diesem Moment haben wir es geschafft.
Es war ein sehr langer Prozess, an dem viele verschiedene Teams beteiligt waren, da es für uns wichtig war, nicht nur ohne „Nebenwirkungen“ auszuführen, sondern auch sicherzustellen, dass Sie nicht alles aufhängen, wenn Sie plötzlich eine endlose (wahre) Schleife ausführen in der Welt, weil der JavaScript-Stream immer noch der gleiche ist. Und dies war eine separate Anstrengung: Es stellte sich heraus, dass der Chrome-Code selbst nicht gefällt, wenn JavaScript zu einem zufälligen Zeitpunkt endet. In diesem Fall sagt er gerne: "Mm ..." und stürzt ab. Es musste repariert werden. Und wir haben es auch getan.
Das Projekt dieser Arbeit führte dazu, dass Google sogar ein Patent erhielt. Google hat patentiert, Sie nicht zu verfolgen, sondern sich wie die meisten anderen Unternehmen (mit Ausnahme des alten Oracle wahrscheinlich) zu schützen, wenn etwas passiert, wenn jemand zu ihnen kommt und sagt: „Leute, Sie haben Google gemacht "Suche, das ist schlecht, wir haben Patente." Und aus irgendeinem Grund werden diese Typen gleichzeitig JavaScript-Debugger ausführen. Google wird sagen: "Und hier haben wir ein solches Patent für den JavaScript-Debugger." Nun, Patentanwälte wissen besser, was dort vor sich geht, aber wir haben es patentiert, es hat Spaß gemacht. Google gibt ein kleines Puzzleteil heraus, wenn Sie ein Patent erhalten. Er ist sehr cool. Und es war sehr interessant, weil das noch niemand gemacht hatte und wir es geschafft haben.
Dmitry: Und es scheint, dass etwas einfach in der Konsole angezeigt wird.Alexei: Ja, ja, das ist natĂĽrlich alles sehr "einfach". Jemand zitierte, dass jede gut gemachte Technologie nicht von Magie zu unterscheiden sei.
Dmitry: Ja, interessant. Und was von dem, was ich wirklich tun wollte, konnte nicht getan werden? Sonst noch was? Stärker?Alexei: Das ist eine sehr gefährliche Frage. Sie wollen immer alles tun, und es gibt nie genug Zeit. Natürlich möchte ich die Dinge, die wir begonnen haben, beenden, aber ich habe sie nicht beendet. Dies ist ein asynchrones Modell, und das asynchrone Debuggen musste natürlich noch abgeschlossen werden, und es wurde dem Benutzer klarer, weitere Schritte zu unternehmen. Ich bin mir nicht sicher, was ich dort tun soll, aber von dem wichtigen
Punkt , den ich beenden wollte: In V8 gibt es einen ähnlichen Mechanismus wie
HotSwap in Java und mit ähnlichen Technologien, mit dem Sie einen Code in Ihr Programm aufnehmen können, der gerade ausgeführt wird, und die Verstärkung aktualisieren können. Sie haben sich beispielsweise für eine Ausnahme entschieden und wissen, wie man sie behebt, sie sofort sofort behebt, die Datei speichert und alles funktioniert weiter, und als ob es keine Ausnahmen gäbe - alles wurde live behoben. Dies ist ein sehr cooles Tool. Einige Leute denken, dass es sogar in gewisser Weise das Debuggen ersetzen kann, weil Sie den Code nach und nach in kleinen Stücken schreiben und sofort sehen können, was passiert - danach ist praktisch kein Debuggen mehr erforderlich.
Und für eine sehr lange Zeit, vor ungefähr 9-10 Jahren, hatten wir einen Code, der dies tat. Es wurde ein wenig in einer anderen Welt geschrieben, in einer anderen Realität - es gab einen anderen V8, es gab nicht alle diese Ignition, TurboFan und alles andere. Ich bin mir nicht sicher, ob zu dieser Zeit sogar Crankshaft dort war, es ist der vorherige Compiler in V8. Da war nichts. Und async / await war natürlich auch nicht da. Der Code war sehr alt, es wurden einige sehr alte interne V8-Dienstprogramme verwendet, die nur diesen Code unterstützten, da zu diesem Zeitpunkt niemand diesen Code verstehen und neu schreiben wollte.
Irgendwann setzte ich mich hin und schrieb es neu, und es begann weniger zu krachen. Trotzdem sagt er immer noch sehr oft, dass er Ihren Code nicht bearbeiten kann, weil beispielsweise Generatoren nicht ausreichend unterstützt werden. Beim Schreiben dieses Codes gab es in JavaScript einen Generator pro Million Codezeilen. Und wenn wir async / await bekommen haben, ist jede async / await-Funktion tatsächlich ein Generator für sich. Wenn Sie darum bitten, den Code mit async / await zu bearbeiten, werden Sie enttäuscht sein.
Und da dies immer noch Tools fĂĽr Entwickler und Debugger sind, gibt es eine unangenehme Funktion: Wenn sie bei der Verwendung des Tools nicht zweimal von zehn funktionieren, werden sie es nicht mehr verwenden. Und ich wĂĽrde es sehr gerne beenden. Vielleicht beenden wir es, weil ich jetzt wahrscheinlich V8 an meinen neuen Arbeitsplatz bringen werde und deshalb weiter daran arbeiten kann.
Dmitry: Könnte dies ausschließlich während des Debuggens funktionieren oder könnte theoretisch ein Teil der Anwendung in einer einseitigen Anwendungsproduktion geändert werden?Alexey: Aus Sicht von V8 ist es in der Produktion einfacher zu ändern, schwieriger zu ändern, wenn Sie angehalten werden. Wenn es angehalten ist, haben Sie den aktuellen Stack-Trace, der bereits ausgeführt wird. Es ist notwendig, diesen Code zu aktualisieren und den gesamten aktuellen Stapel, der sich auf einige Variablen in Ihrem Code bezieht, zu zwingen, weiter zu arbeiten. Und wenn Sie gerade die Produktion haben, können Sie auf den Moment warten, in dem JavaScript vorbei ist (hoffen wir, dass Sie es nicht haben, während Sie (wahr) sind), und in diesem Moment wird alles unmerklich ersetzt.
Und es ist viel einfacher, da Sie den Code einfach ersetzen können und nicht alle Links aktualisieren müssen. Die Hauptschwierigkeit besteht natürlich darin, alle Links zu ersetzen, alle Frames neu zu starten, Generatoren neu zu starten und so weiter.
Alex: Ich hatte plötzlich eine Frage zur Verwendung von Chrome DevTools als IDE. Es gibt eine solche Funktion, wenn Sie JavaScript bearbeitet haben und Sie es irgendwie an das Dateisystem binden können, und das Gleiche gilt für Stile. Und ich habe viele Fragen an ihn, weil es nicht funktioniert. Und ich bin ein fauler Mensch, ich mag es zum Beispiel, es an einem Ort zu reparieren.Alexei: Die Frage ist anscheinend, warum es nicht funktioniert. Zunächst ist es wichtig zu sagen, dass Chrome DevTools niemals eine IDE waren, sondern sich niemals als IDE positioniert haben. Die IDE ist ein Projekt in einem anderen Maßstab, es erfordert andere Anstrengungen und mehr Menschen. Chrome DevTools wurde zuerst als Tool und dann als Editor erstellt. Im Gegensatz zu IDEs, die als Editor angezeigt werden und dann einen Debugger, Plug-Ins usw. hinzufügen.
Gleichzeitig haben wir verstanden, dass es für unsere Benutzer sehr angenehm wäre, diese zu bearbeiten und zu speichern. Es gab mehrere Versuche, dies zu tun - jetzt wahrscheinlich den zweiten oder dritten Versuch ... Aber es kommt alles auf die Tatsache an, dass im Web unter Berücksichtigung der Existenz all dieser Webpack-CSS-Compiler und alles andere ist es eine nicht triviale Aufgabe, die Änderungen wieder anzuwenden. Wenn Sie den Code ändern, den Sie auf der Seite sehen, müssen Sie verstehen, woher dieser Code auf Ihrer Seite stammt, und die Änderung sorgfältig wieder anwenden.
Auf der anderen Seite können wir daher sagen, dass wir es einfach tun können, um für Leute zu arbeiten, die nicht so komplexe Konfigurationen haben, aber leider ist dies ein sehr kleiner Prozentsatz unserer Benutzer. Jetzt hat jeder ein Webpack, Babel und so weiter. Und sie transponieren leicht und tun etwas in eine Richtung, aber Informationen in die entgegengesetzte Richtung zu bekommen, ist ein Problem. Für CSS und für SASS wurde dies auf magische Weise gemacht, und manchmal scheint es zu funktionieren, ich habe es nicht benutzt.
Ob sich dies in Zukunft ändern wird, können Sie noch fragen. Sie können Visual Studio-Code oder Ihre Lieblings-IDE (WebStorm oder etwas anderes) verwenden, den Code dort bearbeiten, und Chrome DevTools versucht, diese Änderungen live anzuwenden. Tatsächlich haben wir ein separates Projekt für unser Frontend für Node. Wir werden wahrscheinlich noch später darüber sprechen. Dort funktioniert es etwas besser, da Node Gott sei Dank über die maximale Kompilierungs- und TypeScript-Kompilierungsstufe in JavaScript verfügt. Dort ist es schon schwierig, aber ich hoffe immer noch, dass die meisten Pakete und Module auf Node in reinem JavaScript ohne Zwischenschritte geschrieben sind. Ich habe die Frage nicht beantwortet, aber wie ich konnte.
Dmitry: Was denkst du, wie wird sich Chrome DevTools im Prinzip weiterentwickeln? Was sind die coolsten Dinge, die man von ihm erwarten kann?Alexey: Das ist eine schwierige Frage. Irgendwann erschien eine Person in Google I / O, die ein weiteres praktisches Tool für Designer entwickelte. Diese Erweiterung für Chrome erinnere ich mich leider nicht an den Namen. Und es fügt direkt über Ihrer Seite einige Elemente hinzu, die es Ihnen als Designer erleichtern, alles zu bearbeiten und zu erledigen. Und es gab Ideen, dass Chrome DevTools ein besseres Werkzeug für Designer sein könnte. Dies ist bereits ein recht praktisches Tool, mit dem Sie beispielsweise CSS usw. betrachten können. Sie können es jedoch noch viel idealer und praktischer gestalten. Zum Beispiel bequemere Bearbeitung von Flex-Eigenschaften und andere kleine Verbesserungen.
Und es gibt einen wichtigen Teil der Arbeit an Chrome DevTools: Das Projekt ist sehr umfangreich, es hat viele Benutzer und eine groĂźe
Anzahl von Fehlern, die jeder auf
crbug.com einreichen kann . Sie müssen repariert werden, es gibt viele von ihnen, und es wird viel Zeit aufgewendet, um alles zum Laufen zu bringen. Für das Debuggen von JavaScript Live Edit, über das wir gesprochen haben, ist Hotswap vielleicht ein guter nächster Schritt, aber es kann sein oder nicht, ich weiß es nicht.
Alexei: Chrome DevTools scheint mir objektiv die fortschrittlichste Software zu sein, die Webentwicklern hilft. Aber es gibt noch andere Browser - Safari, Edge ist immer noch da, Firefox wieder. Gibt es Tools, die ich aus anderen Browsern in Chrome DevTools ziehen möchte? Gibt es etwas, das du magst, wie cool es gemacht ist?Alexey: Chrome DevTools-Entwickler schauen sich regelmäßig andere Browser an. Aufgrund des Interessanten, das ich dort kürzlich bemerkt habe, erinnere ich mich, dass Safari eine sehr praktische Konsole hatte. Sie haben die Ausgabe auf der Konsole sehr gut strukturiert und die Navigation mithilfe der Pfeile in den Ergebnissen hinzugefügt. Sie können dort ein Objekt auswählen, "rechts" drücken - es wird geöffnet. Es war verdammt praktisch. Daher ist diese Funktion jetzt in Chrome DevTools verfügbar.
In Firefox scheinen die interessanten Dinge in DevTools eine etwas bessere visuelle Bearbeitung aller CSS-Eigenschaften zu unterstützen - damit meine ich Eigenschaften wie Flex und andere - sie zeigen Ihnen das Raster direkt oben auf der Seite und Sie können alles nach oben verschieben runter. Das ist cool, wir haben es teilweise, aber nicht vollständig. Ich denke, Firefox DevTools bietet derzeit bei weitem die beste Unterstützung für WebAssembly. Wenn Sie aus irgendeinem Grund WebAssembly-Code schreiben müssen, sind sie viel besser als wir, da wir vor sechs Monaten nichts hatten, jetzt habe ich sie nicht überprüft. Ich denke, sie investieren viel Energie in diese Sache.
Was Safari betrifft ... In gewisser Weise ist Chrome DevTools eine Abzweigung des Webinspektors von Safari, daher haben wir das Beste gegeben, was sie hatten.
Ich erinnerte mich an das Wichtige! Wahrscheinlich hat nur Firefox Time Travel Debugging. Auf einem Mac können Sie in Firefox 'Nightly Builds Zeitreise-Debugging betreiben. Ich habe über ihn geschwiegen, als ich nach den folgenden großen Schritten gefragt wurde: Es klingt sehr cool, sehr monumental - ich glaube immer noch nicht, dass es sehr nützlich ist. Persönlicher Standpunkt. Aber sie haben es, Sie können versuchen, wenn es Ihnen hilft, wird es ein neues interessantes Werkzeug sein.
: . , , -- . , ( ) , , CSS. , - , .
, , . ? , ? , - ?: . ? , ,
crbug.com , feature request. feature request', , : , , . , . :
Chrome DevTools, Chrome DevTools, ,
. , , , .
, , , — , , Chrome. , , , Chrome DevTools , . , -, , Chrome . -, - , , , - , , … , , .
: Google? :) :): Google , , . - , layers panel, -. , , . , , , , . , , .
? Cmd/Ctrl + Shift + P, Show layers — . Discoverability Chrome DevTools — , , , . - , . , - . , , , .
: , , , .: .
: , - . . , , .: HolyJS. .
: - , , - , . , - . , : - , - . - .
: , - Chrome, , , . . — , . — . - - , ?: . , Chrome . -, Chrome, .
GitHub
Chrome DevTools ( ), , DevTool' Chrome, . , , - Chrome DevTools, . , - , -, . - . , cookies.
, DevTool' , , . , JavaScript', CSS, HTML . single-page application. , - - , , , .
— - , (, - ), Chrome, , , .
cs.chromium.org , .
, , « », Chrome , good first bug — , .
, , JavaScript — V8 , Chrome. , , , . - , - , - Chrome, Node. , - Node, Node, Chrome. , , .
, V8 - , - DevTool' . Chrome, , - , 15 Chrome.
: , Chrome?: , Lenovo , Google Chrome . Xeon, 64 128 — . , 32 . , . , GTA 2 .
, - . - — Google , , Google , . , , . Chrome C++, . , .
: .: , SSH - , , . - , SSH. Mac, : « ». Mac', , , - , -, , , .
: . , ?: -, . Cessna, , 17 . - 17 Chrome DevTools.
: , -, , . , , . -, ndb ( - ), . , , Chrome DevTools, - V8 Node. ndb, - Node? - ?: ndb — . Chrome DevTools Node . : Node URL, , . dedicated — Node. chrome://inspect, «open dedicated frontend», - . , , . - , , , . , , , — . value, , , .
, , . -, npm — «npm install -g ndb» — . Chrome, . Chrome, . 2,6 Chrome DevTools . . .
, - value: child-, , . ndb .
, Node Node. , , , - Node, , .
- Visual Studio Code, Node. . - IDE , Python, , . Node. : Chrome DevTools — , ndb — Node.
, , Google Chrome Labs — GitHub- , . , , 15 Hacker News - . , ( , ), - . .
, , Node . , Node Windows, Linux Mac, — , , .
, , , , n . - , , . , environment- Windows , Linux — , . . Windows-, - .
, . - , , , . , . , — , Node, , , . , , , , . ndb, ,
Carlo . Carlo — Electron. Electron , , Electron .
: Google, Chrome?: , ndb. , , ndb.
: , . Chrome DevTools, , , ? , , ?: Chrome DevTools? . , , , Chrome DevTools, , JavaScript. , , , , Java, JavaScript, , - . , .
: -, . -. , , C++. , Chrome DevTools , . , , - -, , , . Chrome DevTools , - C++, -.
C++, JavaScript, CSS…
HolyJS, , CSS — , , . , , ! .
, C++, -, . - , , , , . ,
careers.google.com , , , Chrome DevTools, , , software engineer-, . software- , , : « Chrome DevTools».
: ++? - .: . , , — , , , . : - , , , - .
, C++ - , . , «Hello, world!», . , , Chrome. C++ Chrome, C++ 11, . Boost .
: . , - 239, ? - ? single page application.: , , , , . , computer science- . : — , — , .
, . Google , Google . , , . , . computer science- , …
239, , , , , . , , - . , JavaScript — ? Das ist kein Problem. , a, b c, JavaScript, , JavaScript . JavaScript — , .
, CS- , . , - , , . , , , , -. , , computer science- — , , must have, . , , , , . , .
: , - JavaScript, -, , - ?: . , , , - , , , Stack Overflow, , . , , . , async- , garbage collector .
: . : ? , , ? ? .: . , CSS . , , . — Google-, - . , , , , , . , , . .
, — . . , , DeepMind
StarCraft (. .: Zest, soO Stats ) — Reinforcement Machine Learning. Reinforcement Machine Learning . youtube, 15 , , .
, --, - , , . , , . , CSS.
: ?: , . , . , . , YouTube — CSS. , , . , , — .
: . ? ?: , , . Node.js, Node. , . , , - - , — , . , , - , , . Das ist schwer.
, — « Node.js» — , , , , Node.js, . , , , . , .
: . , . , -, ? - , , - — , . ?: , . , , . , , - . , - , , - , -. . — DevTools: — , , — .
. , , . , , , JavaScript-, , . . , , , — .
, (« , CSS -») . , (diversity, CSS ), . , , . . — . — , . — .
: : HolyJS?: HolyJS, . , , . , , , .
: , ...: , . — . . . HolyJS , , , . , , . , , , , , — . . - .

« Chrome DevTools» ( ) HolyJS, 24 . YouTube , , .