Alan Perlis, hatasız programlar yazma yolları hakkında ne demek istedi? [kapalı]


29

Alan J. Perlis'in şöyle bir teklifi var :

Hatasız programlar yazmak için iki yol vardır; sadece üçte biri çalışıyor.

Geçenlerde bu teklifi arkadaşımdan duydum ve arkasındaki derin anlamı anlayamadım.

Perlis burada ne hakkında konuşuyor?


1
Siz de bu parodinin içindeki yanlışlığı fark ediyorsunuz, hatasız, önemsiz olmayan programlar yazmanız mümkün, sadece disipline giriyor.


1
Önerilen okumalar: Tartışın $ {blog}
gnat

Yanıtlar:


41

Gerçekten hatasız program olmadığı anlamına gelir . Bir hatanın kendisiyle yapılan hatalardan kaçınmanın yolları hakkında derin bir alıntı parodidir.


3
Alan Perlis'in kesinlikle kelimelerle bir yolu vardı.
Frank Shearar

2
Bu alıntı anlamında önemli olan “parodi”.
Adam Harte

60

Üçüncü bir yol yok.

Hatasız programlar yazmak için hiçbir yolu yoktur



14

Diğer birçok cevabın da işaret ettiği gibi, hatasız bir program yazmanın bir yolu yoktur .

Ancak belirtmek istediğim, teklifin potansiyel meta doğası. Esasen sınır dışı bir hata. İlk ifadede, sadece iki olasılık veya öğeye sahip evreni veya "listeyi" tanımlar. Yine de ikinci ifadede, üçte birine atıfta bulunuyor. Hangisi saçma! Hatta yasadışı! İki eleman sınırı verilen üçüncü elemanın kendisi bir hatadır.

Gerçekten de alıntıların, atıfta bulunduğu özü gösterebilmesidir.


Bir programın belirtildiği şekilde davrandığını kanıtlamanın bir yolu vardır. Bu, örneğin nükleer tesisler için kullanılıyor ...

1
@ Thorbjørn Ravn Andersen, belirtildiği gibi hatasız demek değildir.
CaffGeek

5

Bu, tüm önemsiz olmayan programların hatalara sahip olacağı anlamına gelir. Hatasız bir program yazmanın bir yolu olmadığını söylemenin komik bir yolu.


5

Sorunsuz programlar yazmak, hatta önemsiz olmayan programlar yazmak ve hatta bunları doğru kanıtlamak mümkündür. Örneğin, bunun yapıldığı yer olan Coq, Epigram veya Agda gibi dilleri göz önünde bulundurun.

Durdurulması sorun onun için bunu yapmak mümkün olmadığını bildiren genel bir program .


Don Austin’in UT Austin’deki ekibine, 1970’lerin ve 1980’lerin başında Çingene Doğrulama Ortamı’nın çalışmalarına geri dönün. Donanmaya kanıtlanmış hatasız bir Message Flow Modulator kullanarak, hatasız kodun mümkün olduğunu gösterdiler. Kabul testi paketi tamamen farklı bir grup tarafından geliştirilmiştir. MFM kabul test takımını ilk gördüğünde, Kabul Testinde NO sapma, feragat veya "evet ama" lerle geçti.
John R. Strohm

3

Bu bana gördüğüm bir inek gömleğini hatırlatıyor: Dünyada 10 tip insan var. İkili bilen ve bilmeyenler.

Ayrıca bazen listelerin 0 endeksli olduğu gerçeği üzerine bir oyun olabilir. $ var = array ('İlk', 'İkinci', 'Üçüncü'); Ve bu listeye şu şekilde erişebilirsiniz: $ var [0] = 'İlk' $ var [1] = 'İkinci' $ var [2] = 'Üçüncü'

Böylece değişmez dizi dizini 2 "Üçüncü" dizine işaret ediyor.


... ve sıfırda indekslemeye başlayanlar

2

Bu zaten başka bir deyişle açıklanmıştır, ancak olması gerektiği kadar net değildir. Bu sadece iki yolu da deneyeceğiniz anlamına gelir, hataları olur ve sonunda hatalarınızı giderir ve hatasız bir program yaparsınız. Başka bir fiyat teklifi ile karşılaştırın:

Bir programda hataların oluşmasının tek yolu, orada yazar tarafından konulmaktır. Başka hiçbir mekanizma bilinmemektedir. Programlar, diğer buggy programları ile birlikte oturup hataları elde edemezler. - Harlan Mills

(Alternatif olarak, bunu Pierre’in söylediği gibi okuyabilirsiniz (ki bu bir gerginliktir). (Etki alanında olmayan üçüncü yol işe yarıyor.) Dediğim gibi, bu bir gerginlik, ama doğru.


1

Bu, mazeretlerimde babamın bana söylediği aynı alıntı. Diyor ki: "Bir hikayenin 3 tarafı var. Onların tarafı, Sizin tarafınız ve doğru / doğru / doğru taraf".

Bunu geliştirme bağlamına sokarak (ve prof tarafından yazılım testçisi olarak), şunu söyleyebilirim ki, “Kodlamanın 3 tarafı var.” Kodlama, Kodları ve Refactored kodu. "

Bunun nedeni, programcıların / geliştiricilerin, ürün çok stabil hale geldikten sonra yeniden karar verme eğiliminde olmalarıdır, ancak çoğu zaman, yeniden tanıdığınız kişi, sizin ve dostumun bu kadar iyi yapmadığı bir şeyi geliştirmek için yapılır.

Bu yardımcı olur umarım.


1

Teknik olarak konuşursak, hatasız, önemsiz bir program yazabileceğinizi düşünüyorum, ancak Halting Sorunu nedeniyle hatasız olduğunu ispatlamak imkansız. Öyleyse, aksi takdirde kanıtlanması imkansız olduğundan tüm programların hataları olduğu varsayımı altında çalışılmalıdır.

http://en.wikipedia.org/wiki/Halting_problem

Güncelleme: Belirli bir algoritmanın doğru cevapları getireceğini kanıtlayabilirsiniz, ancak bu tamamen doğru olduğunu kanıtlamakla aynı şey değildir. http://en.wikipedia.org/wiki/Correctness_(computer_science )

Ancak, benim açımdan alıntı, bir programın her zaman bir hata olduğunu varsayması gerektiği ve bunun neden böyle olduğunu açıklamaya çalışmak olduğu gerçeğinden bahsediyordu. http://en.wikipedia.org/wiki/Software_bug#Bug_management


1
Tony Morris'in dediği gibi, belirli bir programın doğru olduğunu kanıtlamak mümkündür . Genel olarak doğru olan herhangi bir programın doğru olduğunu ispatlayabilecek bir program yazmak mümkün değildir .
Max Strini

-1

Ek bir kavrayış olarak, "iki yol" Tony Hoare tarafından bu alıntıya referans olabilir :

Bir yazılım tasarımı yapmanın iki yolu vardır: Bir yol, o kadar basit, açık bir şekilde hiçbir eksiklik olmayacak şekilde basitleştirmektir, diğer yol ise, belirgin bir eksikliğin olmadığı kadar karmaşık hale getirmektir. İlk yöntem çok daha zor. Aynı beceri, bağlılık, içgörü ve hatta doğanın karmaşık fenomenlerinin altında yatan basit fiziksel yasaların keşfi ile ilham almasını talep eder.

Biraz meditasyon yapın ve aynı şeyi söylediğini göreceksiniz: yazılım parçanız önemsiz değilse, hataları vardır (ancak yeterince karmaşık hale getirirler ve belirgin hatalar olmaz).


bu sorulan soruyu cevaplamıyor
gnat

@gnat Nasıl olduğunu göremiyorum - işte ikinci paragrafta. Belki de ifadeler açık değildi, ancak "aynı şeyi söyleyerek" derken, "Alan Perlis ile aynı şeyi" demek istedim. Diğer bir deyişle, Perlis'in teklifi muhtemelen Hoare'nin komik bir parodisi.
Doval,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.