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 mi ha "subappaltato" il lavoro e, dato che le scadenze del progetto erano un po 'non pianificate dalla loro parte, ho dovuto implementarlo in un attimo.
Al momento, abbiamo deciso che il modo più rapido sarebbe stato quello di creare una cartella di lavoro Excel con VBA e quindi far scaricare agli utenti questa cartella di lavoro potenziata con VBA da una Intranet da utilizzare sul proprio PC. In questo caso Excel era un vincolo perché il sistema di pianificazione (ovvero il database) che utilizziamo può interagire solo tramite un componente aggiuntivo di Excel che deve essere caricato contemporaneamente alla cartella di lavoro di pianificazione. Tuttavia, VBA non era un vincolo in quel momento.
La cartella di lavoro ho creato circa 4.000 righe di codice VBA e mentre provavo a separare i livelli di dati e presentazione, non potevo in tutti i casi a causa delle scadenze del progetto. Ad essere onesti, mentre sono orgoglioso di creare questa cartella di lavoro, sono allo stesso tempo un po 'deluso dal fatto che avrebbe potuto essere fatto meglio, sia in termini di codifica che di distribuzione agli utenti.
Oggi
Torna ad 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ù complicato e verrà utilizzato 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 poiché la programmazione per 100 utenti ha un impatto maggiore rispetto a 10 utenti. Pertanto, ho suggerito al team che forse dovremmo considerare la migrazione del codice esistente in una soluzione C # in modo da poter gestire il codice in un modo più raffinato. Lo sto ancora considerando come un componente aggiuntivo scritto utilizzando VSTO / Excel-DNA che può quindi essere distribuito agli utenti.
Ne ho discusso due settimane fa con il team IT e tutto sembrava andare bene, fino a ieri ho ricevuto una mail da uno dei team (che non conosce VBA o C #) in cui si chiedeva perché avremmo dovuto iniziare questo nuovo progetto in C # anziché usare il stesso approccio di prima. Alcune delle loro preoccupazioni erano:
- È un progetto abbastanza importante, quindi deve funzionare: una soluzione C # non sarebbe stabile o funzionante come quella esistente basata su VBA.
- 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 #. [attualmente non hanno nessuno come supporto, di solito intervengo].
Ora, posso capire alcune delle loro preoccupazioni in una certa misura, ma devo prendere una decisione sui prossimi passi e su cosa tornare con loro. Personalmente, vorrei implementare in C # perché penso che si presterebbe meglio alla costruzione di una soluzione "Enterprise" come questa. Inoltre, vorrei cogliere l'occasione per rispolverare le mie abilità in C # poiché al momento non sono così competente in C # come lo sono VBA e vorrei che un progetto come questo mi portasse al "livello successivo".
Ho preparato un elenco di punti che potrei usare per provare a convincerli che una soluzione C # sarebbe migliore per questo progetto, questo è quello che ho finora:
- Test unitari.
- Controllo della fonte.
- Documentazione del codice - per il trasferimento di conoscenze ad altre persone di supporto.
- Convenzioni di codifica migliori: possono usare cose come ReSharper per applicare nomi e strutture migliori.
- IDE migliore: meno errori dovuti all'evidenziazione degli errori.
- Più modularità attraverso gli assiemi: può promuovere il riutilizzo in strumenti futuri.
- Distribuzione gestita: può controllare da chi viene utilizzato questo strumento.
Domanda: quali altri punti posso aggiungere per convincerli? O sto cercando di mordere più di quanto riesca a masticare con questo progetto? Dovrei solo tacere e farlo in VBA comunque?
Sono consapevole che il semplice passaggio a una nuova lingua perché "nuova" o vista come "più fredda" non dovrebbe costituire una base per una decisione e come tale ho resistito a includerla come un punto di decisione - si tratta di fatti.
Inoltre, non sto chiedendo un confronto letterale tra C # e VBA come lingue, poiché ci sono molti confronti su SO.