Mengetik dinamis bukan alat pengembangan. Ini omong kosong (buruk)



Ada banyak hal dalam pemrograman yang saya pahami dengan sangat buruk. Begitu banyak yang kadang-kadang mereka bertanya kepada saya - apa yang Anda lakukan dengan baik?

Saya memahami jenis dan desain API yang nyaman dan andal. Tetapi untuk setengah pengembang yang baik, hal-hal ini tidak berarti apa-apa. Karena mereka menggunakan pengetikan dinamis, dan mereka tidak tahu masalah apa dan mengapa saya menyelesaikannya.

Hampir sepanjang hidup saya, saya hanya melambai dan melewati mereka. Orang-orang bodoh ini tidak mengerti hal-hal yang jelas, dan saya tidak berusaha menjelaskan kepada setiap js-nickname mengapa kodenya bukan pengembangan, tetapi mainan prototyping. Tetapi waktu terus berjalan, dan jumlah idiot di sekitar bahkan tidak berpikir untuk menurun, alih-alih memindahkan seluruh industri front-end mereka ke skrip waktu statis pada akhirnya, keledai ini mulai menggunakan segala macam hal, menulis berton-ton tes, dan pergi ke trik yang dapat dibayangkan - hanya saja tidak mengerti jenis.

Ada banyak hal kontroversial di dunia ketika, tergantung pada apa yang ingin Anda dapatkan, kebenaran ditransfer dari satu skala ke skala lainnya, tidak meninggalkan tempat untuk kebenaran pamungkas di jalan terakhir. Beberapa tahun yang lalu saya sudah menulis tentang mengetik, tetapi kemudian saya masih muda, bodoh dan pengecut - saya punya posisi, tetapi agar tidak terlihat seperti orang idiot, saya dengan hati-hati menyembunyikannya di balik diskusi filosofis tentang betapa rumitnya segala sesuatu dan betapa sulitnya bagi penganut untuk bekerja model pengetikan berbeda secara bersamaan.

Tetapi hari ini saya datang ke sini untuk mengatakan:

Pengetikan dinamis adalah omong kosong buruk, dan insinyur yang percaya pada pendekatan seperti itu sangat keliru.


Lihatlah. Pengetikan statis adalah hal yang memungkinkan saya untuk mengekspresikan beberapa kondisi di mana kode tidak dapat berfungsi sebagai instruksi tambahan untuk kompiler. Artinya, saya tahu bahwa fungsi ini hanya berfungsi dengan objek seperti itu, saya menggambarkannya dalam tanda tangannya dan mendapatkan jaminan - objek dengan tipe yang berbeda tidak akan ditransfer ke fungsi. Selain itu, ketik izinkan saya memberi tahu kompiler bagaimana kode saya bekerja. Kompiler akan dapat menggunakan informasi ini untuk melakukan optimasi dan, misalnya, memberi saya petunjuk. Alat pengembangan yang berbeda dapat menggunakan informasi jenis untuk secara otomatis melakukan refactor, melakukannya dengan aman, dan dengan jaminan bahwa fuck tidak pecah. Kode jenis itu sendiri membuat basis kode dapat dimengerti, dan membawa set instruksi Anda lebih dekat ke proses yang Anda gambarkan dengan kode ini.

Penentang pengetikan statis mengatakan semua hal ini tidak perlu. Mereka mengatakan itu padaku

Bug yang menangkap tipe tidak sebanding dengan usaha menulis kode untuk tipe ini.


Serius? Serius? Apakah kita terlalu malas untuk menulis karakter? Kawan Anda berpikir selama lima jam, dan Anda mencetak sepuluh menit. Anda seorang insinyur, jadi cobalah mencari tahu apa jenis kesialan yang Anda bicarakan. Dan jangan lupa bahwa dengan atau tanpa pengetikan statis, Anda akan lebih dari satu kali mendeskripsikan dalam basis kode Anda struktur objek yang akan Anda gunakan. Tetapi jika Anda menggunakan statika, kompiler dan IDE dapat melakukan pekerjaan untuk Anda. Dan periksa kode Anda untuk kesalahan yang menggambarkan objek ini. Jika Anda terlalu malas untuk menulis anotasi jenis ke fungsi - gunakan bahasa inferensi tipe, atau buat menggunakan ekstensi ke IDE.

Jika Anda menginjak anotasi mengembang basis kode - ingat, sialan, semua prinsip kami tentang fakta bahwa eksplisit lebih baik daripada implisit, bahwa salah satu tugas penting dari basis kode harus dapat dimengerti dan dibaca, baik oleh orang maupun oleh mesin. Jika Anda terlalu malas untuk bekerja di kepala bodoh Anda untuk memahami apa jenis aplikasi aplikasi Anda akan bekerja, maka saya punya berita buruk untuk Anda. Untuk menulis sesuatu yang berfungsi, Anda masih harus melakukan pekerjaan ini. Lakukan saja, Anda tidak akan ditentukan, tetapi sesuai permintaan. Sebagai hasilnya, Anda akan menjelaskan prosesnya, tetapi Anda tidak akan memasukkannya ke dalam kepala Anda, dan kualitas kode Anda akan merespons. Bug, inkoherensi, dan kruk.

Penentang pengetikan statis mengatakan bahwa kesalahan penangkapan awal tidak begitu penting.


Alo Papan tugas Anda penuh dengan bug yang diizinkan oleh pengembang. Memperbaiki bug adalah bagian besar dari semua pekerjaan di industri. Kami menghabiskan milyaran jam manusia untuk memperbaiki kesalahan konyol yang konyol. Apakah Anda menulis kode tanpa bug? atau apakah Anda hanya memiliki bug pintar? Ya, neraka berenang di sana. Jika kompiler tidak memeriksa Anda bahwa Anda telah menutup kurung kurawal, percayalah, kami akan memiliki ratusan bug dengan kurawal terbuka.

Ketika Anda berpikir tentang di mana bug berpotensi terjadi dan di mana tidak, ilusi berbahaya muncul bahwa Anda mengendalikan situasi dan telah meramalkan semua kasus. Saya telah bekerja selama tujuh tahun, tidak pernah ada hal seperti itu yang saya ramalkan semua kasus. Karena ini adalah kasus khusus dari masalah salesman keliling - Anda TIDAK PERNAH dapat melihat semua kasus. Anda bahkan tidak dapat mempertimbangkan yang paling umum dan mungkin. Kapan, siapa dan dalam situasi apa akan menulis kode dengan bug kritis, di modul mana dan bagaimana dia akan melakukannya - Anda, sial, tidak tahu. Yang bisa Anda lakukan adalah mengurangi kemungkinan bug. Jadi kurangi saja, Anda dibayar gila uang untuk ini.

Penentang jenis kontras pengetikan statis dengan tes.


Saya tidak akan mengatakan bahwa mereka idiot, saya akan mengatakan bahwa mereka sama sekali tidak memikirkannya dengan baik. Inilah kebenaran yang jelas bagi Anda - tes mencatat bahwa kode yang ada berfungsi dalam kondisi tertentu. Dan jenis menjamin bahwa kode yang belum ditulis akan ditulis dalam kondisi tertentu. Tes diperlukan. Jenis-jenis dibutuhkan. Anda masih mengurangi kemungkinan semuanya akan jatuh. Di dunia di mana kita memiliki anggaran untuk berdiskusi dengan tim selama lima jam tentang apa yang salah dengan Edge kita, akan ada waktu untuk menambahkan anotasi dan beberapa tes.

Nerd dari dunia dinamis mengatakan bahwa pengetikan statis menghilangkan kode fleksibilitas.


Saya tidak mengerti fleksibilitas seperti apa yang mereka bicarakan. Bahkan di C # yang miskin, sistem tipe memungkinkan saya untuk tidak memiliki kontrol atas tipe data yang tipenya tidak penting bagi saya. Saya selalu dapat membuktikan kepada bahasa bahwa di sini, kata mereka, dengarkan di sini, saya tidak dapat menjelaskan apa benda ini, tetapi saya tahu pasti bahwa ia memiliki bidang seperti itu, jenis ini atau jenis ini. Dan saya hanya akan bekerja dengannya. Setiap bahasa yang diketik secara statis memungkinkan ini. Dan fleksibilitas dan kebebasan untuk menulis kode yang tidak bisa berfungsi - saya tidak perlu fleksibilitas seperti itu.

Remaja JS mengatakan pengetikan statis menggeser fokus dari tugas ke mengetik deskripsi.


Dan saya katakan bahwa deskripsi tipe adalah deskripsi proses yang Andaotomatiskan. Dalam pemrograman berorientasi objek, dalam pemrograman fungsional, dalam pemrograman lain apa pun, kami menjabarkan hal-hal dari dunia nyata, dan kode kami berisi pengetahuan tentangnya, yang tanpanya tidak dapat berfungsi. Anda masih akan melakukan pekerjaan ini.

Jika sistem jenis bahasa tertentu tidak memungkinkan Anda untuk menggambarkan domain Anda dengan benar dan aman - ini adalah masalah bahasa tertentu, dan bukan pengetikan statis pada umumnya. Ini normal, dan khususnya dalam bahasa ini Anda menggunakan semua jenis objek dan dinamis di beberapa tempat, tetapi di mana pun Anda bisa mendapatkan jaminan, Anda mendapatkannya.

Saya menulis kode dengan pengetikan dinamis dan statis. Dengan ketat dan tidak ketat, dengan struktural dan nominatif.

Hanya kode dinamis yang membuat saya merasa kuat bahwa saya sedang menulis kode pseudo anak yang hanya akan berfungsi jika bintang-bintang bertemu.


Pengetikan dinamis adalah mainan, hal yang berfungsi saat Anda memutuskan untuk membuat kode sesuatu menjadi satu dan melupakannya. Ketika Anda berencana untuk mengembangkan, ketika orang lain akan bekerja dengan kode Anda, ketika kode keluar pada prod dan mulai memecahkan masalah pengguna, memperbarui sekali seminggu - mengetik dinamis benar-benar tidak dapat diterima. Ingat saja ini dan pergi ubah ekstensi file Anda dari .js ke .ts.



Dan lihat podcast saya - ada masalah baru

All Articles