Lavoro come agente di noleggio / manager per una società di noleggio auto che è in esecuzione su un sistema di noleggio che è stato scritto nel 1972. Ho deciso che forse era il momento di un aggiornamento. Per un po 'di background, ecco un breve esempio della follia che dobbiamo affrontare quotidianamente da questo programma:
Un agente di noleggio deve ricordare che la stampa su uno schermo utilizza "MXC" nel campo ACT (tutto si basa su codici brevi), che significa perplesso "MaXimum display on a Contract", mentre su un altro richiede PR (per PRint) in il campo AZIONE, ma diverse schermate utilizzano una Y nel campo PT (per PrinT), un'altra schermata utilizza Y nel campo PRT (per PRinT), ma un'altra schermata richiede che l'utente prema Invio (ma non il tasto Invio accanto al lettere, poiché si tratta di un nuovo carattere di linea, deve essere il tasto Invio sul tastierino numerico) e quindi F8, una schermata diversa ma correlata richiede semplicemente F8, alcune schermate hanno un campo etichettato PRT, che dovrebbe essere per PRinT, ma il campo in realtà non fa nulla e la stampa viene eseguita automaticamente dopo aver esaminato diversi prompt e ancora più schermate hanno un campo con l'etichetta STAMPA S / N,che per impostazione predefinita è follemente Y per le operazioni in cui un altro luogo sta già consegnando documenti e su N per le operazioni in cui un altro rivenditore avrà bisogno di documenti.
Decisi che avrei potuto fare un lavoro migliore di così, quindi mi misi in contatto con la persona della compagnia che avrebbe preso la decisione di aggiornarlo. Alla fine mi rivolgo al vicepresidente dell'IT, che è responsabile di questo programma. Prendo un po 'di informazioni da lui e apprendo che la mia compagnia di autonoleggio ha il suo programma di noleggio scritto nell'assemblatore mainframe IBM con un po' di COBOL mescolato. Dice che non ci sono posizioni aperte in questo momento, ma che dovrei e-mail lui il mio curriculum comunque (nel caso in cui qualcosa si apre).
Questo mi porta alle mie domande.
Il primo è tecnico. Con l'idea di migliorare la manutenibilità in futuro, il mio pensiero è quello di riscriverlo in un linguaggio di livello superiore rispetto al linguaggio assembly. La mia area di esperienza è in C ++, quindi questa è la scelta ovvia per me. La società ha un disperato bisogno di un modo più semplice per aggiornare il programma, poiché di recente ho letto un articolo in cui l'uomo con cui ho parlato è citato dicendo che il team ha lavorato duramente e sono orgogliosi di annunciare che il programma ora supporta 5 -codificare i codici di posizione (anziché 4) e i numeri di auto a 8 cifre (anziché 7). La mia filosofia sugli aggiornamenti, anche in situazioni così terribili, è in linea con quella di Joel: http://www.joelonsoftware.com/articles/fog0000000069.html in breve, le riscritture dovrebbero essere incrementali, piuttosto che buttare via tutto ciò che c'era prima e ricominciare da capo.
Esiste un modo semplice per integrare IBM assembly con C ++ e, in tal caso, come devo fare? Sono vagamente consapevole della parola chiave asm, ma non so se sia meglio usarlo o fare qualcos'altro. Un piano del genere è sconsiderato? Faccio la maggior parte del mio lavoro su Linux usando g ++ e GNU make, quindi le risposte specifiche sono benvenute, ma sicuramente non richieste (dal momento che non ho idea di che tipo di sistema di build non abbiano, ma sospetto quasi nulla).
La seconda domanda è più politica. Come dovrei persuadere questa azienda a dover cambiare? I risparmi teorici sui costi sono enormi (in base alle mie stime, la società sta sprecando circa un milione di dollari in più all'anno, solo per aumentare i costi di formazione per imparare a interagire con il programma), ma i miei cambiamenti proposti probabilmente metterebbero tutti i gli attuali programmatori non hanno lavoro, dovrebbero essere messi in atto, quindi c'è una grande resistenza strutturale al cambiamento.
modifica: dovrei spiegare perché la modifica di ciò che l'azienda ha già mi sembra la soluzione migliore. Sono ancora aperto ad altri suggerimenti, perché questo è un mostro di un programma, tuttavia. Non ho mai avuto un lavoro di programmazione prima, quindi per favore correggimi su qualsiasi analisi errata che potrei dare.
Prima di tutto, c'è la soluzione standard.
Dai miei colloqui con alcuni manager di medio livello su questo genere di cose, una delle preoccupazioni principali nel passaggio a un nuovo sistema è il gran numero di dipendenti fedeli che sono stati con l'azienda per decenni e ormai sono a proprio agio con il sistema . Se avessi la possibilità di modificare ciò che abbiamo, avrei potuto mantenere l'interfaccia attuale in una sorta di "modalità di compatibilità". Gli utenti devono già accedere per utilizzare il sistema corrente, quindi potrei aggiungere la possibilità di attivare un'impostazione quando gli utenti accedono per la 'prima' volta (dopo aver apportato questa modifica), dove hanno la possibilità di utilizzare il interfaccia "classica" o "nuova" interfaccia. Non c'è modo di trovare una soluzione standard che lo consenta,
La mia azienda possiede anche il software che utilizziamo; non lo autorizziamo. Ciò significa che i dirigenti con cui sto parlando sono le stesse persone che potrebbero effettivamente autorizzarmi a fare un cambiamento. Con una soluzione di terze parti, dovrei ottenere l'approvazione della mia azienda oltre a garantire tutti i diritti necessari alla società che ha sviluppato il prodotto che utilizziamo, il che aggiunge un ulteriore ostacolo. Ciò richiederebbe anche convincere la società a rinunciare al "loro" prodotto e prendere qualche altro prodotto, che sembra un ostacolo maggiore rispetto al tentativo di aggiornare ciò che abbiamo, ma potrei benissimo sbagliarmi su questo problema.
Infine, guardando al futuro, non voglio solo migliorare l'interfaccia utente e correggere alcuni bug. Dopo aver aggiornato quei problemi "urgenti", speravo di aggiornare il modo fondamentale in cui la società gestisce la tecnologia. Dopo aver trascorso 1-2 anni su questo tipo di problemi, il mio piano era di tornare alla direzione e proporre cambiamenti più drammatici. Ci sono molti modi in cui la società gestisce che potrebbero essere sostanzialmente migliorati dalla tecnologia che semplicemente non stanno usando in questo momento. Ad esempio, ogni regione funziona praticamente allo stesso modo. Il principale aeroporto locale è l'hub centrale per la distribuzione di automobili. Vengono inviati principalmente in base alle necessità. Tuttavia, l'aeroporto è utilizzato come base di partenza per tutte le operazioni. Manderanno due persone in una macchina nella mia posizione per ritirare da noi un'auto di cui non abbiamo bisogno, quindi tornare all'aeroporto con l'auto in cui sono entrati, oltre a ciò che stanno riprendendo (siamo a 32 miglia dall'aeroporto). Poi arriveranno nel luogo a 5 miglia di distanza da noi in due auto per lasciarne una, poi torneranno nell'altra macchina all'aeroporto. Lo fanno anche se l'auto che abbiamo rispedito è lo stesso tipo di auto di cui hanno bisogno vicino a noi. Sono in compagnia da circa due anni ormai, e mi sembra che si discostino da questo solo nelle emergenze più estreme di carenza di automobili (quindi circa tre volte in assoluto). Sostituirei le 4 persone che lavorano in ogni regione con un sistema di programmazione automatizzato che determina quali auto vanno dove e cerca e trova il percorso che richiede il minor tempo + miglia + autisti per consegnare tutte le auto dove devono essere, come un esempio delle correzioni di livello superiore che spero di aggiungere un giorno.
Tuttavia, prima di sentirmi a mio agio a proporre tutto ciò, ritengo che sarebbe utile avere una visione d'insieme della società e della base di codice eseguendo le attività più piccole, come l'aggiornamento dell'interfaccia. Soluzioni come l'outsourcing o altrimenti eliminerebbero questa possibilità.
if (m_newInterface)
codice spaghetti iniziò ad apparire in tutta la base di codice. Il disaccoppiamento e il refactoring sono durati abbastanza a lungo che, una volta terminato, la maggior parte degli utenti è già passata alla nuova interfaccia (si pensi a più anni).