Kısaca: Bağlıdır
Detaylarda
Temizlenmiş, parlak şeylere ihtiyacın olacak mı?
Burada temkinli olması gereken şeyler var ve gerçek olan, ölçülebilir kazanç ile kişisel tercihiniz ve olması gereken kodlara dokunmamanın olası kötü alışkanlığı arasındaki sınırı belirlemelisiniz.
Daha spesifik olarak, bunu bilmek:
Bu bir anti-patern ve yerleşik sorunlara sahip:
- o daha genişletilebilir olabilir , ama kolay olmayabilir , uzatmak
- o anlamak kolay olmayabilir ,
- son, ama kesinlikle en az burada değil: tüm kodu yavaşlatabilir.
Bazıları KISS ilkesinden referans olarak da bahsedebilir , ancak burada karşı sezgiseldir: en iyi yol basit yol mu yoksa temiz tasarım yol mu? Aşağıdaki geri kalanında açıklandığı gibi cevap mutlaka mutlak değildir.
YAGNI prensibi diğer sorunu tamamen dik değil, ama kendinize soru sormak için yardımcı olur: Eğer ihtiyacımız olacak?
Daha karmaşık mimari, sizin için daha sürdürülebilir olma görünümü vermenin yanı sıra gerçekten de bir fayda sağlıyor mu?
Bunu büyük bir postere yazın ve ekranınızın yanına veya iş yerindeki mutfak alanına veya toplantı salonuna asın. Elbette, kendini tekrarlamaya değecek birçok başka mantra var, ancak “bakım çalışması” yapmaya çalıştığınızda ve “iyileştirme” dürtüsünü hissettiğinizde bu özellikle önemlidir.
Anlaşmayı denemek için okuduğumuz gibi, kodu "geliştirmek" istemek, hatta bilinçsizce bile dokunmak doğaldır. İyi bir şey, bu bizim fikrimiz olduğu ve iç dünyaları daha derinlemesine anlamaya çalıştığımız anlamına geldiği için, aynı zamanda beceri seviyemize, bilgimize bağlı (neyin daha iyi olduğuna veya neyin daha iyi olduğuna nasıl karar veriyorsunuz? ...) ve yazılımı bildiğimizi düşündüğümüz her türlü varsayımı ...:
- aslında,
- aslında yapması gereken
- sonunda yapmanız gerekecek
- ve ne kadar iyi yapar.
Gerçekten optimize edilmesi gerekiyor mu?
Bütün bunlar, neden her şeyden önce "optimize edildi" dedi? Erken optimizasyonun tüm kötülüklerin kökü olduğunu söylerler ve belgelenmemiş ve görünüşte optimize edilmiş bir kod görürseniz, genellikle bunun muhtemelen Optimizasyon Kurallarına uymadığını ve muhtemelen optimizasyon çabalarına ihtiyaç duymadığını ve bunun sadece her zamanki geliştiricinin korsanı devreye giriyor. Yine, belki de şu an seninki konuşuyor.
Varsa hangi sınırlar içinde kabul edilebilir hale gelir? Buna bir ihtiyaç varsa, bu sınır vardır ve işleri iyileştirmek için yer ya da bırakmaya karar vermeniz için zorlu bir yol sunar.
Ayrıca görünmez özelliklere dikkat edin. Muhtemelen, bu kodun "genişletilebilir" sürümünüz, çalışma zamanında da daha fazla bellek tüketir ve çalıştırılabilir için daha büyük bir statik bellek alanı sağlar. Parlak OO özellikleri bunun gibi sezgisel olmayan maliyetlerle gelir ve programınız ve üzerinde çalışması gereken çevre için önemli olabilir.
Ölç, Ölç, Ölç
Google şimdi millet gibi, her şey verilerle ilgili! Verileri ile yedekleyebilirsiniz, o zaman gerekli.
Gelişiminde harcanan her 1 $ için takip edecek bu o kadar eski masalı var en azından test $ 1 ve en az destek $ 1 (ama gerçekten, çok daha fazla var).
Değişim bir çok şeyi etkiler:
- yeni bir yapı oluşturmanız gerekebilir;
- yeni birim testleri yazmalısınız (kesinlikle yok ise ve daha fazla genişletilebilir mimariniz muhtemelen hata için daha fazla yüzeye sahip olduğunuzdan daha fazla alana yer açacaktır);
- yeni performans testleri yazmalısınız (bunun gelecekte sabit kalmasını sağlamak ve tıkanıklıkların nerede olduğunu görmek için) ve bunların yapılması zor ;
- belgelendirmeniz gerekir (ve daha fazla genişletilebilir, ayrıntılar için daha fazla alan demektir);
- Siz (veya bir başkasının) QA'da kapsamlı şekilde yeniden test etmeniz gerekecek;
- kod hiç bir zaman hatasız değildir ve onu desteklemeniz gerekir.
Bu nedenle , burada ölçmeniz gereken yalnızca donanım kaynakları tüketimi (yürütme hızı veya bellek alanı) değil, aynı zamanda ekip kaynakları tüketimidir. Her ikisinin de bir hedef amaç tanımlaması, ölçülmesi, hesaba katılması ve kalkınmaya dayalı olarak uyarlanması öngörülmelidir.
Ve sizin yöneticiniz, bu mevcut gelişim planına uymak anlamına gelir, bu yüzden bunun hakkında iletişim kurun ve öfkeli kovboy / denizaltı / kara ops kodlamasına girmeyin.
Genel olarak...
Evet ama...
Beni yanlış anlama, genel olarak önerdiğin şeyi yapmanın lehine olurum ve bunu sıklıkla savunurum. Ancak uzun vadeli maliyetlerin farkında olmanız gerekir.
Mükemmel bir dünyada doğru çözüm:
- bilgisayar donanımı zaman içinde iyileşir
- derleyiciler ve çalışma zamanı platformları zaman içinde daha iyi hale gelir,
- mükemmel, temiz, bakımı kolay ve okunabilir kodlar elde edersiniz.
Uygulamada:
daha kötü hale getirebilirsin
Buna bakmak için daha fazla göz küresi gerekir ve ne kadar karmaşıklaşırsanız, ihtiyaç duyduğunuz gözbebekleri o kadar fazla olur.
geleceği tahmin edemezsin
İhtiyacınız olursa kesin olarak bilemezsiniz ve ihtiyaç duyacağınız "uzantılar" eski formda uygulamak için daha kolay ve daha hızlı olurdu ve kendilerinin süper optimize edilmeleri gerekse bile .
yönetimin bakış açısından, doğrudan kazanç elde etmek için büyük bir maliyeti temsil eder.
Sürecin Bir Parçası Yap
Burada bunun oldukça küçük bir değişiklik olduğunu ve aklınızda bazı özel sorunların olduğunu belirtiyorsunuz. Bu durumda genellikle sorun yok derdim, ama çoğumuz aynı zamanda küçük programların kişisel hikayeleri var, neredeyse cerrahi grev düzenlemeleri, sonunda bakım kabusu ve neredeyse kaçırılan ya da patlamış son teslim tarihleri, çünkü Joe Programmer görmedi Kodun arkasındaki nedenlerden ve olmamalıdır bir şeye dokundu.
Bu tür kararları ele almak için bir süreciniz varsa, bunlardan kişisel kenarı atarsınız:
- Bir şeyleri doğru test ederseniz, eğer kırılırsa daha hızlı anlarsınız,
- Onları ölçerseniz, iyileşip iyileşmediklerini bileceksiniz,
- Eğer gözden geçirirseniz, insanları atıp atmadığını bileceksiniz.
Test Kapsamı, Profil Oluşturma ve Veri Toplama Zor
Ancak, elbette, test kodunuz ve metrikleriniz, gerçek kodunuz için kaçınmaya çalıştığınız sorunlardan muzdarip olabilir: doğru şeyleri test ediyor musunuz ve gelecek için doğru şey mi? bir şeyler?
Yine de, genel olarak, ne kadar çok test ederseniz (belirli bir sınıra kadar) ve ölçün, o kadar çok veri toplar ve güvende olursunuz. Kötü benzetme zamanı: araba sürmek gibi düşünün (ya da genel olarak hayat): araba sizi kırarsa ya da birileri bugün kendi arabalarıyla arabaya binerek kendilerini öldürmeye karar verirse, dünyanın en iyi sürücüsü olabilirsiniz. yetenekler yeterli olmayabilir. Hem sizi vurabilecek çevresel şeyler hem de insan hataları önemli.
Kod İncelemeleri Geliştirme Ekibinin Koridor Testleri
Ve bence son kısım anahtardır: kod incelemeleri yapın. Yalnız yaparsan, iyileştirmelerinin değerini bilemezsin. Kod incelemeleri bizim "koridor testi" dir: hem hataları saptamak hem de aşırı mühendislik ve diğer anti-kalıpları tespit etmek ve kodun ekibinizin yeteneklerine uygun olmasını sağlamak için Raymond'un Linus Yasası versiyonunu takip edin . Eğer başka hiç kimsenin anlayamadığı ve bakımını yapamayacağınız "en iyi" kodlara sahip olmanın hiçbir anlamı yoktur ve bu hem şifreli optimizasyonlar hem de 6 katlı derin mimari tasarımlar için geçerlidir.
Kelimeleri kapatırken, unutmayın:
Herkes hata ayıklamanın ilk başta bir program yazmaktan iki kat daha zor olduğunu bilir. Peki, yazarken olabildiğince zekisin, nasıl hata ayıklayacaksın? - Brian Kernighan