Eu trabalho como agente / gerente de aluguel de uma empresa de aluguel de carros que está executando um sistema de aluguel escrito em 1972. Decidi que talvez fosse hora de uma atualização. Para um pouco de experiência, aqui está um pequeno exemplo da loucura com a qual devemos lidar diariamente com este programa:
Um agente de aluguel deve se lembrar de que a impressão em uma tela usa "MXC" no campo ACT (tudo é baseado em códigos de acesso), que significa perplexamente "MaXimum display on a Contract", enquanto em outra exige PR (for PRint) em o campo AÇÃO, mas várias telas usam um Y no campo PT (para PrinT); outra tela usa Y no campo PRT (para PRinT); outra tela exige que o usuário pressione enter (mas não o enter ao lado do letras, como esse é um novo caractere de linha, deve ser a tecla enter no teclado numérico) e, em seguida, F8, uma tela diferente, mas relacionada, exige apenas F8, algumas telas têm um campo chamado PRT, que deve ser para PRinT, mas o campo realmente não faz nada e a impressão é feita automaticamente após várias solicitações, e ainda mais telas têm um campo chamado PRINT S / N,cujo padrão é insanamente Y para operações em que outro local já esteja entregando papelada e N para operações nas quais outro revendedor precisará de papelada.
Decidi que poderia fazer um trabalho melhor do que isso, então decidi entrar em contato com a pessoa da empresa que tomaria a decisão de atualizar isso. Acabo entrando em contato com o vice-presidente de TI, responsável por este programa. Pego um pouco de informação com ele e soube que minha empresa de aluguel de carros tem seu programa de aluguel escrito na montadora de mainframe IBM com um pouco de COBOL misturado. Ele diz que não há vagas abertas no momento, mas que eu deveria e-mail meu currículo de qualquer maneira (no caso de algo se abre).
Isso me leva a minhas perguntas.
O primeiro é técnico. Com a idéia de melhorar a capacidade de manutenção no futuro, meu pensamento é reescrevê-lo em uma linguagem de nível superior à linguagem assembly. Minha área de experiência é em C ++, então essa é a escolha óbvia para mim. A empresa precisa urgentemente de uma maneira mais fácil de atualizar o programa, pois li recentemente um artigo em que o homem com quem falei é citado por dizer que a equipe trabalhou muito e eles têm orgulho de anunciar que o programa agora tem suporte para 5 códigos de localização de dois dígitos (em vez de 4) e números de carro com 8 dígitos (em vez de 7). Minha filosofia de atualização, mesmo em situações terríveis, está alinhada com a de Joel: http://www.joelonsoftware.com/articles/fog0000000069.html , resumindo, as reescrições devem ser incrementais, em vez de jogar fora tudo o que havia antes e começando de novo.
Existe uma maneira fácil de integrar o assembly IBM ao C ++ e, em caso afirmativo, como devo fazê-lo? Estou vagamente ciente da palavra-chave asm, mas não sei se é melhor usá-la ou fazer outra coisa. Esse plano não é aconselhável? Eu faço a maior parte do meu trabalho no Linux usando g ++ e GNU make, portanto respostas específicas são bem-vindas, mas definitivamente não são necessárias (já que não tenho idéia de que tipo de sistema de compilação elas não têm, mas suspeito que quase nenhuma).
A segunda pergunta é mais política. Como devo convencer essa empresa de que eles precisam fazer a troca? As economias de custo teóricas são enormes (com base em minhas estimativas, a empresa está gastando mais ou menos um milhão de dólares por ano, apenas com o aumento dos custos de treinamento para aprender a interagir com o programa), mas minhas alterações propostas provavelmente colocariam todas as programadores atuais sem trabalho, caso sejam promulgados, para que haja uma grande resistência estrutural à mudança.
editar: devo explicar por que modificar o que a empresa já tem parece a melhor solução para mim. Ainda estou aberto a outras sugestões, porque este é um monstro de um programa. Eu nunca tive um trabalho de programação antes, então, por favor, corrija-me em qualquer análise incorreta que eu possa fornecer.
Primeiro, existe a solução pronta para uso.
Nas minhas conversas com alguns gerentes de nível médio sobre esse tipo de coisa, uma das principais preocupações com a mudança para um novo sistema é o grande número de funcionários leais que estão na empresa há décadas e já se acostumam com o sistema. . Se eu tiver a capacidade de modificar o que temos, eu poderia manter a interface atual em uma espécie de 'modo de compatibilidade'. Os usuários já precisam fazer login para usar o sistema atual, para que eu possa adicionar a capacidade de ativar uma configuração quando os usuários fizerem login pela primeira vez (depois de fazer essa alteração), onde terão a opção de usar o interface 'clássica' ou a interface 'nova'. Não há como encontrar uma solução pronta para uso que permita isso,
Minha empresa também possui o software que usamos; nós não o licenciamos. Isso significa que a gerência com a qual estou conversando atualmente é a mesma pessoa que poderia me autorizar a fazer uma alteração. Com uma solução de terceiros, eu precisaria obter a aprovação da minha empresa, além de garantir quaisquer direitos necessários à empresa que desenvolveu o produto que usamos, o que adiciona um obstáculo adicional. Isso também exigiria convencer a empresa a desistir de "seu" produto e adquirir outro produto, o que parece ser um obstáculo maior do que tentar atualizar o que temos, mas eu poderia estar errado sobre esse assunto.
Finalmente, olhando para o futuro, não quero apenas melhorar a interface do usuário e corrigir alguns bugs. Depois de atualizar esses problemas 'urgentes', eu esperava atualizar o modo fundamental como a empresa funciona em relação à tecnologia. Depois de passar de um a dois anos nesse tipo de problema, meu plano era voltar à administração e propor mudanças mais drásticas. Há muitas maneiras pelas quais a empresa administra que poderiam ser fundamentalmente aprimoradas pela tecnologia que simplesmente não estão usando no momento. Por exemplo, cada região opera da mesma maneira. O principal aeroporto local é o centro da distribuição de carros. Eles são enviados principalmente conforme a necessidade. No entanto, o aeroporto é usado como base para todas as operações. Eles enviarão duas pessoas em um carro para minha localidade para buscar um carro que não precisamos, depois retorne ao aeroporto com o carro em que eles entraram, mais o que eles estão levando de volta (estamos a 52 quilômetros do aeroporto). Em seguida, eles chegarão ao local a 8 km de distância em dois carros para deixar um deles e depois voltarão no outro carro para o aeroporto. Eles fazem isso mesmo que o carro que devolvemos seja o mesmo tipo de carro que eles precisam perto de nós. Estou na empresa há cerca de dois anos e parece que eles se desviam disso nas emergências mais extremas da escassez de carros (cerca de três vezes). Substituiria as 4 pessoas que trabalham em todas as regiões por um sistema de agendamento automatizado que determina quais carros vão para onde e tentam encontrar o caminho que exige o menor tempo possível + milhas + motoristas para entregar todos os carros onde precisam, como exemplo das correções de nível superior que espero adicionar um dia.
No entanto, antes de me sentir à vontade em propor tudo isso, acho que seria útil conhecer a empresa e a base de código executando tarefas menores, como atualizar a interface. Soluções como terceirização ou de outra forma removeriam essa possibilidade.
if (m_newInterface)
código espaguete começou a aparecer em toda a base de código. A dissociação e a refatoração levaram tempo suficiente para que, quando isso fosse feito, a maioria dos usuários já tivesse migrado para a nova interface (pense em vários anos).