Recentemente ho letto il post del blog Three Big Lies e sto avendo un momento difficile che giustifica la seconda bugia, che è citato qui:
(LIE #2) CODE SHOULD BE DESIGNED AROUND A MODEL OF THE WORLD
There is no value in code being some kind of model or map of an imaginary world. I don't know why this one is so compelling for some programmers, but it is extremely popular. If there's a rocket in the game, rest assured that there is a "Rocket" class (Assuming the code is C++) which contains data for exactly one rocket and does rockety stuff. With no regard at all for what data tranformation is really being done, or for the layout of the data. Or for that matter, without the basic understanding that where there's one thing, there's probably more than one.
Though there are a lot of performance penalties for this kind of design, the most significant one is that it doesn't scale. At all. One hundred rockets costs one hundred times as much as one rocket. And it's extremely likely it costs even more than that! Even to a non-programmer, that shouldn't make any sense. Economy of scale. If you have more of something, it should get cheaper, not more expensive. And the way to do that is to design the data properly and group things by similar transformations.
Ecco i miei problemi con questa menzogna in particolare.
-
Il valore del codice è rappresentato da un modello / mappa di un mondo immaginario mentre la modellazione del mondo immaginario aiuta (almeno io, personalmente) a visualizzare e organizzare il codice.
-
Avere una classe "Rocket" è, per me, una scelta perfettamente valida per una classe. Forse i "Rocket" potrebbero essere suddivisi in tipi di Rockets come AGM-114 Hellfire, ecc. Che potrebbero contenere forza di carico utile, velocità massima, raggio di virata massimo, tipo di puntamento e così via, ma comunque ogni razzo dovrebbe avere una posizione e una velocità.
-
Naturalmente avere 100 missili costa più di 1 razzo. Se ci sono 100 missili sullo schermo ci devono essere 100 calcoli diversi per aggiornare la loro posizione. Il secondo paragrafo suona come se affermasse che se ci sono 100 missili, dovrebbe costare meno di 100 calcoli per aggiornare lo stato?
Il mio problema qui è che l'autore presenta un modello di programmazione "imperfetto" ma non presenta un modo per "correggerlo". Forse sto inciampando sull'analogia della classe Rocket, ma mi piacerebbe davvero capire il ragionamento dietro questa bugia. Qual è l'alternativa?