Sfondo
L'anno scorso mi è stato chiesto di creare uno strumento da utilizzare per la pianificazione aziendale per circa 10 utenti. Ciò è stato fatto per conto di un altro team IT che ha "subappaltato" il lavoro per me, e visto che le scadenze del progetto sono un po 'non pianificate dalla loro parte, ho dovuto implementarlo in un attimo.
All'epoca, abbiamo deciso che il modo più rapido sarebbe quello di creare una cartella di lavoro Excel con VBA e quindi fare in modo che gli utenti scarichino questa cartella di lavoro potenziata VBA da una Intranet da utilizzare sui loro PC. Excel era un vincolo in questo caso perché il sistema di pianificazione (cioè il database) che utilizziamo può interagire solo tramite un componente aggiuntivo di Excel che deve essere caricato nello stesso momento in cui la cartella di lavoro di pianificazione è aperta. Tuttavia, VBA non era un vincolo in quel momento.
La cartella di lavoro che ho creato circa 4.000 righe di codice VBA e mentre cercavo di separare i dati e i livelli di presentazione, non potevo in tutti i casi a causa delle scadenze del progetto. Per essere onesti, mentre sono orgoglioso di creare questo libro di esercizi, sono allo stesso tempo un po 'deluso dal fatto che avrebbe potuto essere fatto meglio, sia in termini di codifica che di implementazione per gli utenti.
Oggi
Ritorniamo a oggi e il team IT è tornato da me per richiedere una cartella di lavoro simile (in modo da poter riutilizzare parti dell'altra cartella di lavoro sopra), ma questa volta è molto più complicata e verrà utilizzata da un numero maggiore di utenti (circa 200).
Tuttavia, questa volta, è un po 'meglio pianificato e posso vedere che abbiamo un po' più di tempo per pianificare le cose. Sulla base di questo, ho pensato alla soluzione e all'infrastruttura in quanto la programmazione per 100 utenti ha un impatto maggiore rispetto a 10 utenti. Pertanto, ho suggerito al team che forse dovremmo prendere in considerazione la migrazione del codice esistente in una soluzione C # in modo da poter gestire il codice in modo più raffinato. Lo sto ancora considerando come un componente aggiuntivo scritto usando VSTO / Excel-DNA che può essere poi distribuito agli utenti.
Ne ho discusso con il team IT due settimane fa e tutto sembrava andare bene, fino a ieri ho ricevuto una mail da uno dei membri del team (che non conosce VBA o C #) in cui si chiede perché dovremmo iniziare questo nuovo progetto in C # contro usando lo stesso approccio di prima. Alcune delle loro preoccupazioni erano:
- È un progetto abbastanza importante, quindi deve funzionare - una soluzione C # non sarebbe altrettanto stabile o funzionante, nonché una soluzione basata su VBA esistente.
- Dovremmo buttare via ciò che [I] abbiamo fatto nella soluzione VBA e ricrearlo da zero in C #.
- Qualcuno dovrà supportare due soluzioni separate, una in VBA e una in C #. [in realtà, al momento non hanno nessuno per supporto, di solito passo avanti]
Ora, posso comprendere alcune delle loro preoccupazioni in una certa misura, ma ho bisogno di prendere una decisione sui prossimi passi e su cosa tornare con loro. Personalmente, vorrei implementare in C # perché ritengo che si presterebbe meglio a costruire una soluzione "Enterprise" come questa. Inoltre, vorrei cogliere questa opportunità sulle mie abilità in C #, poiché al momento non sono competente in C # poiché sono VBA e mi piacerebbe che un progetto come questo portasse al "livello successivo".
Ho preparato una lista di punti che potrei usare per cercare di convincerli che una soluzione C # sarebbe stata migliore per questo progetto, questo è quello che ho finora:
- Test delle unità.
- Controllo del codice sorgente.
- Documentazione del codice - per il trasferimento delle conoscenze ad altre persone di supporto.
- Migliori convenzioni di codifica - possono utilizzare cose come ReSharper per rafforzare la denominazione e la struttura.
- IDE migliore: meno errori dovuti all'evidenziazione degli errori.
- Più modularità attraverso gli assiemi - può promuovere il riutilizzo negli strumenti futuri.
- Implementazione gestita: in grado di controllare con chi viene utilizzato questo strumento.
Domanda: quali altri punti potrei aggiungere per convincerli? O sto cercando di mordere più di quanto posso masticare con questo progetto? Devo solo tacere e farlo in VBA comunque?
Sono consapevole del fatto che il passaggio a una nuova lingua perché il suo "più recente" o visto come "più fresco" non dovrebbe essere una base per una decisione e come tale ho resistito per includerlo come punto di decisione - si tratta di fatti.
Inoltre, non sto chiedendo un confronto letterale tra C # e VBA come lingue, poiché ci sono paragoni in SO.