Se você tem vários anos de experiência no trabalho com Java e vários anos no trabalho com C # e .NET, eu valorizaria sua opinião sobre as diferenças de produtividade no desenvolvimento de software entre esses dois ambientes. Um de nossos clientes está pensando em substituir sua solução de software existente. Como a substituição exigirá aprox. O trabalho de 10 a 15 homens-homem, uma opção para Java ou .NET, com base nas diferenças de produtividade entre eles, pode influenciar significativamente o investimento necessário e o tempo de colocação no mercado.
Você poderia nos fornecer uma indicação das diferenças de produtividade no desenvolvimento de software entre Java e C # / .NET? Eu preferiria receber uma resposta da seguinte maneira:
Minha experiência é baseada em X anos de experiência trabalhando com Java e X anos de experiência trabalhando com C # / .NET. Java é X% mais produtivo que C # .NET ou C # /. NET é X% mais produtivo que Java se você levar o seguinte em consideração.
fonte
Respostas:
Minha experiência é baseada em 10 anos de experiência trabalhando com Java e 3 anos de experiência trabalhando com C # / .NET. Java é 0% mais produtivo que C # .NET. Isso se baseia na gravação de aplicativos baseados em serviço de back-end.
C # /. NET é talvez 5% mais produtivo que Java para escrever aplicativos de usuário. Mas não faço isso há quase cinco anos em Java e o novo editor de interface do usuário do Netbeans poderia ter fechado a lacuna.
Você quer aumentar a produtividade? CI (idealmente entrega contínua) e testes automatizados. A produtividade obtida pela escolha de idioma / plataforma / IDE em qualquer idioma / plataforma / IDE principal é bastante pequena.
fonte
Trabalho em projetos na faculdade e no mundo real usando Java e C # há 5 anos.
Sem dúvida, eu gosto de usar C # mais por causa de sua sucessão e uso de açúcar de sintaxe. Você raramente encontrará um
Factory.GetFactory(OfFactory.GetFactory(Factory));
código em C #. É mais fácil ler e acompanhar, porque a sintaxe é menor e mais sucinta.Com qual deles você será mais produtivo? Isso depende do tipo de projeto.
Você está criando um aplicativo de desktop para Windows? Então, o C # é a melhor opção por causa do poderoso IDE Visual Studio e o .NET Framework facilita a criação de GUI.
Sinceramente, fico feliz por não usar mais o Java (já faz mais de um ano) porque lembro o quão horrivelmente detalhado o código deveria ser. Um exemplo rápido é o tratamento de exceções. Se seu código pode gerar uma exceção, você deve considerar todas as exceções possíveis. Isso rapidamente transforma o código trivial em uma monstruosidade de 20 linhas +.
O C # não é tão fácil de segurar, se você optar por deixar seu código aberto, que cabe a você como desenvolvedor decidir.
O C # também fez muitas adições ao longo do ano, o que o torna um prazer de usar. Lambdas, delegados, função anônima (a la Ruby), muitas pequenas coisas boas que você encontrará à medida que avança.
fonte
If your code can throw an exception you must account for every single exception possible.
Não vejo a desvantagem disso, pelo menos isso aumenta a conscientização dos problemas ... porém, pode ser apenas eu.Trabalhei extensivamente com Java (desde 1996) e .Net (desde 2002) e, em 2010, tomei a decisão de ir com Java em minha empresa, com base em que seria o ambiente mais produtivo em geral .
Observe que eu defino a produtividade do desenvolvimento de software em termos de valor comercial criado por unidade de custo / recurso, de ponta a ponta (ou seja, você precisa observar a produtividade de todo o ciclo de vida do software, incluindo implantação e manutenção, e não apenas o codificação inicial !!).
Aqui estão os principais elementos do meu raciocínio:
object.getSomeProperty()
vs.object.SomeProperty
ou usam uma classe interna anônima vs. lambda simplesmente não fará nenhuma diferença significativa na vantagem competitiva da sua empresa ...Portanto, embora houvesse muitas considerações complexas, no geral, estou muito feliz com a opção de ir com Java e faria a mesma escolha hoje (no início de 2012).
Provavelmente, o único caso agora em que eu iria com o .Net seria se eu estivesse desenvolvendo um aplicativo de desktop somente para Windows (onde a vantagem do .Net é claramente enorme).
fonte
Eu tenho: Java 10 anos, C # 8 anos
Voto em Java para
fonte
Java: 5 anos (não contínuo)
C #: 7 anos
Não acredito que você possa quantificar a produtividade dessa maneira. Isso depende muito do desenvolvedor individual e do projeto. Use o que seus desenvolvedores sabem.
Editar:
Vamos definir "aplicativo corporativo típico" como:
Java e C # podem fazer isso. Não se trata tanto da linguagem, mas da estrutura / tempo de execução. Novamente, use o que seus desenvolvedores sabem. Eles podem aprender um novo idioma e uma nova estrutura, mas leva tempo para entender. Isso seria verdadeiro para um aplicativo de desktop. Ambos os idiomas podem ser usados com inúmeras ferramentas / bibliotecas de GUI, mas todos eles têm abordagens e filosofias diferentes.
fonte
Tenho mais de 10 anos de experiência com Java (desde a versão 1.1, realmente!) E 7 anos de experiência com .NET (principalmente C #).
Você ainda tem uma decisão a tomar, mas principalmente deve tentar dividir-se em alguns cenários:
Aplicativo de desktop
Se você estiver desenvolvendo um aplicativo de desktop, precisará usar a plataforma principal com a qual trabalhará. Se é uma plataforma da Microsoft que usa o .NET, não há solução melhor do que a plataforma desenvolvida pela própria mãe. Se for um cenário Linux ou de várias plataformas, considere Java ou mude para uma solução baseada na Web.
Aplicativo baseado na Web
Esta é uma decisão muito difícil de tomar, porque cada um tem sua própria força e fraqueza. Aqui estão alguns:
C #
Força: Atualmente, há mais impulso para criar novos recursos no idioma e na plataforma / estrutura. Tudo vem de um fornecedor e, definitivamente, isso é uma vantagem. Você também pode usar alguns componentes muito poderosos, como o DevExpress (por exemplo, o Java não chega nem perto de ter algo parecido com o que a equipe do DX montou ao longo dos anos e isso representa um enorme aumento de produtividade).
Fraqueza: para aplicativos corporativos, o .NET não é tão maduro quanto o Java. Você não tem tantos fornecedores criando software corporativo no .NET quanto o Java.
Java
Força: Mais madura (já explicada) e tem uma grande comunidade com vários ótimos projetos de código aberto que podem ajudar. Vários projetos de código-fonte aberto do .NET são realmente apenas uma cópia dos projetos do Java.
Fraqueza: a Oracle possui Java (eu sei, não o JCP) e esse é definitivamente um risco a ser considerado. Suas intenções não são muito claras e, pessoalmente, não gosto de onde a linguagem está indo agora (sei que muitos desenvolvedores de Java têm preocupações semelhantes).
Aplicativo do lado do servidor
São basicamente os mesmos argumentos que os aplicativos baseados na Web, mas como você não precisa se preocupar muito com a interface do usuário, o Java fica mais forte nesse caso. Mas, novamente, se a plataforma é principalmente o Windows .NET, pode ser uma escolha melhor.
Considerações gerais
No geral, na minha opinião, o .NET tem a vantagem principalmente por causa da forte integração do Visual Studio 2010 (sem dúvida o melhor IDE existente), MS SQL, Entity Framework, IIS e assim por diante. Tudo isso representa um enorme aumento de produtividade e tenho muita experiência comprovando isso. Também trabalho principalmente com desenvolvedores Java que se voltaram para o .NET e compartilham basicamente a mesma opinião.
Eu acho que também é um bom argumento que a Microsoft esteja mais forte do que nunca, o que significa que o .NET estará lá por um tempo. Portanto, ao olhar 10 a 15 anos à frente, me sinto mais seguro com o .NET do que com o Java.
fonte
Sou um estudante recém-formado na universidade, mas tenho experiência comercial com os dois idiomas, oferecendo um total de aproximadamente 3 anos em java e 4 anos em C # .Net (observe .net significa que você pode usar C #, VB.net, C ++ CLI, e J # e F #).
Vou declarar agora que minha preferência geral é C # sobre Java, enquanto ambas têm sintaxe semelhante, eu gosto do poder da estrutura .Net sobre a compatibilidade entre sistemas operacionais de Java. Você deve considerar fortemente o que precisa construir? Isso é apenas um aplicativo de desktop? Você está precisando de conectividade com outros clientes, para outros computadores, celulares, sites?
** A discussão sobre o IDE perdida quando a pergunta no Stackoverflow foi encerrada. O ponto principal disso é que o Java tem muitos IDEs gratuitos, mas eles não se comparam na minha opinião ao poder e aos complementos do visual studio. Mas observe que o Visual Studio custa mais por licença.
Você precisa analisar quais habilidades sua equipe de desenvolvimento já possui, pois isso terá um impacto inicial. O que é mais rápido, aqui e ali, dado um usuário experiente em qualquer idioma / estrutura. O que eu acho traz o ponto de que você não deve considerar a linguagem, pois a linguagem é apenas sintaxe, mas as ferramentas e a estrutura que a linguagem está usando.
fonte
Com a semelhança na sintaxe e nas ferramentas, os ganhos de produtividade do C # ou do java não são de ordem de magnitude para fazer uma diferença significativa no seu projeto de trabalho de 10 a 15 homens / ano. Eu examinaria mais de perto questões como:
Eu sugeriria que, na minha opinião, a premissa por trás da pergunta, que "diferenças de produtividade entre (C # e Java) podem influenciar significativamente o investimento necessário e o tempo de colocação no mercado" não é verdade. Não duvido que haja alguma diferença, mas isso não seria significativo.
fonte
Eu alternei entre Java e .NET, começando com Java 1.2 até 1.6 e .NET 1 até 4.0, em cerca de 10 anos de experiência profissional (sendo um programador C / C ++ antes disso).
Ao mesmo tempo, como o .NET 2.0, eu diria que Java e C # seriam praticamente os mesmos, especialmente para o trabalho de back-end. As construções de linguagem ainda eram muito semelhantes. O .NET provavelmente ganhou a vantagem na programação da interface do usuário da área de trabalho, por causa do designer WinForms no Visual Studio, e o Java teria a vantagem no material da Web / Server, principalmente porque você não estava preso ao IIS.
Agora, migrando para o .NET 3.5 e 4, dou a vantagem de produtividade ao .NET, sem esforço. Isso é principalmente, na minha opinião, porque o .NET é uma linguagem de evolução muito mais rápida, já que a MS pode tomar decisões de linguagem de forma relativamente rápida, em vez de promover mudanças nas políticas do JCP. Grandes melhorias são a
var
palavra-chave, a totalidade de Linq, Métodos de extensão, o operador coalescentes nulo??
,dynamic
e, provavelmente, muito mais grandes coisas que realmente aumenta a produtividade.Agora, dito isso, a linguagem "mais produtiva" para um projeto é quase sempre aquela com a qual a maioria dos desenvolvedores se sente mais confortável e experiente. A curva de aprendizado é sempre a maior causa de morte na produtividade.
fonte
Uma coisa que notei é que muitas lojas C # /. NET têm uma atitude "não inventada aqui" e banem todas as bibliotecas de terceiros / código aberto, enquanto muitas lojas Java estão mais dispostas a usar bibliotecas de código aberto. Também parece haver mais bibliotecas disponíveis para Java. Mesmo se você olhar para algumas bibliotecas legais de terceiros no .NET, por exemplo, NHibernate, NPOI, Spring.NET, etc., elas são portas das bibliotecas Java e, portanto, estão por trás delas. Certamente parece que muitas dessas inovações vieram primeiro para Java e, depois, uma porta .NET foi criada. Do ponto de vista da biblioteca, certamente parece que o Java vence em termos de novas descobertas inovadoras.
Ainda assim, a Microsoft cria algumas bibliotecas oficiais, por exemplo, ASP MVC, LINQ, etc. Mas, muitas vezes, como as bibliotecas de terceiros do ASP MVC, como Struts, Spring MVC, etc. já estavam disponíveis para Java e a Microsoft estava atrasada para entrar no paradigma da web do controlador de exibição de modelo.
Obviamente, muitas dessas bibliotecas economizam muito tempo e tornam você mais produtivo. Linguagem central para linguagem central C # e Java não são tão diferentes e, para mim, é muito difícil chamar isso. Jogue no exército de bibliotecas de terceiros e a escala certamente se inclina para Java. Ainda com uma loja aberta, grande parte dessa inclinação se equilibra. É apenas um monte de lojas .NET que não inventaram a atitude aqui, enquanto muitas lojas Java são necessárias para realizar o trabalho ... Isso é verdade na empresa em que trabalho, a equipe .NET não recebe muito (devido ao gerenciamento), enquanto a equipe Java possui muitas bibliotecas / utilitários de terceiros aprovados. Também com o .NET, muito mais coisas boas não são gratuitas (por exemplo, antes da NPOI, se você queria trabalhar com documentos do Microsoft Office, a maioria das soluções [sem contar a automação do escritório] não era gratuita.
fonte
Eu me perguntei muito: qual é o melhor? C # ou Java?
Vou dar um conselho e esse conselho é a conclusão da minha pesquisa: nenhum deles é melhor, apenas o idioma que você conhece bem e você pode fazer muitas aplicações fascinantes com o melhor.
Aprenda a programar e, em seguida, treine-se muito usando um idioma e, quando você se tornar perfeito ao escrever código com ele, pense em outros idiomas e acredite, você aprenderá os outros idiomas como um pedaço de bolo.
fonte