Ottimizzazione, è un termine che va di moda negli ultimi anni, soprattutto nell’ambito videogiochi, ebbene ottimizzare un software, specialmente un programma di grafica o un videogioco può avere risvolti inaspettati.
Questo vale per ogni tipo di programma, da un semplice editor di testo, ai videogiochi, ma sono rilegati soprattutto a programmi di grafica e quest’ultimi proprio per la loro complessità.
Cosa si intende per ottimizzazione?
L’ottimizzazione di un programma si riferisce al processo di miglioramento delle prestazioni e dell’efficienza del prodotto. L’obiettivo dell’ottimizzazione è rendere il software o il videogioco più veloce, reattivo e stabile, consentendo una migliore esperienza utente.
Essa può coinvolgere varie “aree”, il tutto per capire che è un’operazione molto più complessa di quanto credono i più.
Prestazioni
Ottimizzare le prestazioni mira a rendere il software più rapido ed efficiente. Questo può coinvolgere la riduzione dei tempi di caricamento, l’aumento del frame rate nei videogiochi, la minimizzazione dell’utilizzo di risorse come la memoria o la CPU, e l’ottimizzazione degli algoritmi per ridurre i tempi di esecuzione.
Uso delle risorse
L’ottimizzare può essere finalizzato anche a ridurre l’utilizzo di risorse come memoria, spazio su disco o larghezza di banda di rete. Ciò può essere importante per consentire al software di funzionare su dispositivi con risorse limitate, come dispositivi mobili o sistemi più vecchi.
Stabilità
L’ottimizzazione può anche riguardare la riduzione degli errori e dei bug, migliorando la stabilità complessiva del software. Ciò può includere l’individuazione e la correzione di errori di programmazione, la gestione adeguata delle eccezioni e la massimizzazione della robustezza del sistema.
Ti è mai capitato che un programma tipo Maya o Photoshop o Blender vada in crash e si spegna all’improvviso? Ecco.
Ottimizzazione per specifiche piattaforme
Spesso i videogiochi o i software devono essere ottimizzati per funzionare su piattaforme specifiche, come console di gioco o dispositivi mobili. Ciò richiede un’ottimizzazione delle risorse e delle prestazioni per adattarsi alle caratteristiche e alle limitazioni di tali piattaforme.
Ad esempio se un un programma di grafica esiste solo per il Mac sarà ottimizzato solo per quella piattaforma o comunque per i Mac che hanno determinate caratteristiche, idem un videogioco che è esclusiva PlayStation 5, dovrà girare bene esclusivamente lì.
L’ottimizzazione di un software è un processo continuo e può richiedere l’analisi delle metriche di prestazione, l’identificazione dei punti deboli e l’implementazione di miglioramenti iterativi. L’obiettivo finale è offrire agli utenti un’esperienza fluida, priva di ritardi e problemi tecnici, massimizzando al contempo l’efficienza e l’usabilità del prodotto.
Alcune possibili cause
Le cause di mancata ottimizzazione possono essere svariate: queste sono solo alcune, per fare alcuni esempi sull’ottimizzazione userò il linguaggio C come esempio.
Bug
I programmatori devono districarsi tra milioni se non miliardi di righe di codice e può essere arduo fare un debugging e una buona ottimizzazione, un esempio di bug in C su un programma che deve calcolare un’addizione.
int a,b, somma;
printf(“Inserisci primo addendo: “);
scanf(a);
printf(“Inserisci secondo addendo: “);
scanf(b);
somma = a-b;
printf(“il risultato è: “, somma);
In questo caso la variabile “somma” è a – b (a meno b) non a + b (a + b), quindi è un bug, vuoi che sia avvenuto perché il programmatore ha sbagliato, vuoi perché ha capito male, le cause possono essere molteplici.
Fatto sta che è facilissimo sbagliare con la tastiera di conseguenza, immagina che il programmatore non deva risolvere un meno, ma una variabile o anche 10 variabili sbagliate messe chissà dove, questo può causare non solo rallentamenti ma anche i famosi “crash di sistema”; questo vale per un videogioco, vale per un programma di grafica come anche per un sistema operativo come Windows o Linux.
Troppa “pesantezza a livello di memoria”
Userò l’algoritmo precedente per fare un esempio: si può migliorare affinché occupi meno memoria, nel caso abbiamo un computer davvero vecchio che funziona con DOS con soli dei mega di RAM (neanche dei giga), ovvio che devo risparmiare spazio.
Nell’esempio di prima, come potrei alleggerire e dire al programma di consumare meno memoria? Facile: elimino la variabile “somma” e faccio così.
int a,b;
printf(“Inserisci primo addendo: “);
scanf(a);
printf(“Inserisci secondo addendo: “);
scanf(b);
printf(“il risultato è: “, a+b);
Eliminando una variabile ho eseguito di fatto una ottimizzazione: come? Dicendo al PC di utilizzare meno risorse in termini di RAM, processore, etc.
Ora questo è un programma molto semplice fatto in linguaggio C, come sopra moltiplica il tutto per migliaia se non milioni di righe di codicie capirai perché un programma o un videogioco può dare problemi di rallentamento.
Il fatto però è questo: con i sistemi sempre più potenti e sempre più grandi a livello di spazio, gli sviluppatori dicono “ma che vuoi che sia!” e lasciano al caso anche quello che non è utilizzato, peccato però che poi l’utente finale lo percepisca con crash e rallentamenti vari.
Troppi poligoni o poligoni messi male
Questo dell’ottimizzazione riguarda più i programma di grafica e i videogiochi, ma anche programmi che non c’entrano con la grafica in sé e ne fanno largo uso (vedi applicazioni come Earthquake 3D per i terremoti per capirci).
Qui sotto un piccolo esempio in Maya per capire i problemi grafici di ottimizzazione.
Risorse non utilizzate che in qualche modo pesano sul sistema
Quando si riuscì ad hackerare la ROM di Chrono Trigger si scoprirono delle risorse non utilizzate nella versione finale, in particolar modo dei nemici con dei colori che non appaiono nel gioco.
Tuttavia qui si parla di sprite e di risorse che occupavano davvero pochissimo su una cartuccia che appesantiva poco (o per nulla) un sistema.
Immagina un programma come Earthquake 3D prima menzionato che ha lo stesso identico problema, ma con vari modelli della terra con poligoni magari messi in modo sbagliato che non si usano nella versione finale del programma.
Altre cause non note sulla mancata ottimizzazione
Tra le cause elencate potrebbero essercene alcune non note all’utente finale, piccolo esempio, un particolare hardware poco utilizzato che non è stato preso in considerazione dagli sviluppatori e quindi proprio su quello funziona male.
Concludendo
È sempre difficile individuare le cause di una mancata ottimizzazione e il vero problema è che programmi e videogiochi oggiogiorno raramente escono fatti e finiti, di conseguenza gli sviluppatori possono permettersi di prendersela comoda perché tanto risolveranno più avanti.
Il vero problema è che questo va ad impattare la vita lavorativa (o di intrattenimento) di chi deve usufruire del prodotto finale.
Come nell’esempio del linguaggio C che è molto basilare, spesso chi arriva a certi livelli scorda le fondamenta.