La prospettiva che hai può essere distorta dall'esperienza personale. Questa è una pendenza scivolosa di fatti che sono individualmente corretti, ma l'inferenza che ne risulta non lo è, anche se a prima vista sembra corretta.
- I frame hanno una portata maggiore rispetto ai piccoli progetti.
- Le cattive pratiche sono significativamente più difficili da affrontare in basi di codice più grandi.
- La costruzione di un framework (in media) richiede uno sviluppatore più abile rispetto alla costruzione di un piccolo progetto.
- Gli sviluppatori migliori seguono di più le buone pratiche (SOLID).
- Di conseguenza, i framework hanno un bisogno maggiore di buone pratiche e tendono a essere creati da sviluppatori che hanno una maggiore esperienza con le buone pratiche.
Ciò significa che quando interagisci con framework e librerie più piccole, il codice di buone pratiche con cui interagirai sarà più comunemente trovato nei framework più grandi.
Questo errore è molto comune, ad es ogni medico con cui sono stato curato era arrogante. Pertanto, concludo che tutti i medici sono arroganti. Questi errori soffrono sempre facendo un'inferenza generale basata su esperienze personali.
Nel tuo caso, è possibile che tu abbia sperimentato prevalentemente buone pratiche in framework più grandi e non in librerie più piccole. La tua osservazione personale non è sbagliata, ma lo è una prova aneddotica e non universalmente applicabile.
2 modalità di programmazione: creare più o meno esattamente ciò che viene richiesto tramite requisiti e KISS (programmazione tipica) o creare logiche, servizi, ecc. Molto generici e riutilizzabili che offrano la flessibilità di cui altri sviluppatori potrebbero aver bisogno (programmazione quadro)
Lo stai confermando in qualche modo qui. Pensa a cos'è un framework. Non è un'applicazione. È un "modello" generalizzato che gli altri possono utilizzare per realizzare ogni tipo di applicazione. Logicamente, ciò significa che un framework è costruito in una logica molto più astratta per essere utilizzabile da tutti.
I costruttori di framework non sono in grado di prendere scorciatoie, perché non sanno nemmeno quali sono i requisiti delle applicazioni successive. Costruire un framework li incentiva intrinsecamente a rendere il loro codice utilizzabile per gli altri.
I costruttori di applicazioni, tuttavia, hanno la capacità di scendere a compromessi in termini di efficienza logica perché sono focalizzati sulla consegna di un prodotto. Il loro obiettivo principale non è il funzionamento del codice ma piuttosto l'esperienza dell'utente.
Per un framework, l'utente finale è un altro sviluppatore, che interagirà con il tuo codice. La qualità del codice è importante per l'utente finale.
Per un'applicazione, l'utente finale è un non sviluppatore, che non interagirà con il codice. La qualità del tuo codice non ha importanza per loro.
Questo è esattamente il motivo per cui gli architetti di un team di sviluppo spesso agiscono come esecutori di buone pratiche. Sono a un passo dalla consegna del prodotto, il che significa che tendono a guardare il codice in modo obiettivo, piuttosto che concentrarsi sulla consegna dell'applicazione stessa.
Se aggiungi questi punti di ingresso di astrazione, stai davvero soddisfacendo i requisiti degli utenti o stai creando un framework in aggiunta al tuo framework esistente e stack tecnologico per rendere più facili le aggiunte future? In quale caso stai servendo gli interessi del cliente o dello sviluppatore?
Questo è un punto interessante ed è (secondo la mia esperienza) il motivo principale per cui le persone cercano ancora di giustificare l'evitamento delle buone pratiche.
Riassumendo i seguenti punti: Saltare le buone pratiche può essere giustificato solo se i tuoi requisiti (come attualmente conosciuti) sono immutabili e non ci saranno mai cambiamenti / aggiunte alla base di codice. Avviso spoiler: raramente è così.
Ad esempio, quando scrivo un'applicazione console di 5 minuti per elaborare un determinato file, non utilizzo le buone pratiche. Perché oggi userò l'applicazione e non sarà necessario aggiornarla in futuro (sarebbe più semplice scrivere un'applicazione diversa se ne avessi bisogno di nuovo).
Supponiamo che tu possa compilare debolmente un'applicazione in 4 settimane e puoi costruirla correttamente in 6 settimane. A prima vista, costruire debolmente sembra meglio. Il cliente ottiene la sua applicazione più rapidamente e l'azienda deve dedicare meno tempo ai salari degli sviluppatori. Vinci / vinci, vero?
Tuttavia, questa è una decisione presa senza pensare al futuro. A causa della qualità della base di codice, per apportare una modifica sostanziale a quella costruita in modo scadente ci vorranno 2 settimane, mentre per apportare le stesse modifiche a quella costruita correttamente richiede 1 settimana. Potrebbero esserci molti di questi cambiamenti in arrivo in futuro.
Inoltre, vi è la tendenza per le modifiche a richiedere inaspettatamente più lavoro di quanto si pensasse inizialmente in codebase costruite in modo scadente, quindi probabilmente spingendo il tempo di sviluppo a tre settimane anziché due.
E poi c'è anche la tendenza a perdere tempo a caccia di bug. Questo è spesso il caso di progetti in cui la registrazione è stata ignorata a causa di vincoli di tempo o di totale riluttanza a implementarla perché si lavora distrattamente supponendo che il prodotto finale funzionerà come previsto.
Non è nemmeno necessario che sia un aggiornamento importante. Nel mio attuale datore di lavoro, ho visto diversi progetti realizzati in modo rapido e sporco e quando il più piccolo bug / modifica doveva essere fatto a causa di una comunicazione errata nei requisiti, che portava a una reazione a catena della necessità di refactoring modulo dopo modulo . Alcuni di questi progetti finirono per crollare (e lasciare dietro di sé un caos non mantenibile) prima ancora di rilasciare la loro prima versione.
Le decisioni di scelta rapida (programmazione rapida e sporca) sono utili solo se si può garantire in modo definitivo che i requisiti sono esattamente corretti e non dovranno mai cambiare. Nella mia esperienza, non ho mai incontrato un progetto in cui questo è vero.
Investire il tempo extra in buone pratiche è investire nel futuro. I futuri bug e modifiche saranno molto più facili quando la base di codice esistente sarà basata su buone pratiche. Pagherà già i dividendi dopo che sono state apportate solo due o tre modifiche.