Pergunta

Com algumas mudanças no pessoal no escritório, os níveis de C # especialização caiu precipitadamente e agora mais existem desenvolvedores Java. Tem chegado ao ponto em que os superiores estão pensando em mudar um projeto .NET existente escrito em C # para o mundo Java.

Além do óbvio problema de começar completamente do zero quais são as formas possíveis que esta empresa pode realizar um movimento bem sucedido de desenvolvimento em um projeto de .NET C # para Java?

Foi útil?

Solução

Aqui estão as coisas a considerar:

  • É este grande projeto? Se sim, tentar ficar com C #
  • É este projeto de tamanho médio com componentes? Se não, tentar ficar com C #
  • É este pequeno projecto destinado a ser implantado em apenas janelas? Se sim, tentar ficar com C #
  • É este código-fonte de idade? Se sim, tentar ficar com C #
  • Você usa APIs do Windows OS específicos? Se sim, tentar ficar com C #
  • Você usa nenhuma API de terceiros sem contraparte Java? Se sim, tentar ficar com C #
  • Você usa .Net em (ligação de dados, controles de usuário, etc.) "profundas"? Se sim, tentar ficar com C #
  • tempo
  • A migração é mais aceitável do que obter nova / convertida C # caras? Se não, tentar ficar com C #
  • Você acha que os usuários finais não serão receptivos de mudanças, se você está a usar framework Java que irá mudar apresentação? Se sim, tentar ficar com C #
  • Verifique comerciais

Se você decidir converter:

  • Go por componente
  • Go por camada
  • tem um monte de testes
  • Verifique se existem ferramentas para ajudar (ainda que pequena ajuda pode ser) com a migração

Outras dicas

Apenas para adicionar à Brian e opiniões de Eric, eu diria que pegar C # para um desenvolvedor Java deve ser simples na minha opinião. Eles são conceitualmente línguas muito semelhantes e gostaria de sugerir treinar seus desenvolvedores Java para ganhar algumas habilidades C # para que você não será forçado a ir para o trabalho de um processo de migração.

Eu subscrevo a visão de Joel que uma reescrita total é quase sempre um erro . Outros cartazes têm razão: C # e Java são suficientes similar que qualquer desenvolvedor Java competente deve ser capaz de se tornar competente em C #, em questão de semanas ou meses. Isso não quer dizer que eles serão especialistas. Isso leva mais tempo, mas enquanto você tem alguns desenvolvedores C #, que pode orientar o processo, então você deve estar OK.

É difícil comentário sobre se ou não tal transição é uma boa ou má idéia sem saber especificidades da sua aplicação: tamanho, tipo de aplicação, indústria e assim por diante

.

Eu seria extremamente reticente sobre interruptor de tal, porque, na minha humilde opinião, C # é agora uma linguagem muito mais moderno do que Java e digo isto para você como alguém que tem sido um desenvolvedor Java ofr mais de uma década (desde os 1.0.2 / 1,1 dias).

Isso não quer dizer que Java é ruim. Não é. Sun tem uma nuvem que paira sobre ele e demonstrou uma falta de vontade ou incapacidade de conduzir a plataforma para a frente nos últimos anos.

Independentemente das línguas envolvidas, a gestão desta empresa parece loucura. Para qualquer coisa que não seja uma aplicação trivial, como pode ser economicamente razoável para reescrever uma base de código inteiro do zero, em vez de apenas contratar uma única pessoa com algumas habilidades no idioma certo? É este um negócio com esse problema bem conhecido:?! Dinheiro demais de reposição

Quanto tempo tem o código existente está em desenvolvimento? Se for mal começou, eu poderia entender isso. Se for visto um lançamento e tem usuários ativos, que irá não faz sentido para jogá-lo fora. Se você doou o código C # para uma start-up com as habilidades certas, pensar o quanto de uma vantagem que eles têm sobre você.

Antes de terminar de converter o projeto .NET em Java, todos os desenvolvedores Java que faziam parte do projeto de conversão terá aprendido C #. Então você não mais precisa convertê-lo em Java (e você pode jogar fora todo o código Java que foi produzido na conversão), porque agora você tem uma equipe de desenvolvimento que pode fazer as duas coisas Java e C #. Problema resolvido. : D

Se houver quaisquer componentes que já estão isoladas ou qualquer um que utiliza uma arquitetura orientada a serviços, você poderia componente um concebivelmente migrar de cada vez (em que cada componente individual é uma reescrita) e ainda ter os componentes falar com um outro utilizando os mesmos protocolos de redes interoperáveis. Provavelmente depende de que tipo de aplicação que estamos falando.

Certifique-se de que você tem toneladas de testes , porque tal migração vai morder você, onde você espera que ele menos.

Você tem mais .NET ou mais aplicações Java na produção. Se o seu já tem um investimento substancial em servidores e aplicações .Net, por que não pedir voluntários entre os desenvolvedores Java para passar para .net? A linguagem ea sintaxe é muito semelhante, por isso, a parte mais difícil seria aprender o quadro e, a menos que eles iriam gastar todo o seu tempo fazendo o desenvolvimento UI até mesmo aprender o quadro não é tão difícil.

Em nosso escritório, temos um número de muito bons desenvolvedores que se movem para trás e para frente entre Java e .Net, conforme necessário.

A fim de provar a gestão, você sempre precisa falar em termos de ROI e números. Mostre-lhes que se você mover esses aplicativos, vai levar uma quantidade enorme de tempo, recursos de controle de qualidade, e pode facilmente ter um assento traseiro se ele fica de-priorizada devido a algum outro projeto ou nova importância do desenvolvimento tomada.

Eu tive sucesso quando eu mostrei a eles os cronogramas, ROI, trabalho envolvido, dinheiro envolvido, etc.

Então, agora chegando ao ponto real, eu acho que os desenvolvedores Java seria capaz de suportar C # a menos que tenham algum bloqueio mental fundamental contra technolgies Microsoft.

Tenha um olhar em Net2Java , que puports para auxiliar na conversão de seu código de C # para Java. Eu duvido que vai ser perfeito, mas é uma maneira de remover um monte de trabalho penoso da tarefa, deixando-o com as torções de chamadas quadro incompatíveis e recursos de linguagem para resolver.

Uma vez que você tiver feito isso, sua tarefa é como qualquer outro projeto de grande migração - testar, testar e testar novamente. Os testes unitários, testes de integração de sistemas, testes de usuário final então. Você deve havew esses testes já no lugar que você usou com a aplicação original, além dos testes de unidade, eles ainda vão ser relevante.

Se for decidido fazer isso, você provavelmente irá beneficiar de uma abordagem híbrida, onde basicamente você pode misturar C # e Java na mesma aplicação, uma vez que irá mudar o cenário de uma conversão cachoeira para uma migração gradual. Aqui eu sei de duas possibilidades:

1) ikvm ( http://www.ikvm.net/ ) que permitem que você execute código Java em um .NET-runtime. Isso permite que o código Java para chamar o código C # e vice-versa. Depois, você pode congelar o desenvolvimento de código C #, e lentamente adicionar a funcionalidade revisto para a parte Java, mantendo uma aplicação funcional.

2) Mainsoft ( http://dev.mainsoft.com/Default.aspx ? tabid = 130 ) que lhe permite compilar .NET-bytecode em bytecode Java. Eles têm uma versão gratuita de entrada. Eu não tenho nenhuma experiência com o produto, mas eles anunciam pesadamente na nossa plataforma que tem apenas Java disponível.

Eu não sou um especialista em Java, mas a partir de minha experiência trabalhando com código Java, embora sendo um fã C #, a seguir estão alguns dos possíveis dores de cabeça:

  • Os genéricos são implementados de forma diferente em Java e C #.
  • Boxe / comportamentos Unboxing são diferentes entre Java e C #
  • Java classe Naming Convention + lotes C # código gerado
  • string manipulação (ou seja Unicode / preocupações ASCII) pode ser problemático, dependendo da qualidade do Java / C estar # código portado.

Pessoalmente, eu não acho que a escrita a partir do zero é uma má idéia. Desde que você já tem uma arquitetura de trabalho.

Eu sou ninguém um pouco surpreso até sugeriu a idéia de rejeitar a migração.

Eu não acredito que um desenvolvedor C # pode ser forçado a mudar para Java (ou vice-versa), porque ele foi dito para (bem, se ele está ameaçado com uma arma, em seguida, talvez). Eu preciso de tempo muito, exercício e paixão de dominar pelo menos tecnologia de pilha um. Você simplesmente não pode começar a noite com uma nova tecnologia e esperam para proporcionar a mesma qualidade.

Eu, pessoalmente, não incomoda até ter permissão para iniciar a migração. Em que ponto eu dizer ao gerente que estou .NET cara e não vai mudar para outra tecnologia só porque eles decidiram.

Quanto ao lado técnico, não é a sintaxe da linguagem que difere, mas sim bibliotecas e as suas características. Claro que, se todas as últimas sinos e assobios de .NET 3.5 têm sido extensivamente em uso, então a diferença de linguagem irá fornecer-lhe um desafio real.

Isso é certamente uma maneira engraçada, apenas decidir aplicações migrar do .NET para Java. Alguém tem idéia dos problemas envolvidos ...

Possivelmente você poderia usar jni4net - opensource ponte ? Ou lista de outras opções eu sei.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top