Minha empresa é uma pequena empresa de engenharia de vinte homens. Toda a programação de aplicativos aqui é feita no VB6 por duas pessoas, que aprenderam a si mesmas o VB6 com experiência em montagem enquanto trabalhavam aqui nos últimos 25 anos ou mais.
Como resultado, o código VB6 é repleto de odores horríveis, como toneladas de variáveis com tipos estritos , funções terrivelmente longas, centenas de variáveis globais públicas (algumas das quais são preferidas em contornar argumentos e retornar valores) e não um único objeto classe. A refatoração é quase impossível, e quaisquer alterações exigem muita pesquisa no código, e uma vez feitas, sempre parecem introduzir mais furos.
Meu chefe está percebendo que o VB6 é uma tecnologia morta e está disposto a ouvir meus pedidos de mudança para o .NET para um novo desenvolvimento. Estamos avançando para o .NET, mas ele vê isso como uma maneira de manter a compatibilidade com os sistemas operacionais Windows mais recentes, não como uma maneira de escrever um código melhor.
Como posso explicar melhor os benefícios da linguagem .NET sobre o VB6, além da mera atualização? O que posso dizer para enfatizar melhor que a mudança para o .NET é uma boa mudança, mas também que significa que nosso atual paradigma de programação também deve começar a mudar? Assim que meu chefe souber que o Visual Basic .NET se parece com o VB6, sei que seu primeiro instinto será simplesmente converter nossa antiga bagunça de código em .NET.
Entendo que será impossível mudar a mentalidade de qualquer pessoa em uma única tarde, mas como posso ao menos convencer meu chefe de assembléia que coisas como variáveis fortemente tipadas, classes personalizadas e campos privados não são uma perda total de tempo e energia?
fonte
Respostas:
Resposta curta: Não há nada que você possa fazer para mudar de idéia com base nos critérios listados na pergunta, que são todos técnicos . Isso é o equivalente a um debate religioso . O caminho mais rápido para o fracasso é apresentar um argumento que não é do ponto de vista do público, neste caso, os empresários .
Resposta mais longa: A mudança nos negócios é motivada por uma coisa e apenas uma coisa. Lucro para a linha de fundo.
Eles não só podem ser um desperdício de tempo e energia, mas o mais importante é que eles custam dinheiro ! Você deve ser capaz de mostrar quantitativamente que suas sugestões levarão a um lucro substancial ao longo do tempo. Apenas afirmar que o código limpo é "melhor" não é suficiente, porque o código limpo custa muito mais para produzir.
Se você conseguir articular como o custo do uso da tecnologia moderna levará
($COST + X) * TIME = $PROFIT
, ondeX
existe um número positivo não trivial eTIME
é relativamente curto, é possível criar um cenário atraente.Outra maneira de calcular o ROI (retorno do investimento)
Se esse ROI / ROR for um número trivial, principalmente por um longo período, você também não terá muito caso de negócios.
Como sua empresa realmente ganha dinheiro?
É difícil para um bom homem de negócios ignorar o dinheiro que está sobre a mesa.
Claro que você deve poder fazer backup de suas declarações com fatos concretos. Isso significa que você precisa fornecer números reais que mostram que realmente entende o negócio real e não apenas detalhes técnicos acadêmicos.
Não apenas os profissionais
Fornecer também uma análise de risco detalhada e quais seriam esses riscos
$COST
se eles acontecessem ajudaria a convencê-los de que você tem um caso realista e não está apenas reclamando que não deseja mais usar o VB6.Ensinando truques para cães velhos
Mudar ou não Mudar o paradigma de programação para ser o mais idiomático possível da nova tecnologia faz parte da análise de risco. Mas esse é um argumento separado somente depois que você provar que há muito dinheiro a ser feito com uma alteração em primeiro lugar.
Pessoas de negócios tendem a ouvir casos de negócios, assim como pessoas técnicas tendem a ouvir casos técnicos. Todos os seus casos em sua pergunta estão defendendo méritos técnicos que são acadêmicos na melhor das hipóteses em sua situação.
Predição
Estou fazendo algumas suposições aqui. Aplicativo VB6, pequena loja, poucos desenvolvedores, 2 proprietários / desenvolvedores de empresas mais velhos estão apontando para um aplicativo de nicho de mercado que provavelmente está maduro (bugs e soluções alternativas são conhecidas), apresentam recursos completos e relativamente estáveis, independentemente da "bagunça" é a base de código. Isso me leva a acreditar que a pequena base de usuários também não está crescendo drasticamente ano após ano, o que me leva à seguinte conclusão.
Que realmente não haverá nenhuma razão comercial convincente para mudar de direção técnica com este aplicativo. E a transferência para o VB.Net também é uma perda de tempo, porque você terá a bagunça, mas agora com mais, e 2/3 da equipe de desenvolvimento não se dedica a aprender algo novo. Boa sorte.
fonte
Eu tenho um cliente cujo produto principal é escrito em VB6 e mantido por 3 pessoas. Eu vim para ajudá-los porque eles tinham um parceiro que queria que eles ligassem para um serviço da web. Isso é muito difícil de executar no VB6, mas fácil no VB.NET ou C #, e eu escrevi para eles um assembly .NET que parecia no VB6 como um componente COM para que eles pudessem chamá-lo. Então eles precisavam oferecer um serviço da web para alguém. Eles queriam escrever um pequeno utilitário autônomo e seria necessário criptografar e descriptografar algumas informações e analisar alguns XML. Eu os ensinei a escrever isso no .NET. Nos últimos cinco anos, mais e mais de seu código está no .NET, embora o principal produto não tenha diminuído. Há partes dele que eles odeiam - todos os aplicativos os têm - e onde eles podem retirá-las (agora começa a diminuir) e colocá-las em serviços ou utilitários separados. O restante será convertido holus-bolus para .NET. Sim, nomes de variáveis incorretos e tudo - na minha opinião, existem muitos benefícios em mudar para o .NET, mesmo que eles não mudem seu paradigma de programação atual. Esses incluem:
Há mais, mas certamente isso é suficiente?
A questão dos paradigmas de programação, digitação forte, o compilador é seu amigo, o encapsulamento é seu amigo e assim por diante está em minha mente (e eu sou pago para ter essas opiniões) completamente separados. Se você quiser morrer naquela colina, vá em frente, mas você estará morrendo com uma cópia do VB6 aberta.
fonte
Comecei com um projeto VB6 há alguns anos (sistema ERP personalizado da empresa) e lentamente o migrei para o .NET. Está em algum lugar pela metade.
Antes de tudo, converter do VB6 para o VB.Net é quase sempre uma péssima idéia (e eu fiz muita pesquisa sobre isso). Há apenas muito diferente. Além disso, se o seu chefe pensa que o VB.Net é "igual ao VB6", ele está completamente enganado e você precisa mudar sua perspectiva rapidamente.
Minha estratégia era manter as duas bases de código separadas e mantê-las separadamente e depois mover lentamente módulos inteiros do VB6 para o .NET, mas somente quando houvesse uma mudança significativa prestes a acontecer naquele módulo, para que pudéssemos amortizar parte do custo. Mesmo assim, reescrever é uma tarefa muito cara e arriscada.
Existem duas maneiras de integrar o VB6 existente ao novo código .NET (e você provavelmente fará isso por muito tempo, para se acostumar com a ideia). A primeira maneira que fiz foi começar a escrever pequenos módulos no .NET e depois fazer com que o aplicativo principal do VB6 iniciasse o executável .NET passando alguns parâmetros da linha de comando. Isso funcionou, mas esteja avisado de que o .NET tem um tempo de inicialização de 4 a 10 segundos; portanto, você está limitado no que pode fazer dessa maneira.
Depois que começou a ficar realmente doloroso, inverti a estratégia e usei o método deste artigo do CodeProject para exibir os formulários VB6 existentes no meu aplicativo .NET principal. Depois que segui essa rota, consegui incorrer em apenas uma ocorrência de inicialização do .NET e use o ClickOnce para implantação, o que foi uma dádiva de Deus em comparação com a maneira como o aplicativo VB6 foi implantado anteriormente.
Dito isto, aqui estão as vantagens que encontro no .NET sobre VB6:
Action
eFunc
tiposDecimal
type (VB6 nunca teve um tipo decimal de primeira classe, mesmo que possua CDec)Guid
Desvantagens do VB6:
Para ser justo, aqui estão algumas desvantagens de manter uma solução combinada do VB6 / .NET:
Agora, como você sugeriu, você realmente deve reconstruir sua arquitetura a partir do zero, se começar a escrever código no .NET. No entanto, parece que nenhuma das pessoas da sua empresa está familiarizada com o mundo de programação .NET e / ou Java, que é de onde vêm muitos padrões e práticas comuns às estruturas de grandes empresas.
Se você pegar alguém que está acostumado a arrastar um botão em um formulário, clicar duas vezes nele e escrever algumas strings SQL diretamente no manipulador de eventos click, e que estiver trabalhando para eles, é muito difícil fazer com que eles vejam uma vantagem em seguir o SOLID princípios de design. Por outro lado, se você concordar e decidir que todo o novo código será coberto 90% ou mais por testes de unidade automatizados, perceberá rapidamente que é realmente difícil de fazer, a menos que adote os princípios de design do SOLID.
Então você precisa dar uma boa olhada na realidade da situação. No meu caso, eu era o único programador e estava determinado a fazer com que todo o novo código fosse testado por unidade, embora não tivesse experiência com ele. Não posso enfatizar o suficiente o quanto isso impactou negativamente o que eu poderia fazer na primeira semana, mesmo nos primeiros meses. Ainda assim, eu estava determinado a fazê-lo e recebi o apoio da gerência. A maioria das pessoas não tem esse luxo. Agora tenho muito código e acabei de concluir uma grande refatoração quase sem problemas.
Realisticamente, você não fará testes de unidade, o que significa que é mais difícil justificar princípios como injeção de dependência para seus companheiros de equipe. Você precisará vender o .NET por outros méritos além dos benefícios arquitetônicos. Você precisa se concentrar em um melhor suporte de biblioteca e melhores ferramentas. Essa é a única coisa que ressoa. Eu sugeriria o seguinte em sua demonstração:
DataGridView
na janela principalAction
como parâmetro. Faça isso primeiro passando outro método como parâmetro e depois surpreenda-se passando um delegado anônimo usando a sintaxe lambdaList<T>
eDictionary<T1,T2>
collection e mostre como ele cria código fortemente tipado (o VB6 tem coisas semelhantes, mas é digitado dinamicamente)foreach
loop que é embaraçosamente paralelo, useSystem.Diagnostics.Stopwatch
para medir o tempo necessário para executar e use a biblioteca paralela de tarefas para transformar o loop em umParallel.Foreach
loop e demonstrar a aceleração, supondo que você esteja em uma máquina com vários núcleos.Isso é o que eu faria.
fonte
Parece-me que esta é uma situação em que você precisará colocar seu chapéu de político em vez de seu de programação. Você deve estar muito atento a como argumentar e a não antagonizar seu público. Certifique-se de mostrar as vantagens do .Net em vez de mostrar as desvantagens do VB. Argumentar as desvantagens do VB colocará seus colegas de trabalho em uma posição em que eles precisam defender suas decisões e forçá-los a admitir que um idioma no qual eles investem pesado é um idioma ruim. Em vez disso, mostre a eles como a mudança para o .NET aumentará as ferramentas disponíveis e facilitará sua vida.
Minha maneira ideal de argumentar seria encontrar uma tarefa ou código que todo mundo está reclamando constantemente e corrigi-lo usando o .NET. Não estou especialmente familiarizado com o VB, mas aqui está uma pequena lista de tarefas irritantes que provavelmente seriam facilitadas usando o .NET em vez do VB.
Escolha qualquer uma das tarefas acima, ou alguma outra tarefa específica para os projetos nos quais você normalmente trabalha, e sente-se com elas e escreva algum código, a partir do zero, que lida com o problema de maneira rápida e fácil. Na verdade, mostrar o processo de escrita do código mostrará as ferramentas que as versões mais recentes do VS trazem para a mesa e fornecerá evidências de que a mudança para o .NET não tornará a vida de ninguém mais difícil.
Indo para isso, você absolutamente, positivamente deve fazer sua lição de casa. Se você não souber como as ferramentas funcionam, ou possui um código que não funciona corretamente, nunca poderá conquistá-las para o seu lado.
fonte
A primeira coisa que você diz é que o VB6 não é mais suportado pela Microsoft. Embora você possa mantê-lo funcionando, você precisa entender que suas opções a longo prazo são nulas. Eu nem sei se os aplicativos VB6 serão executados no Windows8 ou se o próprio IDE será executado no Win8.
Portanto, você precisa efetivamente reescrever eventualmente; se esse for o caso, é melhor começar agora ou mais tarde, dando a você tempo suficiente para descobrir qual nova tecnologia você deseja usar (enquanto o VB.NET parece ideal, esta é sua oportunidade de experimentar algo mais avançado, como fazer o aplicativo funcionar em iPads).
No curto prazo, você pode atenuar um pouco o problema, introduzindo novas seções como componentes COM para o aplicativo existente consumir; espero que esses componentes permaneçam quando ocorrer a reescrita inevitável.
Eu não me incomodaria com argumentos técnicos sobre por que o .NET é melhor que o VB6. Você terá um argumento perdedor lá, a tecnologia em si nunca resolve problemas. Depende de você como aplicar essa tecnologia e, se o aplicativo VB6 estiver resolvendo coisas para você, não há argumento para responder. Você pode falar sobre a facilidade de manutenção ou a disponibilidade de uma equipe experiente, mas, depois de fazer isso, admite que sua equipe existente não tem conhecimento da nova tecnologia e precisará ser treinada e, em seguida, leva algum tempo para se atualizar totalmente. com isso. Você também terá que responder às perguntas sobre como muitas reescritas acabam piores que o projeto original (algumas vezes devido à falta de conhecimento, outras devido a designs muito grandes).
fonte
Dê a ele a analogia "carro velho, carro novo vs carro":
fonte
Primeiro, acho que você deve mudar a pergunta (não na stackexchange, mas dentro da sua empresa). Não é tanto por que .Net é melhor que o VB6, mas mais como o VB6 não é mais suportado , é hora de seguir em frente, mas para quê. Pergunte às partes interessadas o que deve ser essa 'nova' tecnologia? Talvez não seja .Net.
Mas parece que você precisa mudar para uma nova tecnologia E implementar alguns bons padrões e práticas de programação. A resposta para a segunda parte é muito mais difícil. Você provavelmente precisará fazer isso em uma pequena seção do aplicativo e provar que vale a pena, ou seja, é mais estável, mais fácil de manter, etc.
fonte
Diga a seus chefes para escrever dois anúncios de procura. Um para desenvolvedores de C #. Um para especialistas em VB6. Coloque-os lá fora. Compare os resultados.
fonte