10 motivi per cui hai bisogno dell'ottimizzazione del codice
Mentre scriviamo il codice, prendiamo continuamente decisioni e scegliamo tra soluzioni che possono sembrare equivalenti all'inizio. Più tardi di solito si scopre che alcune scelte risultano in un programma più efficiente di altri, quindi sorge spontanea una ricerca per le migliori pratiche di codifica e le tecniche di ottimizzazione, e iniziamo a farlo vedere l'intero processo di sviluppo come un problema di ottimizzazione da risolvere.
Sebbene i problemi di ottimizzazione non siano gli unici con cui gli sviluppatori si occupano regolarmente, ad esempio ci sono anche problemi decisionali e problemi di ricerca, l'ottimizzazione è il compito che comprende le diverse fasi dello sviluppo web, probabilmente il più.
L'ottimizzazione del codice può avvenire su diversi livelli, a seconda di quanto l'ottimizzazione che stiamo eseguendo è vicina al codice macchina. Nello sviluppo web possiamo solo eseguire ottimizzazioni di livello superiore, poiché le ottimizzazioni a livello di Assembly o di runtime non sono un'opzione per noi, ma abbiamo ancora molte opportunità.
Possiamo ottimizzare il nostro codice a livello architettonico con modelli di design intelligenti, a livello di codice sorgente utilizzando le migliori pratiche di codifica e utilizzando strumenti appropriati, e possiamo anche migliorare le prestazioni del nostro team entro il introduzione di guide di stile di codifica nel nostro flusso di lavoro.
Qualunque sia la tecnica che scegliamo di seguire, c'è una regola generale che ogni sforzo di ottimizzazione del codice deve seguire: dobbiamo sempre effettuare l'ottimizzazione in modo tale da non modificare il significato del codice.
I vantaggi dell'ottimizzazione del codice crescono in linea con la crescita del nostro progetto e come anche inizialmente piccoli progetti possono diventare grandi nel tempo, l'acquisizione di solide capacità di ottimizzazione del codice ha quasi sempre risultati misurabili positivi.
1. Base del codice Cleaner
Come un progetto matura, e sempre più sviluppatori iniziano a lavorarci, duplicazioni e sovrapposizioni di solito compaiono prima o poi, e improvvisamente ci rendiamo conto che difficilmente comprendiamo cosa sta succedendo.
Non è una coincidenza che tenere a mente il principio DRY (Do not Repeat Yourself) sia uno dei capisaldi dello sviluppo del software efficace. Una base di codice ben bilanciata e ottimizzata in cui siamo in grado di farlo riutilizzare gli stessi elementi più volte è sempre più elegante e ordinato, e quindi è molto più facile da capire e lavorare con.
2. Maggiore coerenza
La coerenza è come le faccende domestiche, quando è curata in modo appropriato nessuno la nota, ma quando viene trascurata l'intero posto sembra disordinato, e ci ritroviamo nel caos.
Realizzare una consistenza completa è difficile, come la compatibilità con le versioni precedenti può eventualmente migliorare, ma prestando attenzione a utilizzando linee guida coerenti del codice, API compatibili e standard coerenti può sicuramente ridurre il dolore.
Tenere presente la coerenza del codice è particolarmente importante quando abbiamo bisogno di gestire il codice legacy, o in caso di progetti più grandi che coinvolgere molti sviluppatori.
3. Siti più veloci
L'ottimizzazione del codice è simile all'acquisto di un'auto più veloce. Di conseguenza, il nostro codice esegue più rapidamente, e il nostro sito o applicazione consuma meno memoria di prima. Anche se il processo di ottimizzazione potrebbe richiedere ulteriore tempo e denaro, il risultato è a migliore esperienza, non solo per gli sviluppatori ma anche per gli utenti finali.
Il codice più veloce comporta tempi di caricamento della pagina più brevi così, che è un grosso problema in entrambi i mondi di ottimizzazione dei motori di ricerca e di marketing di conversione. La ricerca dice questo “quasi la metà degli utenti web si aspetta che un sito si carichi in 2 secondi o meno e tendono ad abbandonare un sito che non viene caricato entro 3 secondi”, quindi la velocità non è chiaramente un'area che possiamo tranquillamente ignorare.
4. Migliore leggibilità del codice
La leggibilità è un aspetto importante della manutenibilità del codice. Il codice disordinato con formattazione ad hoc è difficile da leggere, quindi difficile da capire, soprattutto per gli sviluppatori che sono nuovi in un progetto.
Possiamo proteggerci da il dolore di occuparsi di codice indecifrabile se applichiamo alcune tecniche di ottimizzazione del codice, come ad esempio:
- utilizzando convenzioni di denominazione coerenti con nomi significativi, come BEM
- formattazione coerente con l'utilizzo logico di indentazione, spazio bianco e spaziatura verticale
- evitare rumori inutili, come commenti ovvi e ovvi
Questo è il motivo per cui i grandi progetti, come WordPress, jQuery e Mootools, hanno chiare guide di stile di programmazione che ogni sviluppatore coinvolto deve seguire.
5. Refactoring più efficiente
Succede spesso nello sviluppo web che ereditiamo il codice da qualcun altro, e capiamo rapidamente che lo è Lungi dall'essere ottimale, se in termini di struttura, prestazioni o manutenibilità. La stessa cosa può accadere con i nostri precedenti progetti che abbiamo scritto quando avevamo meno esperienza nella programmazione.
In altri casi gli obiettivi di un progetto altrimenti eccezionale cambiano nel tempo, e abbiamo bisogno di dare la priorità ad altre cose nell'applicazione di prima.
Parliamo di refactoring quando noi cambiare (ripulire) il codice esistente per ottimizzarlo senza modificare nessuna delle sue funzionalità. Il refactoring deve essere eseguito con molta cura, come se fosse fatto nel modo sbagliato, possiamo facilmente finire con un codice base che è ancora meno ottimale dell'originale.
Fortunatamente abbiamo molte tecniche collaudate sulle nostre mani che possono rendere il refactoring un processo scorrevole.
6. Debug più diretto
Il debug occupa una parte significativa del flusso di lavoro di sviluppo Web e di solito è un compito noioso o addirittura scoraggiante. È abbastanza difficile se dobbiamo eseguire il debug del nostro codice, ma è così molto peggio quando abbiamo bisogno di trovare i bug di qualcun altro, soprattutto se si tratta di qualcosa come un codice spaghetti senza fine che non usa nient'altro che funzioni.
Design intelligente e schemi architettonici, ad esempio usando oggetti e diversi moduli, e linee guida di codifica chiare può facilitare il processo di debug, anche se molto probabilmente non sarà ancora il nostro compito più caro.
7. Miglioramento del flusso di lavoro
Molti progetti di sviluppo Web sono gestiti da team distribuiti, come comunità open source o team remoti. Una delle cose più difficili nella gestione di un tale flusso di lavoro è trovare un modo per rendere la comunicazione sufficientemente efficace abilitare i membri del team a capirsi facilmente, e non dover discutere costantemente delle inadempienze.
Concordato sulle best practice e le guide di stile può colmare il divario tra persone di origini diverse, per non parlare delle solite difficoltà di comunicazione tra team di progettazione e sviluppo nella maggior parte dei progetti web.
L'ottimizzazione del codice è anche ottimizzazione del flusso di lavoro, come se i membri del team parlassero una lingua comune e condividessero gli stessi obiettivi dichiarati, saranno anche in grado di lavorare insieme senza troppi problemi.
8. Manutenzione del codice più facile
Sebbene la costruzione di qualcosa da zero sia più divertente del mantenimento del codice preesistente, a volte è ancora necessario eseguire la manutenzione del codice in corso. Lavorare con i sistemi già esistenti può anche darci nuove idee sull'ottimizzazione del codice, in quanto è un'esperienza diversa rispetto alle prime ottimizzazioni in un nuovo progetto.
Nella manutenzione del software, siamo già in una fase in cui possiamo cogliere reali problemi di prestazioni ed efficienza e lavorare con utenti reali invece di casi d'uso ipotetici.
La manutenzione del codice di solito ottiene scarso rispetto negli ambienti degli sviluppatori, ma può comunque essere un compito gratificante se seguiamo le best practice, come l'utilizzo controllo affidabile delle versioni, gestione delle dipendenze, staging e piattaforme di test, e correttamente prenditi cura della documentazione.
9. Sviluppo di funzionalità più rapido
Innovazione costante è il fulcro di rimanere pertinenti nel nostro campo, come se non avessimo mostrato nulla di nuovo ai nostri utenti in un momento in cui possiamo essere lasciati indietro rapidamente. Estendere un progetto e aggiungerne di nuove è di solito molto più veloce se lavoriamo con una base di codice pulita e ben ottimizzata.
A prescindere dai metodi di ottimizzazione del codice già discussi, lo sviluppo di funzionalità può anche guadagnare slancio se rimaniamo al passo con moderni metodi di gestione del progetto, per esempio se usiamo modelli iterativi del ciclo di vita invece del tradizionale modello a cascata.
10. Debito tecnico più piccolo
Il termine "debito tecnico" è stato coniato da Ward Cunningham, il programmatore che ha anche sviluppato la prima wiki. Confronta le conseguenze delle nostre cattive decisioni di programmazione che si accumulano nel tempo al debito finanziario in cui le persone pagano interessi nel futuro per ottenere rapidamente denaro nel presente.
Queste decisioni non ottimali di solito si manifestano sotto forma di soluzioni rapide, programmazione di copia e incolla, hard coding, programmazione settoriale del carico e altro codifica antipattern e abitudini di lavoro sciatto.
È fondamentalmente impossibile da evitare completamente il debito tecnico, poiché anche le buone decisioni possono essere conseguenze meno desiderate in futuro, ma se ottimizziamo diligentemente il nostro codice, lo saremo sicuramente gravato da un debito tecnico molto più piccolo.