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?
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?
Yanıtlar:
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.
Üçüncü bir yol yok.
Hatasız programlar yazmak için hiçbir yolu yoktur
Başka bir alıntı ile cevap vereceğim ...
Tuhaf bir oyun. Kazanan tek hamle oynamak değil.
;-)
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.
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 .
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.
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.
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.
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
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).