"Saya hanya punya satu metode pengajaran: hanya bekerja" - wawancara dengan Ryan Dahl (Node.js, Deno)



27 Mei menandai 10 tahun sejak Ryan Dahl merilis versi pertama Node.js. Selama dekade terakhir, proyek ini menjadi lebih dari sukses, tetapi Ryan sendiri telah beralih ke hal lain. Apa yang sedang dia lakukan sekarang? Bagaimana proyek barunya dapat membantu pengembang JavaScript? Apa yang dia pikirkan tentang berbagai bahasa, pendidikan, dan perubahan generasi?

25 Mei, dua hari sebelum tanggal putaran, Ryan akan berbicara di St. Petersburg pada konferensi HolyJS kami. Sementara itu, anggota komite program HolyJS Eugene bunopus Kot dan Dmitry dmitrymakhnev Makhnev bertanya kepadanya secara terperinci tentang semua hal di atas. Pada Medium, kami menerbitkan versi bahasa Inggris dari wawancara, dan untuk Habr membuat versi Rusia.

Eugene : Banyak pembaca sudah tahu Anda berkat Node.js, tetapi bisakah Anda memberi tahu kami sedikit tentang diri Anda?

Ryan : Saya berasal dari San Diego, California. Saya belajar matematika di universitas, dan spesialisasi saya di sekolah pascasarjana di University of Rochester adalah topologi aljabar. Tetapi setelah tiga tahun, saya berpikir: “Untuk apa saya menghabiskan hidup saya? Ini hal-hal yang terlalu aneh dan abstrak. ”

Karena itu, saya meninggalkan sekolah pascasarjana, pergi bepergian, dan setelah beberapa waktu saya terlibat dalam pemrograman. Saya pikir banyak yang telah melakukan jalan yang sama. Pada pertengahan 2000-an, saya terlibat dalam pengembangan web. Pada awalnya, saya suka Ruby on Rails dan Ruby secara umum. Sedangkan untuk Node, beruntung berada di tempat yang tepat pada waktu yang tepat. Secara kebetulan, saya berpikir tentang masalah yang sesuai ketika Node menjadi mungkin.

Eugene : Jadi itu keberuntungan? Atau apakah Anda memiliki visi tertentu tentang proyek ini, dan sejak awal Anda berasumsi bahwa itu akan sangat sukses?

Ryan : Apakah seseorang akan mengerjakan proyek jika dia tidak berharap bahwa dia akan sukses? Tentu saja, harapan yang paling sering tidak terpenuhi. Kami menyerah dan mulai melakukan sesuatu yang lain - seperti yang terjadi pada semua proyek saya kecuali satu. Dengan Node, aku benar-benar beruntung. Kemudian Chrome baru saja keluar (dan dengan itu V8), dan saya berpikir banyak tentang non-blocking I / O dan bagaimana mereka dapat diwakili oleh kerangka kerja web, dan semua ini berjalan baik dengan JavaScript.

Eugene : Sekarang Anda sedang melakukan Deno . Bisakah Anda berbicara tentang pekerjaan saat ini dan rencana masa depan?

Ryan : Rekan lama saya, Bert Belder dan saya mencoba membuat startup. Selama satu setengah tahun terakhir, kami telah bekerja dengannya dalam beberapa proyek, salah satunya adalah Deno. Bert memainkan peran besar dalam pengembangan Node, ia melakukan sebagian besar pekerjaan porting Node ke Windows. Selain itu, ia adalah salah satu penulis Libuv .



Eugene : Apakah menurut Anda Deno mengharapkan kesuksesan besar dalam waktu dekat? Apakah Anda akan terus mengerjakannya, katakanlah, dalam lima tahun?

Ryan : Saya tidak tahu apakah Deno akan ada dalam lima tahun - kemungkinan besar tidak, karena sebagian besar proyek tidak menghasilkan apa-apa. Tetapi untuk sekarang, Deno menangkap saya dan memberi saya kepuasan kerja.

Saya pikir saat ini saya tidak puas dengan keadaan di mana bahasa dinamis. Saya kehilangan alat yang cepat, mudah dan cukup serbaguna. Baik Node dan Python baik, tetapi saya menemukan mereka rumit atau tidak dirancang dengan baik dalam beberapa hal. Jadi pada akhirnya, saya mencoba membuat alat untuk alur kerja saya sendiri.

Eugene : Ketika kami sedang mempersiapkan pertanyaan, kami membaca sebuah wawancara di situs web Mapping the Journey. Di sana Anda mengatakan Anda bekerja dengan pembelajaran mesin. Dan segera setelah itu, mereka membawa dan mempresentasikan Deno di JSConf EU. Jadi minat Anda telah berubah?

Ryan : Dalam beberapa tahun terakhir, saya telah terlibat dalam algoritma pembelajaran mesin. Saya tidak akan masuk ke detail proyek yang sedang saya kerjakan, tapi itu kerangka kerja pembelajaran mesin JavaScript. Karena itu, saya mencoba Node untuk pertama kalinya dalam beberapa tahun, dan ini menjelaskan beberapa masalah saya dengan Node. Ini menyebabkan presentasi di JSConf, di mana prototipe Deno ditampilkan. Kemudian proyek itu menunjukkan minat yang luar biasa, sehingga Bert bergabung. Dan kami terus mengerjakannya. Dan nanti saya akan kembali ke proyek ML tersebut.

Saya terutama ingin menghubungkan Deno ke WebGL. Seperti yang mungkin Anda ketahui, Deno berjalan pada V8, yang pada gilirannya merupakan bagian dari dunia luas infrastruktur perangkat lunak Chrome. Chrome memiliki perpustakaan Angle yang mengimplementasikan WebGL. Menghubungkan ke ini akan memungkinkan Deno untuk memprogram GPU. Dan GPU diperlukan untuk model pelatihan banyak jaringan saraf modern. Saya benar-benar ingin Deno memberi saya proses kerja yang diinginkan dengan pemrograman matematika. Saya percaya bahwa sebagian besar tugas dalam statistik dan matematika secara keseluruhan datang ke semacam permainan data, dan ini sangat mudah dilakukan dengan bahasa yang dinamis.

Secara umum, tidak ada begitu banyak bahasa dinamis di dunia, terutama dalam hal populer dan cepat. Jadi JavaScript sangat bagus untuk mendefinisikan model. Dalam banyak kasus, perhitungan akan ditransfer ke GPU, sehingga kecepatan bahasa yang dinamis atau runtime Anda tidak akan terlalu penting. Secara umum, saya berencana untuk kembali ke semua hal ini cepat atau lambat, tetapi sejauh ini fokus saya adalah pada Deno.

Dmitry : Apakah Deno siap digunakan dalam produksi sekarang? Apakah Anda tahu kasus menarik penggunaan nyata Deno?

Ryan : Menurut saya, orang yang berbeda memiliki ambang rasa sakit yang berbeda. Jika Anda siap untuk hidup dengan bug, kurangnya dokumentasi dan perubahan API, maka untuk beberapa tugas Deno dapat digunakan bahkan hingga hari ini. Namun secara umum, dia belum siap berproduksi. Sekarang dalam versi 0.3, dan saya akan menunjuk sebagai versi 1.0 yang saya anggap cocok untuk digunakan oleh orang lain. Ini adalah proyek berskala cukup besar, kami menciptakan platform baru. Untuk melakukan ini, banyak pekerjaan yang harus dilakukan, dan kami berusaha melakukannya dengan benar. Namun, jika Anda seorang peretas, jangan takut untuk mengotori tangan Anda dan meninggalkan masalah atau menarik permintaan jika terjadi masalah - maka ini dapat digunakan.

Eugene : Apa yang perlu ditambahkan ke Deno agar perusahaan mulai menggunakannya dalam produksi?

Ryan : Dalam kasus Deno, kami fokus pada situasi yang berbeda daripada dengan Node.js. Kami berusaha memberikan akses tingkat yang lebih rendah ke komputer. Secara khusus, kami ingin Deno dapat diimpor sebagai peti Rust dan dapat dimasukkan ke sistem lain.

Misalkan Anda memiliki server web Anda sendiri atau sistem tanpa server, dan Anda ingin memberi klien kemampuan untuk mengeksekusi JavaScript. Mungkin Anda tidak ingin turun ke level V8, V8 mentah akan memberi Anda sedikit. Beberapa infrastruktur diperlukan, tetapi runtime penuh yang mungkin dimiliki seseorang pada komputer desktop sudah terlalu banyak. Kami berharap dapat membahas skenario "penyematan" ini. Kami masih bekerja tentang bagaimana seharusnya API dalam kasus ini. Kami juga memiliki masalah kinerja yang kami ikuti . Kami perlu memberikan dokumentasi yang lebih baik. Secara umum, ada pekerjaan yang harus dilakukan.

Dmitry : Salah satu tugas Deno adalah dukungan bawaan untuk TypeScript. Baru-baru ini, TypeScript telah menyebar cukup luas, banyak perusahaan mulai menggunakannya tidak hanya di browser, tetapi juga untuk Node.js. Saya mendengar bahwa orang-orang dari tim inti Node.js juga memujinya. Menurut pendapat Anda, bisakah TypeScript pernah menggantikan JavaScript di browser dan memperoleh runtime sendiri (mungkin dengan mesin virtual)?

Ryan : Salah satu manfaat dari TypeScript adalah itu adalah superset dari JavaScript, jadi itu tidak akan menggantikannya. Apa yang benar-benar dapat saya bayangkan adalah bahwa TypeScript akan masuk ke dalam standar dan tipe opsional akan muncul dalam JavaScript, tetapi ini akan terjadi segera.

Bahasa dinamis sangat berguna untuk tahap awal pengembangan, misalnya, saat Anda membuat prototipe sesuatu. Keuntungan dari TypeScript (dan ide tipe opsional pada umumnya) adalah bahwa ketika prototipe secara bertahap matang, Anda dapat secara bertahap "memutar" implementasi dengan memberi anotasi pada kode dengan tipe. Ini tidak harus terjadi pada saat yang bersamaan, sehingga Anda masih dapat bergerak sangat cepat dan menguraikan ide-ide baru dalam JavaScript.

Adapun apakah mungkin untuk menggunakan jenis di mesin virtual V8 untuk mengoptimalkan runtime, saya tidak tahu. Kedengarannya sangat sulit, dan saya tidak memiliki kompetensi yang cukup untuk mengatakan apakah akan ada keuntungan yang signifikan. Di Deno, kami menggunakan kompiler TypeScript yang diimplementasikan dalam JavaScript. Anda dapat membayangkan implementasi Rust dari kompiler yang menerjemahkan ke JavaScript lebih cepat. Ini mungkin, proyek swc sedang mengerjakannya.

Eugene : Bisakah TypeScript menggantikan JavaScript? Misalkan, dalam ES 2020, TypeScript akan digabung menjadi satu bahasa dengan JavaScript.

Ryan : Ya, jenis dapat ditambahkan ke standar. Apakah TC 39 tampaknya mengatur standar JavaScript? Sejauh yang saya tahu, sejauh ini kemungkinan ini belum dibahas. Tapi saya pikir itu masih lama, meskipun itu mungkin.

Eugene : Apakah Anda tahu Dart? Pernahkah Anda menggunakannya? Apa yang kamu pikirkan tentang dia?

Ryan : Saya mencobanya karena penasaran, tapi itu sudah lama sekali. Sasaran Dart serupa dengan TypeScript - ini adalah bahasa yang dinamis dengan tipe opsional. Seperti yang saya katakan, ini memungkinkan Anda untuk dengan mudah mengatur alur kerja Anda. Tapi, tidak seperti TypeScript, Dart bukan superset dari JavaScript, ini adalah bahasa yang berbeda. Mungkin karena ini, menyebar jauh lebih lambat.

Benar, Flutter telah mendapatkan popularitas sekarang, jadi mungkin aku tertinggal di belakang kehidupan di sini. Dengan satu atau lain cara, TypeScript berhasil mencapai tujuan yang sama tanpa membuat bahasa baru.

Ketika bahasa baru muncul, mudah baginya untuk membangkitkan rasa ingin tahu, tetapi untuk membuat orang menggunakannya lebih sulit. Manfaatnya harus sangat signifikan. Sebagai contoh, saya sangat skeptis tentang Rust. Tampak bagi saya bahwa semua yang dia bisa lakukan sudah dalam C ++, yang saya gunakan secara aktif. Baru-baru ini saya mengenal Rust lebih dekat, dan menjadi jelas bahwa bagi saya itu dapat dengan mudah menggantikan C ++. Secara umum, agar bahasa baru berhasil, bahasa tersebut harus memiliki urutan yang lebih baik daripada yang lama.

Eugene : Dengan bahasa - seperti dengan mobil, toh Anda kadang-kadang akan naik bus.

Ryan : Tepat.

Eugene : Terlepas dari popularitas TypeScript, JavaScript sekarang umumnya ada di mana-mana: di backend, frontend, di perangkat seluler, di React Native, Raspberry Pi, dan sebagainya. Tampaknya, kita memiliki revolusi, dan ada satu bahasa yang dapat melakukan segalanya. Benarkah ini? Atau akan selalu ada bahasa khusus untuk tugas khusus?

Ryan : JavaScript sangat menarik karena berfungsi di mana-mana. Tetapi perlu dicatat bahwa sementara banyak orang menganggap TypeScript sebagai bahasa yang terpisah, itu mengkompilasi dalam JavaScript. Jadi, dari sudut pandang saya, TypeScript juga berfungsi di mana saja. Secara umum, saya setuju dengan pernyataan Anda. Tentu saja, di masa mendatang, JavaScript akan tetap menjadi bahasa browser dan beberapa perangkat. Oleh karena itu, saya terus menggunakannya - ia menyediakan berbagai kemungkinan yang sangat luas.

Dmitry : Tapi apakah Anda tidak berpikir bahwa popularitas JavaScript ini bisa menjadi lebih buruk? Web kini telah menjadi platform yang sangat diperlukan untuk layanan apa pun, dan JavaScript adalah satu-satunya bahasa tempat Anda dapat menulis layanan web dalam produksi. Mungkin akan lebih baik jika kita punya pilihan, dan semua platform tidak diasah dalam satu bahasa? Mungkin kita membutuhkan mesin virtual yang berbeda di browser?

Ryan : Saya pikir itulah yang menyebabkan popularitas Wasm. Di atasnya, Anda dapat mengkompilasi, katakanlah, Karat ke dalam kode yang dapat dieksekusi di browser.

Kedengarannya luar biasa, tapi saya bertanya-tanya seberapa baik kerjanya untuk bahasa dengan pengumpulan sampah atau alat runtime lainnya. Meskipun secara teknis dimungkinkan untuk menggunakan Python melalui Wasm untuk membangun sebuah situs, saya menduga hasilnya akan rumit dan lambat. Saya pikir hanya pengalaman yang akan ditampilkan di sini.

Dmitry : Yaitu, jika saya ingin menggunakan sesuatu alih-alih JavaScript, apakah saya perlu belajar bahasa yang dapat diubah menjadi Wasm?

Ryan : Atau dalam JavaScript. Faktanya adalah bahwa JavaScript memiliki pemulung dan banyak lagi. Oleh karena itu, jika Anda menggunakan bahasa yang dinamis, lebih baik menerjemahkan ke dalam JavaScript daripada mengkompilasi dalam Wasm, dan pada saat yang sama mengkompilasi seluruh runtime Anda, termasuk pengumpul sampah dan banyak lagi. Anda harus menginvestasikan banyak sumber daya, meskipun V8 mungkin akan lebih baik dengan pengumpulan sampah. Tapi ya, Dart mengkompilasi dalam JavaScript, dan Anda dapat menulis situs web di atasnya. Ada bahasa lain yang melakukan hal yang sama.



Dmitry : Karena kita berbicara tentang berbagai bahasa, bahasa lama atau baru apa yang menurut Anda menarik untuk dipelajari pada tahun 2019?

Ryan : Saya sangat suka Rust. Ini memiliki banyak temuan menarik, misalnya, gagasan tentang objek tunggal yang bisa berubah. Ia memiliki kompiler hebat yang menyediakan kode yang sangat optimal. Tetapi memahami Rust tidak mudah. Butuh beberapa bulan untuk memahami apa yang sedang terjadi di sana. Secara umum, Rust adalah bahasa yang sangat menarik, tetapi tidak berarti universal.

Jika Anda hanya menulis aplikasi, maka kemungkinan besar Anda tidak akan menulisnya di Rust, tetapi dalam sesuatu yang lebih sederhana: Ruby, JavaScript atau Python. Tetapi ada beberapa situasi di mana Rust melakukan tugasnya dengan cemerlang. Sebagai contoh, ini sangat bagus untuk menulis database, server web, atau, dalam kasus kami, mesin virtual. Ini memberikan kontrol penuh atas semua yang terjadi dalam kode Anda, tetapi dengan biaya kompleksitas, yang terbuka untuk pengembang.

Karat adalah kata baru dalam penulisan kode tingkat rendah, ia memiliki keunggulan signifikan dibandingkan Go. Go memiliki pemulung, sehingga sangat bagus untuk server berkinerja tinggi, ringkas, dan menulisnya sangat sederhana. Namun, ada kalanya memiliki pemulung bisa menjadi minus, bukan plus. Deno, misalnya, memiliki kasus seperti itu. Kami membungkus V8 yang sudah memiliki pemulung. Dua kolektor dalam satu proses akan berubah, dan interaksinya dapat menjadi bencana besar. V8 sudah sangat rumit. Secara umum, Rust sangat cocok untuk tujuan kita. Akan menarik untuk melihat aplikasi apa saja yang ada untuk Rust saat itu dapat dikompilasi di Wasm.

Dmitry : Apa pendapat Anda tentang semakin populernya bahasa fungsional? Misalnya, Elm untuk frontend, atau Idris.

Ryan : Saya belum mencoba keduanya, jadi saya tidak bisa mengatakan apa-apa tentang mereka.

Eugene : Bagaimana dengan bahasa fungsional secara umum?

Ryan : Gaya fungsionalnya cukup bagus. Ini tidak berarti bahwa seluruh aplikasi harus hanya terdiri atas peta, pengurangan, dan sejenisnya. Ada situasi di mana lebih mudah untuk bekerja dalam gaya imperatif dan lebih mudah dibaca. Kedua pendekatan tersebut dikombinasikan dengan sangat baik dalam Rust dan JavaScript, jadi membatasi diri Anda hanya dengan satu saja tidak perlu. Pada akhirnya, CPU masih sangat penting, ia bekerja berdasarkan instruksi yang dikirim kepadanya. Oleh karena itu, adalah bijaksana untuk memikirkan kode dalam paradigma yang sama.

Eugene : Dan dengan gaya apa Deno ditulis? Berorientasi objek atau fungsional?

Ryan : Digunakan keduanya. Itu semua tergantung pada tujuan spesifik yang ingin kita capai.

Eugene : Kami sudah membahas bahasa mana yang Anda sukai, tetapi bagaimana dengan alatnya? Apa IDE favorit Anda? Apakah Anda menulis di MacOS atau Linux?

Ryan : Saya menulis di vim, menggunakan iTerm2, dan komputer saya adalah MacBook kecil. Saya sering bepergian dan karena ini saya sering bekerja pada laptop. Pada titik tertentu, saya perhatikan bahwa setelah bekerja di belakang monitor besar, sangat menyakitkan bagi saya untuk beralih ke laptop. Karena itu, saya belajar sendiri untuk menggunakan laptop setiap saat.

Di tempat saya adalah unit sistem berbasis Linux, saya menghubungkannya melalui SSH. Saya cukup kuno dalam memilih alat, kebanyakan ini adalah hal-hal seperti UNIX. Saya menggunakan LLDB untuk debugging.

Saya bekerja di Visual Studio Code, tetapi sekarang kami sedang menulis platform kami sendiri, jadi tidak ada banyak integrasi yang Anda harapkan dari IDE. Biasanya hal-hal seperti itu tidak ada hubungannya dengan apa yang saya kerjakan, dan pada akhirnya, semua ini mengganggu saya. Saya sudah terbiasa bekerja dengan kode telanjang, ini sangat nyaman ketika mengembangkan perangkat lunak tingkat rendah. Saya pikir jika saya menulis situs web atau aplikasi untuk platform populer, saya akan menggunakan Visual Studio Code.

Eugene : Secara umum, Anda adalah seorang programmer sekolah tua.

Ryan : Mungkin iya.

Eugene : Lalu pertanyaan selanjutnya adalah tentang sekolah. Rupanya, keterampilan pemrograman dasar dalam waktu dekat akan dipelajari di sekolah bersama dengan matematika, bahasa Inggris dan mata pelajaran lainnya. Apa yang Anda pikirkan tentang ini? Mungkin di masa depan yang agak jauh, pembelajaran mesin juga akan masuk ke kurikulum sekolah?

Ryan : Saya telah memprogram selama 15 tahun terakhir, dan selama ini komunitas kami telah berkembang sangat pesat. Pada tahun 2005, bagi saya sepertinya saya melewatkan semua yang paling penting, meskipun menurut standar saat ini kami masih sedikit. Sekarang, programmer ada di mana-mana. Jelas, pemrograman telah berkembang ke audiens yang besar. Ini telah menjadi keterampilan yang penting bagi banyak orang. Dan dengan itu dalam pikiran, ya, pemrograman harus diajarkan di sekolah menengah. Tetapi tentang pembelajaran mesin, saya pikir hal-hal yang lebih mendasar lebih berguna bagi siswa sekolah menengah.

Menurut saya, dalam pelajaran matematika, lebih baik mempelajari statistik secara aktif. Di AS, di sekolah menengah, siswa belajar aljabar, persamaan kuadrat, permulaan matanalisis, turunan, dan sejenisnya. Aljabar dan matan menempati sebagian besar program, dan kemudian sebagian kecil orang secara teratur menggunakannya. Tetapi banyak profesional dituntut untuk dapat memproses data statistik.

Adapun pembelajaran mesin, masih pada tahap percobaan. Tidak mungkin bahwa dalam sepuluh tahun semuanya akan terlihat sama seperti sekarang - area ini berubah terlalu cepat.

Eugene : Karena kami berbicara tentang generasi muda, kami bertamasya dari sekolah di kantor kami sekitar seminggu yang lalu. , 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/id450752/


All Articles