So che ci sono domande simili a questa e ne ho letto la maggior parte. La maggior parte delle risposte a queste domande stanno parlando degli aspetti "costo-efficacia" e "risparmio di tempo" dei framework, che sono enormi motivi a favore dell'utilizzo dei framework.
Sono uno sviluppatore .NET piuttosto nuovo e sto cercando di imparare cose come WPF, MVVM, progettazione di architetture a strati, iniezione di dipendenze, registrazione, accesso al database, sviluppo basato su test e molte altre tecnologie / tecniche diverse.
La maggior parte delle risorse che trovo riguardo a questi argomenti inizia con un esempio estremamente semplice per "mostrare" perché dovresti usare una determinata tecnologia / tecnica, che onestamente sembra abbastanza ok con un semplice esempio, ma doesn 'ha davvero senso per qualcuno che non ha a che fare con problemi del mondo reale che queste tecnologie / tecniche aiutano con .
Dopo il semplice esempio che mi fa chiedere che cosa risolva la tecnologia / tecnica specifica, di solito vanno avanti e dicono "Ehi, sai una cosa, c'è un framework per quello chiamato ..., usiamolo per il resto degli esempi. " Iniezione di dipendenza? Basta usare Ninject. Vuoi falsificare roba? Dai, usa solo il Moq. MVVM? Mi stai prendendo in giro? usa semplicemente MVVM Light Toolkit!
Che è fantastico, davvero. Tutti questi strumenti, ne sono certo, semplificano la vita a tutti gli sviluppatori là fuori. Ma il mio problema è,
- Sto provando a usare TDD, ma non ho mai sperimentato i problemi che le persone hanno sperimentato mentre stavano sviluppando roba senza TDD, cosa che alla fine li ha fatti venire con una tale tecnica. Capisco il concetto alla base, in teoria posso capire perché è stato creato, ma in pratica non ho abbastanza esperienza per vedere un codice che trarrebbe beneficio da TDD. Perché non ho visto molto.
- Non ho mai avuto problemi nello sviluppo di un'applicazione enorme di cui avevo bisogno per disaccoppiare le cose e sono andato "Oh mio Dio! Questo è ridicolo! Devo trovare una tecnica in modo che non avrò molti problemi la prossima volta. " e ha scoperto "Iniezione delle dipendenze". Tutte le piccole cose che ho sviluppato fino ad ora hanno funzionato bene senza bisogno di un'iniezione di dipendenza.
- Non ho mai scritto un'applicazione WPF che mi abbia fatto pensare che le cose dovrebbero essere più semplici, il livello di presentazione dovrebbe essere separato, ci dovrebbe essere l'associazione dei dati. Diavolo, non ho nemmeno scritto un'applicazione WPF!
Quindi tutte queste cose mi fanno pensare come userò tutti questi strumenti, senza sperimentare in prima persona qualsiasi situazione del mondo reale che abbia coltivato la loro creazione.
Ma allo stesso tempo, non posso provare a scrivere una grande applicazione aziendale in WPF senza utilizzare MVVM o un buon design a strati e provare tutti i problemi che le persone hanno sperimentato in passato per apprezzare tutte queste nuove tecnologie / tecniche. Perché ci sono persone là fuori che sviluppano roba, vanno oltre, rilasciando cose che funzionano. Sarò lasciato indietro a causa della mia ossessione nel cercare di imparare tutto là fuori per imparare. Inoltre, queste cose non sono facili da apprendere senza aver prima sperimentato personalmente i problemi.
Ma poi, allo stesso tempo, ho quegli incubi che inizio a lavorare in una nuova azienda e la gente mi dice "Non puoi codificare il tuo framework MVVM? Hai sempre bisogno di usare Prism? Hahahahaha!" e vanno in giro puntando e ridendo di me in cerchio.
Mi sento un programmatore inferiore. Mi sento come se non avessi quello che serve per creare un framework per conto mio. Mi sento come se fossi in grado di mettere insieme le cose, che sono create da altre persone "migliori".
Vorrei chiedere a tutte le persone con esperienza là fuori, quali strategie hai usato durante la tua carriera? Usi sempre quadri esistenti? Crei progetti per animali per sapere perché esistono questi quadri?
Per farla breve, cosa costituisce la linea sottile tra l'utilizzo di una struttura e la creazione di una propria? E, ancora più importante, come si chiude il gap di conoscenza che si presenta automaticamente se si utilizza una tecnologia / tecnica senza vedere i problemi del mondo reale con cui aiutano?