Knuth'un orijinal alıntısının, goto
sıcak noktaları ortadan kaldırmanın bir yolu olarak dikkatle seçilmiş ve ölçülmüş alanlarda kullanımını teşvik eden bir makaleden geldiğini belirtmek gerekir . Sözü, goto
bu kritik döngüleri hızlandırmak için kullanma gerekçesini haklı çıkarmak için eklediği bir uyarı oldu .
[...] yine, eğer, örneğin, n'nin ortalama değeri yaklaşık 20 ise ve arama rutini programda yaklaşık bir milyon ya da daha çok kez gerçekleştirilmişse, bu, genel çalışma hızında dikkate değer bir tasarruftur. Bu tür döngü optimizasyonlarını [kullanarak gotos
] öğrenmek zor değildir ve daha önce de söylediğim gibi, bunlar bir programın sadece küçük bir bölümünde uygundur, ancak yine de çoğu zaman önemli tasarruflar sağlarlar. [...]
Ve devam ediyor:
Günümüz yazılım mühendislerinin çoğunun paylaştığı geleneksel anlayış, küçüklerin verimliliğini göz ardı etmeyi gerektirir; ancak bunun, "optimize edilmiş" programlarında hata ayıklayamayan veya bakımını yapamayan aptal programcılar tarafından uygulandığını gördükleri suistimallere aşırı tepki olduğuna inanıyorum. Yerleşik mühendislik disiplinlerinde, kolayca elde edilen% 12'lik bir iyileşme asla marjinal olarak kabul edilmez; ve aynı bakış açısının yazılım mühendisliğinde de geçerli olması gerektiğine inanıyorum. Elbette, tek seferlik bir işte bu tür optimizasyonları yapmaya zahmet etmem, ancak söz konusu kaliteli programlar hazırlamak olduğunda, kendimi bu tür verimlilikleri reddeden araçlarla sınırlamak istemiyorum [yani, goto
bu bağlamdaki ifadeler].
Tırnak işaretlerinde nasıl "optimize edilmiş" kullandığını aklınızda bulundurun (yazılım muhtemelen gerçekten verimli değildir). Ayrıca, sadece bu "kuruş ve kiloluk aptal" programcıları nasıl eleştirmediğini, aynı zamanda küçük verimsizlikleri her zaman görmezden gelmenizi önererek tepki veren insanları da not edin. Son olarak, sık alıntılanan kısma:
Hiç şüphe yok ki, verimlilik derecesi kötüye kullanıma yol açar. Programcılar, programlarının kritik olmayan bölümlerinin hızı hakkında düşünmek veya endişelenmek için çok fazla zaman harcarlar ve bu verimlilik girişimleri, hata ayıklama ve bakım düşünüldüğünde aslında güçlü bir olumsuz etkiye sahiptir. Zamanın% 97'sinde küçük verimlilikleri unutmalıyız; erken optimizasyon, tüm kötülüklerin köküdür.
... ve sonra profil oluşturma araçlarının önemi hakkında biraz daha:
Ölçme araçlarını kullanan programcıların evrensel deneyimleri sezgisel tahminlerinin başarısız olması olduğundan, bir programın hangi bölümlerinin gerçekten kritik olduğuna dair ön yargıda bulunmak çoğu zaman bir hatadır. Yedi yıl boyunca bu tür araçlarla çalıştıktan sonra, bundan sonra yazılan tüm derleyicilerin tüm programcılara programlarının hangi bölümlerinin en çok maliyete mal olduğunu belirten geri bildirim sağlayacak şekilde tasarlanması gerektiğine ikna oldum; gerçekten de, özellikle kapatılmadığı sürece bu geri bildirim otomatik olarak sağlanmalıdır.
İnsanlar, onun alıntısını her yerde kötüye kullandılar, çoğu zaman mikro optimizasyonların tüm makalesi mikro optimizasyonları savunurken erken olduğunu öne sürdüler! Her zaman küçükteki verimlilikleri göz ardı ederek, bu "geleneksel bilgeliği" yankılayan eleştirdiği insan gruplarından biri, başlangıçta kısmen, her tür mikro optimizasyonun cesaretini kıran bu tür tiplere yönelik olan sözünü genellikle kötüye kullanıyor. .
Yine de, profilciyi tutan deneyimli bir el tarafından kullanıldığında , uygun şekilde uygulanan mikro optimizasyonlar lehine bir alıntıydı. Bugünün analojik eşdeğeri, "İnsanlar yazılımlarını optimize etmek için gözü kapalı saplamalar yapmamalı, ancak özel bellek ayırıcılar, referansın yerelliğini iyileştirmek için kilit alanlara uygulandıklarında büyük bir fark yaratabilir" veya " El yazısı SIMD kodu kullanarak SoA temsilcisinin bakımı gerçekten zordur ve onu her yerde kullanmamalısınız, ancak deneyimli ve rehberli bir el tarafından uygun şekilde uygulandığında belleği çok daha hızlı tüketebilir. "
Knuth'un yukarıda tanıtıldığı gibi dikkatlice uygulanan mikro optimizasyonları tanıtmaya çalıştığınız her seferinde, acemileri çok heyecanlanmaktan ve tüm yazılımlarını kullanmak üzere yeniden yazmak gibi optimizasyonda körü körüne bıçaklamaktan caydırmak için bir sorumluluk reddi beyanı atmak iyidir goto
. Kısmen yaptığı şey buydu. Onun sözü, büyük bir feragatnamenin parçasıydı, tıpkı bir motosikletin alevli bir ateş çukurunun üzerinden atlaması gibi, amatörlerin bunu evde denememesi gerektiği ve aynı zamanda uygun bilgi ve ekipman olmadan deneyenleri ve yaralananları eleştiren bir feragatname ekleyebilir. .
"Erken optimizasyonlar" olarak nitelendirdiği şey, ne yaptıklarını etkili bir şekilde bilmeyen insanlar tarafından uygulanan optimizasyonlardı: Optimizasyona gerçekten ihtiyaç olup olmadığını bilmeyen, uygun araçlarla ölçüm yapmayan, belki de derleyicileri veya bilgisayar mimarileri ve hepsinden önemlisi, "kuruş ve pound aptalca" idi; daha uzun süre etkili bir şekilde hata ayıklama ve bakım.
Eğer "pennywise-and-pound-aptalca" kategorisine uymuyorsanız, goto
kritik bir döngüyü hızlandırmak için a kullanıyor olsanız bile Knuth standartlarına göre zamanından önce optimizasyon yapmıyorsunuzdur (bu olası değildir bugünün optimize edicilerine karşı çok yardımcı olmak için, ancak olsaydı ve gerçekten kritik bir alanda, o zaman erken optimizasyon yapmazdınız). Gerçekten ihtiyaç duyulan alanlarda yaptığınız her şeyi gerçekten uyguluyorsanız ve bundan gerçekten faydalanıyorlarsa, Knuth'un gözünde harikasınız demektir.