Penginjil vs. Manusia Serigala


Nama itu bisa saja berpura-pura menjadi film-B, tetapi pada kenyataannya itu akan lebih banyak tentang hal-hal duniawi, yaitu: cinta yang penuh gairah dan kadang-kadang sama sekali tidak masuk akal dari para programmer dan orang lain yang mempromosikan solusi teknologi untuk "kolam perak" - keyakinan bahwa itu adalah Solusinya memiliki berbagai macam aplikasi.

Program khusus


Saya akan mulai sedikit dari jauh: kode program dalam arti luas selalu merupakan fungsi tertentu yang bekerja secara ketat dalam kisaran tertentu dari nilai yang mungkin. Jalan keluar apa pun dari jangkauan adalah situasi darurat dan masalah serius, paling sering mengarah pada penghentian (namun, ada sudut pandang lain tentang masalah ini, lihat, misalnya, ideologi Karat). Dalam elektronik modern, lebih banyak kode berfungsi di kotak pasir berpagar yang dikelola oleh kode yang berbeda, dan dengan demikian membebaskan dirinya dari tanggung jawab crash "serius": ponsel Anda kemungkinan besar tidak akan rusak dan bahkan tidak akan membutuhkan reboot jika salah satu aplikasi crash. Tapi ini tidak mengubah spesifikasi masing-masing blok kode individu, juga tidak mengubah kebutuhan untuk pencocokan perangkat keras yang tepat di mana program berjalan dengan harapan program ini: tidak peduli seberapa aman Rust, Anda tidak akan dapat mengeksekusi kodenya,dikompilasi untuk arsitektur prosesor yang berbeda. Dan ekstensi apa pun untuk rentang nilai yang dapat diterima untuk diproses - katakanlah, kemampuan browser untuk mengabaikan dan melewatkan html "buruk", memproses dan menunjukkan semua "baik" - semuanya harus dijelaskan secara eksplisit dalam kode yang sama.

Kode program tidak memiliki kemampuan untuk mereplikasi, berkat yang kita hidup lebih atau kurang normal selama 60-90 tahun, terlepas dari triliunan kerusakan kecil di tubuh kita pada tingkat seluler, dan bahkan tidak dapat secara alami "menang" dari hukum fisika, katakanlah, dari hukum kedua termodinamika dan interaksi yang lemah, berkat itu Anda dapat secara tidak sengaja menjatuhkan sesuatu dari tangan Anda, tetapi mengambilnya dari tanah atau lantai - karena itu tidak akan terbang melampaui lantai. Jika kode program rusak, itu rusak.

Tentu saja, ini semua bertentangan dengan realitas objektif kami. Jika kodenya berfungsi (jangan bicara tentang komputasi kuantum di sini) dalam satu set status diskrit tertentu, bahkan jika jumlahnya sangat, sangat banyak, maka dunia nyata bekerja pada jumlah tak terhingga negara dalam rentang tertentu. Atau dalam tatanan astronomi yang jauh lebih besar, jika Anda yakin realitas memiliki sifat yang berbeda.

Nah, mengapa semua ini?


Tidak, tidak pada kenyataan bahwa kode default lebih "rapuh" daripada yang sebenarnya - meskipun ini memang, itu bukan hal utama. Dan hal utama di sini adalah bahwa dari kenyataan bahwa solusi perangkat lunak Anda secara teoritis dapat bekerja dalam rentang nilai tertentu (mis., Memecahkan masalah spesifik tertentu), itu tidak berarti bahwa itu akan menyelesaikannya dalam kenyataan - keadaan yang memungkinkan lebih banyak lagi, dan kesesuaian teoritis program di antara mereka mungkin sama sekali tidak relevan.

Misalnya, bahasa sinyal dalam game Factorio adalah Turing-complete:


Dan dengan itu Anda bahkan dapat menampilkan klip. Sekarang angkat tangan Anda, siapa yang percaya bahwa perangkat lunak komersial akan ditulis di atasnya - terlepas dari kenyataan bahwa secara teori ini sepenuhnya mungkin?

Namun demikian, ketika membaca artikel tentang teknologi, saya sangat sering bertemu dengan fakta bahwa orang-orang yang menulis mereka lebih memilih untuk menjadi ahli matematika yang solid dan mati teknis benar (yang terbaik jenis terburuk yang benar).

Secara teori, teori tidak berbeda dengan praktik


Mengapa mereka melakukan ini? Ini adalah pertanyaan yang sangat bagus, dan saya secara pribadi menemukan dua versi: pertama, beberapa cukup jujur ​​memahami perbedaan antara "mungkin dalam teori" dan "mungkin dalam praktik," tetapi mereka lebih suka mengabaikannya dalam artikel dengan sengaja, dipandu oleh prinsip "Anda berteriak keras - lebih dia akan mencari tahu tentang orang-orang. " Benar, ironi di sini adalah bahwa prinsip ini juga bukan peluru perak, dan jika Anda berteriak sangat keras tanpa alasan - kebanyakan orang tidak akan tahu hal yang menyanjung tentang Anda.

Yah, dan kedua, beberapa benar-benar tidak begitu mengerti perbedaannya, yang memunculkan serangkaian situasi buruk, dari "seorang ilmuwan memperkosa seorang jurnalis", ketika seseorang yang menulis artikel bukanlah penulis langsung teknologi dan, secara umum, bahkan senang diperkosa, jadi bagaimana dia percaya bahwa deskripsi yang lebih radikal dan “cembung” adalah untuk kepentingannya atau untuk kepentingan teknologi yang dijelaskan; untuk situasi di mana penulis hanya percaya pada tesisnya sendiri yang luas, meskipun pada dasarnya tidak ada dasar untuk keyakinan seperti itu.

Dan akan sangat baik jika tesis artikel ini tetap menjadi masalah teoretis yang tidak terlalu penting, tetapi sayangnya, itu sangat berarti. Dari pribadi saya: belum lama ini saya menghabiskan lebih dari satu hari kerja untuk menjelaskan kepada kolega saya bahwa menghapus kode yang tidak digunakan di webpack (tree-shaking) ada, tetapi bekerja pada prinsip-prinsip yang cukup primitif, yang mengapa ruang lingkup hal ini cukup sederhana , dan Anda tidak dapat mengandalkannya secara membuta tanpa banyak trik dan pemeriksaan tambahan(artikel yang bagus, omong-omong, tapi saya sendiri sedang menggali materi ini jauh sebelum itu). Anda bisa, tentu saja, menyalahkan kolega - tetapi saya sendiri ingat banyak artikel dan materi tentang topik "sekarang ada pohon-gemetar di webpack, banzai!" fakta bahwa sekarang majelis kita akan menjadi kecil dan semua ini benar-benar otomatis karena "keajaiban" dari paket web.

Siapa yang harus disalahkan dan apa yang harus dilakukan?


Tentu saja, saya tidak berpikir sama sekali bahwa suara seseorang yang menangis di padang pasir (dan bahkan di habr) akan mengubah sesuatu di sini, dan pada akhirnya - ada proporsi yang cukup besar dari mereka yang secara penuh sengaja menggambarkan secara luas ruang lingkup teknologi mereka agar terlihat lebih menarik . Tetapi jika seseorang melakukan ini dengan sengaja - BERPIKIRtolong dipikirkan. Setidaknya ketahuilah bahwa jika program atau teknologi Anda mampu melakukan sesuatu - mulai dari ini hingga ke titik bahwa dengan bantuan program atau teknologi Anda, Anda benar-benar dapat melakukan sesuatu dalam praktik, terutama bagi mereka yang bukan penulis - sangat lama cara. Ketahuilah bahwa jika Anda telah melakukan sesuatu yang bekerja dalam kasus tertentu pada proyek subjek tertentu dengan daftar masalah tertentu, ini tidak memberi Anda alasan untuk secara otomatis menganggap bahwa teknologi Anda akan berguna di mana-mana. Akhirnya, ketahuilah bahwa kode untuk "Anda" dan kode untuk semua orang adalah dua perbedaan besar, dan jika Anda meletakkan kode "untuk" Anda di sumber terbuka, ini tidak secara otomatis menjadikannya kode yang berguna bagi pengembang lain.

All Articles