
Cara mengembangkan menggunakan Chrome DevTools, semua orang tahu. Dan seperti apa pengembangan Chrome DevTools itu sendiri?
Alexei Kozyatinsky sebelumnya bekerja di Google dan melakukan hal itu, dan sekarang dia telah pindah ke Netflix, tetapi dia belum pergi jauh dari kegiatan sebelumnya.
Apa yang sebenarnya dia lakukan sekarang? Seberapa realistiskah bagi pengembang non-Google biasa untuk menyalin sesuatu yang berguna di DevTools? Komputer mana yang digunakan insinyur Chrome?
Kami saat ini menjadi tuan rumah konferensi HolyJS 2019 Piter, di mana Alexey telah membuat laporan baru, "Protokol Chrome DevTools" (rekaman dapat dilihat di
siaran gratis ). Dan pada kesempatan ini, dia ditanyai secara rinci oleh dua anggota komite program HolyJS:
Dmitry DmitryMakhnev Makhnev dan
Alexei zolotyh Zolotykh .
Dmitry Makhnev: Ceritakan sedikit tentang diri Anda. Di mana, bagaimana, di mana, apa yang Anda lakukan sekarang?Alexei Kozyatinsky: Saya akan kembali sedikit dan memberi tahu Anda bahwa Chrome DevTools di Google telah bekerja selama lebih dari empat tahun. Pada dasarnya, saya melakukan debugger JavaScript dan semua yang terkait dengan JavaScript, Node, dan semua yang dapat dibayangkan di sekitar JavaScript secara umum. Sekarang saya bekerja untuk perusahaan lain bernama Netflix. Dan di sini saya datang untuk melakukan hal yang sangat sederhana: mereka memiliki mesin web internal mereka sendiri dengan JavaScript aneh mereka sendiri. Dan semuanya membutuhkan alat kerennya sendiri, yang bisa disebut "Chrome DevTools." Dan, dengan demikian, tujuan saya adalah membuat alat-alat ini.
Itu masih relevan, saya melakukan sesuatu dan saya benar-benar bertanggung jawab atas segalanya: untuk backend bisnis ini, agar frontend DevTools bekerja secara normal. Dan pada saat yang sama, tujuan kami adalah bekerja sedemikian rupa sehingga saya terus menyelundup di Chrome DevTools, untuk meningkatkan semua tambalan yang mungkin. Agar kita tidak bercabang, kita akan selamanya membubarkan dan kehilangan hasil kerja rekan keren saya dari Google. Jadi saya terus melakukan hal yang sama seperti sebelumnya - Chrome DevTools.
Dmitry: Keren.Alexei Zolotykh: Biografi Anda tentang HolyJS memiliki susunan kata-kata berikut: "Dia memimpin sebagian besar upaya perusahaan untuk meningkatkan kehidupan para pengembang, mulai dari tumpukan asinkron dan berakhir dengan Obyek Kueri yang modis dan baru." Pertama, mengapa mencoba? Dan yang kedua, dapatkah Anda memberi tahu kami lebih banyak - apakah ini mungkin tentang Google?Alexei: Mari kita mulai dengan kata "percobaan". Pertanyaan yang sangat bagus Dan saya punya jawaban untuk itu. Ini awalnya kata "upaya." Karena saya telah tinggal dan bekerja di California selama beberapa tahun terakhir, sebuah terjemahan mengecewakan saya. Mengapa saya memutuskan untuk menerjemahkan kata "upaya" sebagai "upaya"? Mungkin ini masih bukan "upaya". Tentu saja, ini adalah "upaya", karena kami mencoba melakukan sesuatu, tetapi ini adalah upaya yang berhasil, kami menyelesaikan sebagian besar dari mereka.
Tetapi pada saat yang sama, Object Query - itu adalah sesuatu yang kecil yang dapat dibaca di Twitter atau di Medium, dan ini adalah apa yang telah kami selesaikan. Dan debugging async adalah apa yang perlu kita selesaikan di Chrome DevTools. Kami mulai melakukan ini, mencoba beberapa kali, karena ini bukan hal yang sepele. Anda mencoba satu solusi - dengarkan pengguna, mereka mendatangi Anda dan berkata: "Saya tidak mengerti apa yang terjadi di sini, bisakah Anda melakukan sesuatu dengan ini?" Anda mencoba secara berbeda, mencoba melakukan sesuatu yang lain, dan, selangkah demi selangkah, sesuatu terjadi. Tetapi penting untuk mengatakan bahwa sebagian besar upaya itu berhasil.
Di Google, saya menghabiskan sebagian besar kehidupan pengembangan saya. Saya datang ke sana sekali sebagai magang. Itu kembali di masa-masa indah ketika ada kantor Google di St. Petersburg. Sesampainya di sana, saya ditakdirkan untuk terlibat dalam Chrome DevTools: Saya tidak punya pilihan lain, karena saya datang sebagai peserta magang ke tim Chrome DevTools. Saya diberi tahu: “Ini adalah proyek magang yang sangat sederhana. Kami memiliki API keren yang memungkinkan kami mengambil semua kode JavaScript, memprosesnya entah bagaimana, mengembalikannya dan memberi tahu Chrome untuk menjalankan JavaScript lain alih-alih JavaScript yang datang kepada kami. "
Kami memiliki API seperti itu, dan atas dasar itu dimungkinkan untuk membangun pohon AST. Saya ingat bahwa tentang AST-pohon ada
laporan bagus tentang HolyJS. Itu perlu untuk mem-parsing AST-tree dan menginstruksikan kode sedemikian rupa untuk mengukur waktu eksekusi, dan benar-benar menulis profiler alat. Dan itu adalah proyek internet, saya masih memilikinya di suatu tempat di GitHub. Itu tidak berfungsi di Chrome untuk waktu yang sangat lama, karena API yang digunakan diminta untuk menghentikannya sendiri - sulit untuk mempertahankannya. Saya sangat sedih hari itu, karena itu adalah API di mana seluruh proyek dibangun - "hapus itu". Dan saya menghapusnya. Setelah tiga bulan, saya beralih dari pekerja magang ke insinyur - saya tinggal bersama Google dan mulai melakukan segala sesuatu yang berkaitan dengan JavaScript. Dimulai dengan sesuatu yang sangat sederhana: Saya harus memperbaiki console.log (). Dan kemudian secara bertahap terjadi bahwa bagian utama dari tim alat yang berhubungan dengan JavaScript meninggalkan tim untuk beberapa alasan, dan saya ditinggalkan dengan hampir semua JavaScript. Pada saat itu sangat menakutkan, tetapi saya bersiap-siap dan secara bertahap mulai melakukan sesuatu, untuk memahami sesuatu.
Pada saat yang sama, JavaScript dikembangkan, seperti yang kita ketahui, asinks, muncul di sana. Sekarang kita sudah memiliki async / menunggu, fungsi panah muncul di semua kerangka kerja yang mungkin, jadi kita perlu breakpoint inline (tidak ada jalan tanpa mereka) - dan saya memang, memang, melakukan banyak perbaikan kecil ini. Tumpukan Async ternyata banyak pekerjaan, ini adalah model async yang menggambarkan async dalam JavaScript dalam bahasa yang sangat sederhana.
Dan karena Anda tidak dapat bekerja di Chrome DevTools di frontend JavaScript dan tidak tahu apa-apa tentang mesin V8, dalam perjalanan semua pekerjaan ini, saya secara bertahap harus menyelundupkan lebih banyak dan lebih banyak lagi ke V8. Saya punya banyak tambalan di sana. Pada titik tertentu, kami memindahkan backend JavaScript dari kode Chrome ke kode V8. Ini, tentu saja, logis untuk dilakukan sejak awal, tetapi secara historis dia tidak ada di sana. Pada saat yang sama, Node datang kepada kami, kami harus mendukungnya, dan kami memutuskan bahwa jika kami dapat men-debug V8, dan Node tampaknya menggunakan V8, mengapa kita tidak membuat Node mendukung kami? Dan kami melakukannya, dalam proyek ini saya bukan yang paling penting, tetapi saya secara aktif membantu mereka yang melakukannya. Saya sudah melakukan ini semua di Google selama sekitar lima tahun.
Dmitry: Apa yang Anda anggap paling keren dan paling sulit dari ini?Alexei: Untuk beberapa alasan, yang terakhir paling diingat. Dan yang terakhir adalah proyek menarik yang kami lakukan. Ini sekarang di konsol Chrome DevTools, saat Anda mengetik, Anda dapat melihat hasil langsung dari melakukan apa yang Anda ketik. Jika Anda ingin menguji fitur JavaScript baru (pada waktu itu adalah BigInt), Anda cukup mencetak di konsol, langsung melihat hasilnya, dan Anda tidak perlu menekan "Enter" dan menyumbat konsol Anda dengan hasil miliaran. Dan melakukannya dengan benar lebih sulit daripada kedengarannya. Sangat penting bagi kami bahwa dengan eksekusi serakah dari semua ekspresi Anda, kami tidak akan merusak status program Anda, jika tidak semua pengguna kami akan sangat kesal. Dan untuk melakukan ini, kami harus mengambil JavaScript, ambil V8 dan tambahkan kemampuan untuk itu: jalankan ekspresi apa pun, tetapi pastikan itu tidak mengubah status program Anda. Dan itu sulit, untuk waktu yang lama dan tidak ada yang melakukannya sebelum kita, tidak ada lagi mesin JavaScript. Saya tidak yakin ada mesin seperti itu sama sekali. Mungkin di Jawa ada (karena di Jawa, seperti yang kita tahu, semuanya ada di sana), tapi saya tidak yakin. Dan pada saat itu kami melakukannya.
Itu adalah proses yang sangat panjang, yang melibatkan banyak tim yang berbeda, karena penting bagi kami tidak hanya untuk mengeksekusi tanpa "efek samping", tetapi juga untuk memastikan bahwa jika Anda tiba-tiba mulai menjalankan loop sementara (benar) yang tak ada habisnya, maka Anda tidak akan menggantung semuanya di dunia, karena aliran JavaScript masih sama. Dan ini adalah upaya terpisah: ternyata kode Chrome itu sendiri tidak suka ketika JavaScript berakhir secara acak, dalam hal ini ia suka mengatakan: "Mm ..." dan macet. Itu harus diperbaiki. Dan kami juga melakukannya.
Proyek karya ini menghasilkan Google bahkan mendapatkan paten. Google mematenkan untuk tidak mengejar Anda, tetapi, seperti kebanyakan perusahaan lain (kecuali Oracle yang lama, mungkin), untuk melindungi diri sendiri jika terjadi sesuatu jika seseorang mendatangi mereka dan berkata: "Dudes, Anda membuat Google "Cari, ini buruk, kami memiliki paten." Dan untuk beberapa alasan, dudes itu akan melakukan JavaScript debugger pada saat yang sama. Google akan mengatakan: "Dan di sini kami memiliki paten untuk debugger JavaScript." Yah, pengacara paten tahu lebih baik apa yang sedang terjadi di sana, tapi kami mematenkannya, itu menyenangkan. Google memberikan sebagian kecil teka-teki ketika Anda mendapatkan paten. Dia sangat keren. Dan itu sangat menarik, karena tidak ada yang pernah melakukan ini sebelumnya, dan kami berhasil melakukannya.
Dmitry: Dan tampaknya ada sesuatu yang ditampilkan di konsol.Alexei: Ya, ya, itu semua sangat "sederhana", tentu saja. Kutipan seseorang adalah bahwa teknologi yang dibuat dengan baik tidak dapat dibedakan dari sihir.
Dmitry: Yah, ya, menarik. Dan apa yang sebenarnya ingin saya lakukan, yang tidak dapat dilakukan? Ada lagi? Lebih kuat?Alexei: ini pertanyaan yang sangat berbahaya. Anda selalu ingin melakukan segalanya, dan tidak pernah ada cukup waktu. Tentu saja, saya ingin menyelesaikan hal-hal yang kami mulai, tetapi saya tidak menyelesaikannya. Ini adalah model async, dan debugging async masih harus diselesaikan, tentu saja, dan membuatnya lebih jelas bagi pengguna, untuk mengambil beberapa langkah lagi. Saya tidak yakin apa yang harus dilakukan di sana, tetapi dari hal penting yang ingin saya selesaikan: V8 memiliki mekanisme yang mirip dengan
HotSwap di Java dan teknologi serupa, ketika Anda dapat mengambil sepotong kode dalam program Anda yang sedang berjalan saat ini dan memperbarui perolehan. Misalnya, Anda menetapkan pengecualian dan tahu cara memperbaikinya, segera perbaiki di sana, simpan file, dan semuanya berfungsi lebih jauh, dan seolah-olah tidak ada pengecualian - semuanya diperbaiki langsung. Ini adalah alat yang sangat keren. Beberapa orang berpikir bahwa itu bahkan dapat menggantikan debugging, karena Anda secara bertahap menulis kode dalam potongan-potongan kecil, Anda dapat segera melihat apa yang terjadi - praktis tidak perlu melakukan debug setelah itu.
Dan untuk waktu yang sangat lama, sekitar 9-10 tahun yang lalu, kami memiliki kode yang melakukan ini. Itu ditulis sedikit di dunia lain, dalam realitas yang berbeda - ada V8 berbeda, tidak ada semua Pengapian ini, TurboFan dan yang lainnya. Saya tidak yakin bahwa pada saat itu bahkan Crankshaft ada di sana, itu adalah kompiler sebelumnya di V8. Tidak ada apa-apa. Dan async / menunggu juga tidak ada, tentu saja. Kode ini sangat lama, menggunakan beberapa utilitas internal V8 yang sangat lama yang hanya mendukung kode ini, karena pada saat itu tidak ada yang ingin memahami kode ini dan menulis ulang.
Pada titik tertentu, saya duduk dan menulis ulang, dan mulai kurang crash. Tetapi dia masih sering mengatakan bahwa dia tidak dapat mengedit kode Anda, karena, misalnya, tidak ada cukup dukungan untuk generator. Saat menulis kode ini, ada satu generator per juta baris kode dalam JavaScript. Dan ketika kita mendapatkan async / menunggu, masing-masing fungsi async / menunggu sebenarnya adalah generator itu sendiri. Karena itu, jika Anda meminta untuk mengedit kode dengan async / menunggu, Anda akan kecewa.
Dan karena ini masih alat untuk pengembang dan debugging, ada fitur yang tidak menyenangkan: jika mereka tidak bekerja dua dari sepuluh ketika menggunakan alat, mereka tidak akan menggunakannya lagi. Dan saya ingin sekali menyelesaikannya. Mungkin kita akan menyelesaikannya, karena sekarang saya mungkin akan membawa V8 ke tempat kerja baru saya dan karena ini saya dapat terus bekerja di sana.
Dmitry: Bisakah ini bekerja secara eksklusif selama debugging, atau secara teoritis dapat mengubah bagian dari aplikasi dalam beberapa produksi aplikasi satu halaman?Alexey: Dari sudut pandang V8, dalam produksi lebih mudah untuk berubah, lebih sulit untuk berubah ketika Anda dijeda. Jika dijeda, maka Anda memiliki jejak tumpukan saat ini, yang sudah berjalan. Penting untuk memperbarui kode ini dan memaksa semua tumpukan saat ini, yang merujuk pada beberapa variabel dalam kode Anda, untuk terus bekerja. Dan ketika Anda baru saja produksi, Anda bisa menunggu saat JavaScript berakhir (semoga saja Anda tidak memilikinya sementara (benar) di sana), dan pada saat itu semuanya diganti secara tak terlihat.
Dan itu jauh lebih sederhana, karena Anda cukup mengganti kode, Anda tidak perlu memperbarui semua tautan. Dan kesulitan utamanya adalah, tentu saja, mengganti semua tautan, memulai kembali semua frame, menghidupkan ulang generator, dan sebagainya.
Alex: Tiba-tiba saya punya pertanyaan tentang menggunakan Chrome DevTools sebagai IDE. Ada fungsi seperti itu ketika Anda mengedit JavaScript dan Anda entah bagaimana dapat mengikatnya ke sistem file, dan hal yang sama dengan gaya. Dan saya punya banyak pertanyaan untuknya, karena tidak berhasil. Dan saya orang yang malas, saya suka memperbaikinya di satu tempat, misalnya.Alexei: Pertanyaannya, mengapa itu tidak berhasil. Penting untuk mengatakan pada awalnya bahwa Chrome DevTools tidak pernah IDE, mereka tidak pernah memposisikan diri sebagai IDE. IDE adalah proyek skala yang berbeda, memerlukan upaya lain dan lebih banyak orang. Chrome DevTools dibangun pertama sebagai alat, dan kemudian sebagai editor. Tidak seperti IDE, yang muncul sebagai editor, dan kemudian menambahkan debugger, plug-in, dan sebagainya.
Pada saat yang sama, kami memahami bahwa akan sangat menyenangkan bagi pengguna kami untuk mengedit dan menyimpan, ada beberapa upaya untuk melakukan ini - sekarang, mungkin, upaya kedua atau ketiga ... Tetapi semuanya bermuara pada kenyataan bahwa di web, dengan mempertimbangkan keberadaan semua kompiler CSS webpack ini dan yang lainnya, tugas yang sangat sepele adalah menerapkan perubahan kembali. Anda mengubah kode yang Anda lihat di dalam halaman, Anda perlu memahami dari mana kode ini berasal dari halaman Anda dan hati-hati menerapkan perubahan itu kembali.
Oleh karena itu, di sisi lain, kita dapat mengatakan bahwa kita dapat melakukannya untuk orang-orang yang tidak memiliki konfigurasi yang begitu rumit, tetapi, sayangnya, ini adalah persentase yang sangat kecil dari pengguna kami. Sekarang semua orang memiliki paket web, Babel dan sebagainya. Dan mereka dengan mudah mengubah dan melakukan sesuatu dalam satu arah, tetapi untuk mendapatkan informasi di arah yang berlawanan adalah masalah. Untuk CSS dan SASS, ini dilakukan dengan cara yang ajaib, dan kadang-kadang tampaknya berhasil, saya tidak menggunakannya.
Apakah ini akan berubah di masa depan, Anda masih bisa bertanya. Anda dapat menggunakan Visual Studio Code atau IDE favorit Anda (WebStorm atau yang lainnya), mengedit kode di sana, dan Chrome DevTools akan mencoba menerapkan perubahan ini secara langsung. Tetapi pada kenyataannya, kami memiliki proyek terpisah untuk frontend kami untuk Node, kami mungkin akan membicarakannya nanti, itu bekerja sedikit lebih baik di sana, karena, syukurlah, Node memiliki tingkat kompilasi maksimum dan kompilasi TypeScript dalam JavaScript. Dan itu sudah sulit di sana, tetapi saya masih berharap bahwa di Node sebagian besar paket dan modul ditulis dalam JavaScript murni tanpa langkah-langkah pembangunan menengah. Saya tidak menjawab pertanyaan itu, tetapi sebisa mungkin.
Dmitry: Bagaimana menurut Anda, bagaimana prinsip pengembangan Chrome DevTools selanjutnya? Apa hal paling keren yang diharapkan darinya?Alexey: Ini pertanyaan yang sulit. Pada titik tertentu, seseorang muncul di Google I / O yang membuat alat lain yang nyaman untuk desainer. Ekstensi ini untuk Chrome, sayangnya, saya tidak ingat namanya. Dan itu menambahkan langsung di atas halaman Anda beberapa elemen yang membuatnya lebih mudah bagi Anda sebagai desainer untuk mengedit dan melakukan semuanya. Dan ada gagasan bahwa Chrome DevTools mungkin menjadi alat yang lebih baik untuk para desainer. Ini sudah merupakan alat yang cukup nyaman yang dapat, misalnya, melihat CSS dan sebagainya, tetapi Anda masih dapat membuatnya jauh lebih ideal dan nyaman. Misalnya, pengeditan properti flex yang lebih mudah dan peningkatan kecil lainnya.
Dan ada bagian penting dari pengerjaan Chrome DevTools: proyek ini sangat besar, ia memiliki banyak pengguna dan sejumlah besar bug yang dapat
diarsipkan siapa pun di
crbug.com . Mereka perlu diperbaiki, ada banyak dari mereka, dan banyak waktu dihabiskan hanya untuk membuat semuanya berfungsi. Untuk debugging edit langsung JavaScript, yang kita bicarakan, hotswap mungkin merupakan langkah selanjutnya yang baik, tetapi mungkin atau mungkin tidak, saya tidak tahu.
Alexei: Menurut saya, Chrome DevTools adalah perangkat lunak yang paling canggih untuk membantu pengembang web. Tetapi ada browser lain - Safari, Edge masih ada, Firefox lagi. Apakah ada alat yang ingin saya tarik dari browser lain di Chrome DevTools? Apakah ada sesuatu yang Anda sukai, betapa kerennya dibuat?Alexey: Pengembang Chrome DevTools secara teratur melihat browser lain. Dari hal menarik yang saya perhatikan di sana baru-baru ini, saya ingat bahwa Safari memiliki konsol yang sangat nyaman. Mereka dengan sangat baik menyusun output ke konsol, dan menambahkan navigasi menggunakan panah pada hasilnya. Anda dapat memilih objek di sana, tekan "kanan" - itu akan terbuka. Sangat nyaman. Akibatnya, sekarang fitur ini ada di Chrome DevTools.
Di Firefox, dari hal-hal menarik di DevTools, bagi saya tampaknya mereka mendukung pengeditan visual semua properti CSS sedikit lebih baik - maksud saya properti ini seperti flex dan lainnya - mereka menunjukkan grid secara langsung di atas halaman, dan Anda dapat memindahkan semuanya ke atas bawah. Ini keren, kami sebagian memilikinya, tetapi tidak sepenuhnya. Firefox DevTools, saya pikir, saat ini memiliki dukungan terbaik untuk WebAssembly. Jika karena alasan tertentu Anda harus menulis kode WebAssembly, maka mereka jauh lebih baik daripada kami, karena kami tidak memiliki apa-apa enam bulan yang lalu, sekarang saya belum memeriksanya. Saya pikir mereka menginvestasikan banyak energi dalam hal ini.
Adapun Safari ... dengan cara tertentu, Chrome DevTools adalah garpu dari Inspektur Web Safari, jadi kami mengambil semua yang terbaik yang mereka miliki.
Saya ingat hal penting! Mungkin hanya Firefox yang memiliki Debugging Perjalanan Waktu. Di Mac, di Firefox Nightly Builds, Anda dapat menikmati Time Travel Debugging. Saya tetap diam tentang dia ketika saya ditanya tentang langkah-langkah besar berikut: kedengarannya sangat keren, sangat monumental - saya masih tidak percaya bahwa itu sangat berguna. Sudut pandang pribadi. Tetapi mereka memilikinya, Anda dapat mencoba, jika itu membantu Anda, itu akan menjadi alat baru yang menarik.
: . , , -- . , ( ) , , 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 — ? Ini bukan masalah. , 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. , . , , - - , — , . , , - , , . Ini rumit.
, — « Node.js» — , , , , Node.js, . , , , . , .
: . , . , -, ? - , , - — , . ?: , . , , . , , - . , - , , - , -. . — DevTools: — , , — .
. , , . , , , JavaScript-, , . . , , , — .
, (« , CSS -») . , (diversity, CSS ), . , , . . — . — , . — .
: : HolyJS?: HolyJS, . , , . , , , .
: , ...: , . — . . . HolyJS , , , . , , . , , , , , — . . - .

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