Ada kutipan oleh Alan J. Perlis yang mengatakan:
Ada dua cara untuk menulis program bebas kesalahan; hanya yang ketiga yang berfungsi.
Baru-baru ini saya mendengar kutipan ini dari teman saya, dan tidak dapat memahami makna yang lebih dalam di baliknya.
Apa yang Perlis bicarakan di sini?
bug
quotations
ykombinator
sumber
sumber
Jawaban:
Ini berarti tidak ada program yang bebas dari kesalahan. Kutipan mendalam tentang cara untuk menghindari kesalahan dengan kesalahan itu sendiri adalah parodi.
sumber
Tidak ada cara ketiga.
sumber
Saya akan menjawab dengan penawaran lain ...
;-)
sumber
Seperti yang telah ditunjukkan oleh banyak jawaban lain, tidak ada cara untuk menulis program bebas kesalahan .
Tapi yang ingin saya tunjukkan adalah potensi meta nature kutipan. Ini pada dasarnya kesalahan di luar batas. Dalam pernyataan pertama, ia mendefinisikan alam semesta atau "daftar" yang hanya memiliki dua kemungkinan atau elemen. Namun dalam pernyataan kedua, ia membuat referensi ke yang ketiga. Yang tidak masuk akal! Bahkan ilegal! Elemen ketiga yang diberi batas dua elemen itu sendiri merupakan kesalahan.
Benar-benar mendalam karena kutipan tersebut mampu menunjukkan esensi yang dimaksud.
sumber
Ini berarti bahwa semua program non-sepele akan memiliki bug. Itu hanya cara lucu untuk mengatakan bahwa tidak ada cara untuk menulis program bebas kesalahan.
sumber
Dimungkinkan untuk menulis program bebas kesalahan, bahkan yang non-sepele dan bahkan membuktikannya benar. Misalnya, pertimbangkan bahasa seperti Coq, Epigram atau Agda di mana ini dilakukan.
Masalah penghentian menyatakan bahwa tidak mungkin melakukan ini untuk program umum .
sumber
Ini mengingatkan saya pada kemeja nerd yang saya lihat: Ada 10 jenis orang di dunia. Mereka yang tahu biner dan mereka yang tidak.
Itu juga bisa menjadi permainan pada fakta bahwa kadang-kadang daftar diindeks. $ var = array ('Pertama', 'Kedua', 'Ketiga'); Dan Anda dapat mengakses daftar ini sebagai berikut: $ var [0] = 'Pertama' $ var [1] = 'Kedua' $ var [2] = 'Ketiga'
Jadi indeks array literal menunjuk ke indeks "Ketiga".
sumber
Ini sudah dijelaskan dengan kata lain, tetapi tidak sejelas yang saya kira seharusnya. Ini berarti Anda akan mencoba kedua cara, mereka akan memiliki kesalahan, dan akhirnya Anda akan memperbaiki bug Anda dan memiliki program bebas kesalahan. Bandingkan dengan penawaran lain:
(Atau, Anda bisa membaca ini seperti kata Pierre (yang saya pikir merupakan peregangan). (Cara ketiga, yang tidak ada dalam domain, berfungsi.) Seperti yang saya katakan, ini peregangan, tetapi benar.
sumber
Ini adalah kutipan yang sama yang digunakan ayah saya untuk memberi tahu saya ketika saya membuat alasan. Perkataannya cenderung seperti: "Ada 3 sisi dalam sebuah cerita. Sisi mereka, sisi Anda, dan sisi kanan / benar / benar".
Menempatkan ini ke dalam konteks dengan pengembangan (dan menjadi tester perangkat lunak oleh prof.), Saya akan mengatakan karena ada begitu banyak cara untuk kode sesuatu itu masuk akal untuk pergi dengan "Ada 3 sisi untuk pengkodean. Kode Anda, kode mereka, dan kode Refactored. "
Saya pikir ini karena programmer / pengembang cenderung untuk melakukan refactor setelah produk menjadi stabil yang sebagian besar sudah terlambat, tetapi sebagian besar waktu refactor dilakukan untuk meningkatkan sesuatu yang Anda dan teman Anda tidak melakukannya dengan baik di tempat pertama.
Semoga ini membantu.
sumber
Saya pikir, secara teknis, Anda dapat menulis program bebas-kesalahan sepele, tetapi karena Masalah Pemutusan tidak mungkin membuktikan bahwa itu bebas kesalahan. Jadi, seseorang harus bekerja dengan asumsi bahwa semua program memiliki bug karena tidak mungkin untuk membuktikan sebaliknya.
http://en.wikipedia.org/wiki/Halting_problem
Pembaruan: Anda dapat membuktikan algoritma tertentu akan mengembalikan jawaban yang benar, tetapi itu tidak sama dengan membuktikan bahwa itu sepenuhnya benar. http://en.wikipedia.org/wiki/Correctness_(computer_science )
Namun, maksud saya adalah bahwa kutipan mengacu pada fakta bahwa seseorang harus berasumsi bahwa program selalu memiliki bug dan mencoba menjelaskan mengapa itu terjadi. http://en.wikipedia.org/wiki/Software_bug#Bug_management
sumber
Sebagai wawasan tambahan, "dua cara" mungkin menjadi referensi untuk kutipan ini oleh Tony Hoare :
Renungkan itu sedikit dan Anda akan melihat dia mengatakan hal yang sama: jika perangkat lunak Anda non-sepele, ia memiliki bug (tetapi cukup rumit dan itu tidak akan menjadi bug yang jelas ).
sumber