All'inizio della mia carriera di programmatore ero innamorato del puntatore che girava, codice snello, che faceva tutto con il minor numero di astrazioni possibili e così via. Il codice era molto simile a C, direi vicino al metal e intelligente.
Il tempo è passato, ho molta più esperienza e sto notando che il mio atteggiamento nei confronti del codice è cambiato.
E con il cambiamento, voglio dire, non voglio più preoccuparmi delle cose di tutti i giorni, a meno che non sia super facile da fare.
Se esiste una concatenazione di stringhe, non sceglierò deliberatamente i puntatori grezzi. Se ho bisogno di concatenare cose, potrei aggiungere una riserva di congettura rapida per un container STL, ma non voglio preoccuparmi di buffer preallocati, C come API, cache, evitare di colpire il disco o cestinare. So che realloc potrebbe accadere di tanto in tanto, compresi tutti i blocchi dell'heap, la copia extra e così via, ma non mi preoccupo più.
Forse, è perché ho trascorso un po 'di tempo all'inizio della mia carriera in cui ho pensato a schemi puliti e belli con thread di lavoro che elaborano una grande quantità di dati banali, solo per scoprire in seguito che l'intero non ottimizzato realloc + copy + realloc + copy + realloc + copy + 5 strati di wrapper non si registrano nemmeno nel profiler.
Forse è perché ho visto come i compilatori a volte fanno magie.
Tuttavia, cose così banali si sommano. Quando tutta la tua base di codice utilizza costrutti di ordine superiore, è probabile che ci saranno alcuni realloc ovunque, o colpi di disco freddo, che possono causare una percezione generale di un'applicazione lenta.
Ordinamento di WTL vs MFC. O come sai immediatamente che l'applicazione è scritta in Java quando la lanci.
Ma è davvero? Esiste un confronto tra software che utilizza solo codice molto snello e intelligente rispetto a software che utilizza contenitori generici dappertutto?
Sentiresti mai la differenza se l'allocazione delle stringhe nel programma usasse prerequisiti e mosse intelligenti o pigramente chiamando string.append in ogni posto dove c'è bisogno di tale funzionalità?
Cerchi di implementare soluzioni di mitigazione per cose così semplici e ben note che sono economiche da eseguire comunque?
Il software può trasformarsi in bloatware solo perché non viene applicata ulteriore cautela su ogni riga di codice?