Geçenlerde Three Big Lies blog gönderisini okudum ve burada belirtilen ikinci yalanı haklı çıkarmak için çok zorlanıyorum:
(LIE # 2) DÜNYANIN BİR MODELİ ÜZERİNDE KOD DÜŞÜNMELİDİR
Kodda, hayali bir dünya modelinin ya da modelinin bir değeri yoktur. Bunun neden bazı programcılar için bu kadar zorlayıcı olduğunu bilmiyorum, ama son derece popüler. Oyunda bir roket varsa, tam olarak bir roket için veri içeren ve roketli şeyler yapan bir "Roket" sınıfı (kodun C ++ olduğu varsayımı) olduğundan emin olun. Hangi verilerin değişiminin gerçekten yapılmakta olduğu ya da verilerin düzenlenmesi ile ilgili olarak. Veya bu konuda, temel bir anlayış olmadan, tek bir şeyin olduğu yerde, muhtemelen birden fazla şeyin olduğu anlaşılmaz.
Bu tür bir tasarım için çok fazla performans cezası olsa da, en önemlisi ölçeklendirilmemesidir. Hiç. Yüz roket, bir roketten yüz kat daha pahalıdır. Üstelik bundan daha pahalıya mal olması çok muhtemel! Programcı olmayanlara bile, hiç mantıklı gelmemelidir. Ölçek ekonomisi. Daha fazla bir şeyiniz varsa daha ucuza almalı, daha pahalı olmamalı. Bunu yapmanın yolu da verileri uygun şekilde tasarlamak ve benzer dönüşümlerle gruplandırmaktır.
Özellikle bu yalanla ilgili problemlerim.
Kodda, hayali dünyayı modellemenin yardımcı olduğu (en azından ben, kişisel olarak) kodu görselleştirip organize ettiği için hayali bir dünyanın bir modeli / haritası olmanın değeri vardır.
Bir "Roket" sınıfına sahip olmak, benim için, bir sınıf için mükemmel geçerli bir seçimdir. Belki de "Roketler", yük taşıma kuvveti, maksimum hız, maksimum dönüş yarıçapı, hedefleme tipi ve benzeri şeyleri içeren AGM-114 Cehennem Ateşi gibi roket türlerine ayrılabilir, ancak yine de ateşlenen her roketin bir pozisyonu olması gerekir. ve bir hız.
Tabii ki 100 Roket sahibi olmak 1 Roketten daha fazladır. Ekranda 100 Roket varsa, konumlarını güncellemek için 100 farklı hesaplama yapılmalıdır. İkinci paragraf, 100 Roket varsa, durumu güncellemenin 100 hesaplamadan daha azına mal olması gerektiği iddiasındadır.
Buradaki sorunum yazarın "hatalı" bir programlama modeli sunması ancak onu "düzeltmenin" bir yolunu sunmaması. Belki de Rocket sınıfının analojisini açıyorum, ama bu yalanın arkasındaki mantığı gerçekten anlamak istiyorum. Alternatif nedir?