Douglas McIlroy hakkındaki Wikipedia makalesini okuyordum ve bahseden bir alıntı buldum.
“Programlamanın gerçek kahramanı negatif kod yazan kişidir.”
Bu ne anlama geliyor?
Douglas McIlroy hakkındaki Wikipedia makalesini okuyordum ve bahseden bir alıntı buldum.
“Programlamanın gerçek kahramanı negatif kod yazan kişidir.”
Bu ne anlama geliyor?
Yanıtlar:
Fazlalıkları kaldırarak veya daha özlü yapılar kullanarak kod satırlarını azaltmak anlamına gelir.
Örneğin , orijinal Apple Lisa geliştirici ekibindeki bu ünlü fıkralara bakınız :
Lisa ekibi 1982'de yazılımlarını sonlandırmaya zorlandığında, proje yöneticileri programcıların yazdıkları kod satırı hakkında haftalık raporlar göndermelerini talep etmeye başladı. Bill Atkinson bunun aptalca olduğunu düşündü. QuickDraw'ın bölge hesaplama rutinlerini altı kat daha hızlı ve 2000 satır daha kısa olacak şekilde yeniden yazdığı hafta için forma "-2000" koydu. Birkaç hafta sonra yöneticiler formu doldurmasını istemekten vazgeçti ve memnuniyetle yerine getirdi.
Programcı verimliliğini ölçmek için kod satırlarına göre bir Bill Gates teklifi var.
LOC metrikinin aşırı uzun sargılı dillerin kullanılmasını teşvik ettiğini ve kotayı karşılamak için tekerleği yeniden icat etmeyi kastettiğini eklemek isterim.
Lisedeyken - ve evet, 70'lerde bilgisayar kullanıyorduk, ama taş bıçak kullanarak onları hayvan derilerinden çıkarmak zorunda kaldık - matematik öğretmenlerinden biri bir programlama yarışması düzenledi. Kurallar, kazanan programın doğru çıktıyı üreten program olacağını ve zamanın en az kod satırına sahip olduğunu gösteriyordu. Yani, eğer programınız 100 satır kod aldıysa ve 5 saniye koştuysa, puanınız 500'dü. Eğer bir başkası 90 satır kod yazıp 6 saniye koştuysa, skoru 540'dı. Düşük puan, golf gibi kazanır.
Hem özlülük hem de performansı ödüllendiren parlak bir puanlama sistemi olarak beni etkiledi.
Ancak teknik olarak kazanan kriterleri karşılayan giriş diskalifiye edildi. Sorun, 100'den küçük tüm asal sayıların bir listesini yazdırmaktı. Diskalifiye edilen giriş, bunun gibi bir şeydi (öğrencilerin çoğu o zaman BASIC kullanıyordu):
100 print "2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61,"
110 print "67, 71, 73, 79, 83, 87, 89, 91, 97"
Bu girişi yazan öğrenci, sadece kısa ve çok etkili olduğunu değil, aynı zamanda algoritmayı, programın oldukça sürdürülebilir hale getirecek şekilde en az programlama bilgisine sahip olan herkes için açık olması gerektiğini belirtti.
Yanak dili. Ortalama kodlanmış satır başına N $ tutarsa, "negatif satırları" kodlamak kesinlikle kazanır.
Bu, pratik öneri olarak, işi yapan küçük kodun, aynı şeyi yapan diğer tüm kodların eşit olması nedeniyle çok daha iyi olduğu anlamına gelir.
Aynı programı daha az kodla yazmak herkes için bir amaçtır.
Bir program kod için 200 LOC aldıysa ve 150'de yazsam, -50 LOC yazdım. Bu yüzden negatif kod yazdım.
Thilo'nun cevabı muhtemelen tarihsel olarak en doğrudur, ancak "negatif kod" metaforu performans ve bellek kullanımını da içerebilir - aslında ihtiyaç duyulana kadar bir şeyin yürütülmesini veya tahsis edilmesini erteleme çabalarını ödüllendirir.
Bu “erteleme”, “hiçbir şey yapmamak her zaman bir şey yapmaktan daha hızlıdır”, “En hızlı kod hiçbir zaman yürütmeyen koddur” ve “Yeterince uzun süre koyabiliyorsanız, bunu asla yapmak zorunda kalmayabilirsiniz "(gerçekten gerekli olana kadar pahalı işlemlerin ertelenmesi anlamına gelir)
Olumsuz kodu gerçekleştirmenin bir tekniği, ilk varsayımlara ve sorunun tanımlarına meydan okumaktır. Sorun / girdi alanını "yapışkan konu # 3" kategorik olarak imkansız olacak şekilde yeniden tanımlayabiliyorsanız, yapışkan sayı # 3 ile ilgili zaman veya kod harcamak zorunda kalmazsınız. Tasarımı optimize ederek kodu sildiniz.