Migrando para .net

28 respostas
V

Boa tarde …

Sou estudante e venho programando em java faz um tempinho …
Tenho mais conhecimento em desenvolvimento pra desktop com swing e tal …
Tambem ando estudando EE , Struts2 e tal. Tambem tenho uma base na JPA …

Gostaria de entrar no mercado de trabalho logo , na plataforma que eu conheço (java) , mas hj surgiu uma oportunidade de entrar pela plataforma .net (infelizmente rs ; cujo conhecimento que tenho na mesma é nulo praticamente rs)
A vaga e praticamente minha , ate pq foi por indicaçao, mas quero estudar logo pra chegar pelo menos com uma base da linguagem la …

Gostaria de saber se a curva de aprendizado para a mesma e mt grande , e se tem alguma apostila que trata dessa migração?

28 Respostas

A

Programo um pouco em .NET, mas acho o seguinte:
Você deve primeiro entender como funciona o MVC e a programação web
As sintaxes são o de menos, com o tempo você acaba decorando
Você já sabendo programar em java ajuda, pois, .NET você pode usar C#, que vem da mesma origem que o java (C/C++)
.NET é mais rápido de aprender que java web, uma vez que você consegue criar um projeto facilmente sem precisar saber configurar nada, apenas um pouco da programação…
Esta é minha opinião, flw

M

A curva de aprendizado da plataforma .Net é mais suave se comparada a da plataforma Java. Programo em Java e em .Net, e sem sombra de dúvidas o .Net é bem mais fácil.

A

Sim, o esquema é pegar bem lógica e Orientação à Objetos mano…

Olha, se eu fosse vc, eu esperava se esse fosse meu objetivo O Java pois depois vc pode acabar por um motivo ou outro ficando no Mundo Micro$oft…

A

Oi,

Hoje vou mudar um pouquinho meu discurso para não ficar repetitivo…

Não existe um numero de vagas para programadores java correspondente ao numero de programadores apaixonados pela linguagem, então alguém vai ter que pular para o outro lado.

.Net é tudo de bom! :wink:

W

Eu migrei do Java para .NET/CSharp faz quase 4 anos e eu nao acho eh mais “facil”.
Qualquer linguagem eh faci para “programador” que faz somente o feijao com arroz.
Vai tirar uma certificacao .NET pra voce ver, eh extermamente dificil, bem diferente das certificacoes Java. Pra comeco de conversa eh necessario ter experiencia profissional para tirar a certificacao, as certificacoes mais simples “web developer” por exemplo, sao 4 testes que voce tem que passar.

Com ja falaram a sintaxe do CSharp eh bem parecida com Java, a sintaxe em si nao sera um problema, o que voce tera que aprender eh o que o framework disponibiliza para voce.
Outra coisa que eh bom , eh ter conhecimento de OOP, IoC, MVC Framework, Entity Framework e LINQ e claro IIS e MSQL.

Se vc pensa “infelizmente” por ter recebido uma proposta pra trabalhar com .NET, nao aceite. Continue procurando uma oportunidade em Java porque se voce nao gosta de Microsoft, nao faz sentido ficar se torturando.
O mercado .NET eh bem aquecido em qualquer lugar do mundo, aqui na Europa tem muitas empresas, os salarios sao muito bons (altos) comparados aos empregos de Java. Entao vale a pena investir em .NET

Para comecar a estudar eu sugiro:





http://msdn.microsoft.com/en-us/library/bb399572.aspx
http://www.agiledata.org/essays/tdd.html

//Daniel

M

eu te aconselharia a aceitar a vaga e estudar c# agora sim… muito importante agora é ja começar para não perder tempo e ir adquirindo experiência…

linguagem é só linguagem, o mais importante é você conseguir conhecer lógica, OOP, como funciona a web, etc, como disseram.
o quanto antes você começar melhor para você adquirir logo experiência, é muito bom para melhorar o profissional que você é e a sua empregabilidade.
se você não gostar de .net agora, ainda vai dar para você migrar depois para java, o mercado tem bastante vaga aberta sim, na verdade tem muita vaga aberta nos grandes centros por que não encontram profissionais qualificados (ou qualificados o suficiente), e quando encontram esse povo está ganhando muito bem… o mesmo se aplica a .net.

M

Os conceitos de OOP, IoC, MVC foram encorporados em .Net recentemente, no Java já existe há anos.

W

Bem, MVC Framework pode ate ser novo, tipo 3 anos, sei la.

Quanto a OOP, sabendo que C# esta por ai desde 2001, se vc acha isso “recentemente”… nem vou falar do C++ :slight_smile:

IoC nao eh nada novo tb, sugiro dar uma lida, eh IoC nao eh nenhum funcionalidade de API e sim um pattern.

Vc estava congelado desde 1998 ??? :wink:

//Daniel

M

Para que tanta groceria, falta de respeito com o próximo? Não estou aqui para ser insultado por um ser que ache que sabe tudo. Estou aqui para tirar dúvidas e aprender com os outros, mas não com você.

W

Oi Marcio, desculpe se eu pareci ser rude, nao foi minha intencao.
Foi uma brincadeira em perguntar se vc estava congelado. Nao foi minha intencao de ofender ng.

Eu tb estou aqui para aprender, com certeza.

//Daniel

A

Oi,

Hoje vou mudar um pouquinho meu discurso para não ficar repetitivo…

Não existe um numero de vagas para programadores java correspondente ao numero de programadores apaixonados pela linguagem, então alguém vai ter que pular para o outro lado.

.Net é tudo de bom

rsrsrsrsrs só pode ser piada rsrsrsr

A

abraaoinfo:
Oi,

Hoje vou mudar um pouquinho meu discurso para não ficar repetitivo…

Não existe um numero de vagas para programadores java correspondente ao numero de programadores apaixonados pela linguagem, então alguém vai ter que pular para o outro lado.

.Net é tudo de bom

rsrsrsrsrs só pode ser piada rsrsrsr

Quando for dar quote na resposta de alguém, use as tags… senão fica dificil acompanhar o que está tentando dizer…

De qualquer forma… onde está a piada nesta resposta?

V

Eu programo com .Net há dois anos. Acho ele muito bom também.
Melhor no desenvolvimento de jogos, e excelente também para aplicações comerciais e sites.

A linguagem C# tem uma estrutura muito similar à do Java, mas é mais poderosa. Já incorpora lambda e tem várias outras funcionalidades não cobertas pelo java (sobrecarga de operadores, passagem de parâmetro por referência, partial classes, só para citar dois exemplos).
Existe o LINQ, que é algo absurdamente poderoso. Uma tecnologia realmente fantástica.

As desvantagens são que o número de ferramentas gratuitas, como profilers e IDEs alternativas (por exemplo) não é tão grande, além do fato do código de muita coisa ser proprietário, e a MS não abri-lo, nem para consulta.
Como a linguagem é mais nova, há menos APIs de terceiros também (embora o número já seja realmente enorme).

Existem também boas comunidades de .Net, com muita gente interessada, como é o caso da DevBrasil.

Quanto à curva de aprendizado. Ela não será longa se você é um desses caras que ao invés de estudar a tecnologia, estuda conceitos.
Ele aplica conceitos como MVC, IoC, como o Java já aplica, muda apenas a forma.

Agora, assim como o Java há muito o que aprender, portanto, pode esperar muita diversão pela frente.

V

Eu ja estudei esses conceitos todos, mas bem por alto. Acho melhor pegar material pra estudar de novo …
Como estudo Struts2 ja to com uma noção de MVC …
e JPA com IoC …

Vou aceitar , até porque é minha primeira oportunidade de trabalho nessa area …

Ultima duvida , sobre essas outras funcionalidades da plataforma .Net, elas são conceitos ‘adicionais’ de OO ou entendi errado ?

Obrigado a todos pelas dicas …
Ta sendo bem útil (:

V
vitorbtf:
Ultima duvida , sobre essas outras funcionalidades da plataforma .Net, elas são conceitos 'adicionais' de OO ou entendi errado ?

Não são exatamente conceitos da OO, mas facilidades da linguagem. Veja algumas delas:

Properties Propriedades permitem eliminar a sintaxe incômoda dos gets e sets, sem eliminar sua funcionalidade. Por exemplo:
public class Fruta {
   private string nome;
   private double preco;

   public string Nome {
      get {
           return nome;
      }

      set {
           if (value == null)
              throw new ArgumentException("O nome não pode ser nulo!");
           value = value.trim();
           if (value.length == 0)
              throw new ArgumentException("O nome não pode ser branco!");
           nome = value;
       }
   }

   public double Preco {
      get {
         return preco;
      }

      set {
         if (value < 0) throw new ArgumentException("O preço não pode ser negativo!");
         preco = value;
      }
   }
}
Agora podemos simplesmente usar a classe assim:
Fruta fruta = new Fruta();
fruta.Nome = "Maçã"; //Chama o set da propriedade Nome
fruta.Preco = -5.0f; //Chame o set da propriedade preço, que lança argument exception.
Sobrecarga de operadores No C#, você pode fazer com que uma classe funcione com operadores como +, -, * e /. Isso permite, por exemplo, que você use um List assim:
//Inicialização, similar ao java
IList<int> lista = new List<int>();
lista.add(10);
//Uso com operador de []
int x = lista[0]; //x agora vale 10
lista[0] = 5; //Atribui o valor 5 a posição 0 da lista.
O mesmo pode ser feito para classes matemáticas, e classes representando tipos numéricos (como BigInteger e BigDecimal). Compare o código da classe Vector2D feito em Java e em C#:
//Inicialização: Java e C#
Vector2D v1 = new Vector2D(10,20);
Vector2D v2 = new Vector2D(20,50);
Vector2D v3 = new Vector2D(20,50);

//Conta em C#
Vector2D v = 5 * (v1 - v2/2) + v3;
//Conta em java
Vector2D v = v1.subtract(v2.divide(2)).multiply(5).add(v3);
Note que no Java a multiplicação por 5 teve obrigatoriamente de ser invertida, pois o número 5 não teria o método multiply. Sorte que a operação é comutativa. Extension methods Permite que você associe a uma classe um método, mesmo que você não possua seu fonte. Isso só é possível se o método só faz uso da parte pública da classe. Por exemplo, digamos que vc queira fazer um método chamado toCsv(), para qualquer List. No java, você seria obrigado a fazer um método estático:
public class ListUtil {
    public static <T> String toCsv(List<T> lista) {
       StringBuilder sb = new StringBuilder();
       for (T obj : lista) {
         sb.append(obj.toString()).append(",");
        }
        sb.delete(sb.lastIndexOf(","));
    }
}

String csv = ListUtil.toCsv(lista);
No C#, você pode criar um extension method:
public static class ListUtil {
    public static <T> string toCsv(this List<T> lista) {
       StringBuilder sb = new StringBuilder();
       foreach (T obj in lista) {
         sb.Append(obj.ToString()).Append(",");
        }
        sb.Delete(sb.LastIndexOf(","));
    }
}

//E agora chamamos como se toCsv() fosse um método!
String csv = lista.toCsv();

LINQ
Vamos dizer que em Java vc tenha um List, contendo a classe Fruta, que tem no seu atributo nome: "Abóbora", "Limão", "Abóbora", "Maçã", "Pêra", "Caqui", "Limão", "Melância", "Amora".
E para cada um o preço.

E que você queira gerar um outro List, com o nome de todas as frutas que custam menos de R$5,00, sem repetição de nomes, em ordem reversa. Como você faria?

Em java, isso seria a seguinte tarefa tediosa:
1. Criar um TreeSet, usando o String.ReverseComparator como entrada
2. Percorrer a lista de frutas, fazendo um if para localizar todas que custam menos de 10 e copia-las no TreeSet
3. Copiar o TreeSet para uma lista.

No C#, você faz assim:
List<string> frutasBaratas = 
   (from fruta in frutas
   where fruta.Preco < 10
   select distinct fruta.Nome).ToList();

O LINQ também funciona para tabelas de banco de dados e XML.

Partial classes

Não vou entrar em detalhes da sintaxe, mas permite que a mesma classe seja implementado em dois arquivos. Se o Java tivesse isso, o Netbeans poderia pegar todo trecho que ele deixa em azul nas classes do Swing e colocar em um lugar, enquanto você edita um arquivo limpo com o resto da classe em outro.

Cálculo Lambda
Quanto ao lambda. É um recurso que será adicionado ao Java 8, e que já foi adicionado ao C++11, e está há um bom tempo no C#. Trata-se da implementação de closures na linguagem, o que a aproxima do paradigma de programação funcional. Trata-se de outro paradigma e explica-lo levaria um bocado de tempo, mas surgiro que procure sobre o assunto quanto tiver tempo.

Compilação condicional

Já teve algum código que você gostaria que fosse executado apenas se você estivesse em modo debug? Ou que tal algum trecho que não fosse? No C# é possível:

void apagarBaseDeDados() {
   #if TESTE_UNITARIO
      executarSql("ExcluirBaseInteira.sql");
   #else
      throw new ArgumentException("A base de dados só pode ser apagada na compilação de testes unitários!");
   #endif
}

Isso garante que nenhum programador irá acidentalmente apagar a base de dados de produção, nem que um código com esse método poderosíssimo será enviado para o servidor.
Aquele "TESTE_UNITARIO" você configura no seu ambiente de compilação. Se ele não estiver presente, o método apagarBaseDeDados() será compilado apenas com a mensagem de erro.
Se ele estiver presente, aí sim, ele fará a exclusão da base. Note que no assembly final não existe o if. A compilação terá uma coisa ou outra.

Essa diretiva é bem útil quando você quer gerar multiplataforma que interaja com código nativo.

M

Partial classes

Não vou entrar em detalhes da sintaxe, mas permite que a mesma classe seja implementado em dois arquivos. Se o Java tivesse isso, o Netbeans poderia pegar todo trecho que ele deixa em azul nas classes do Swing e colocar em um lugar, enquanto você edita um arquivo limpo com o resto da classe em outro.

Pra mim, isso chama “esconder a sujeira debaixo do tapete”. O Visual Studio gera um código porco, mas como fica escondido em outros arquivos, o pessoal acredita piamente que a aplicação é mais limpa e organizada do que quando usam um plugin visual no eclipse e netbeans.

A

marcosalex:

Pra mim, isso chama “esconder a sujeira debaixo do tapete”. O Visual Studio gera um código porco, mas como fica escondido em outros arquivos, o pessoal acredita piamente que a aplicação é mais limpa e organizada do que quando usam um plugin visual no eclipse e netbeans.

A maior vantagem neste caso é que não é você quem lida com a sujeira, é o Visual Studio.

O maior problema dos geradores de código é dar manutenção depois, mas com esse recurso, você só precisa dar manuntenção no seu próprio código.

M

No netbeans e eclipse também não é você quem lida. A diferença é que você quer ver, só isso.

Mesma coisa, de qualquer forma você só dá manutenção no seu código. A diferença é que você conseguiria ver a qualidade, ou falta dela.

A

Acredito que a diferença vai um pouco além do visual: ver ou não o código.

No java o seu código está misturado com o da interface. Depende da IDE separar para você.
O Netbeans gera um comentário avisando para não mexer e até bloqueia a edição do código gerado por ele.
Mas, novamente, isto é recurso da IDE, não da linguagem.

No .NET são arquivos diferentes. E, pra mim pelo menos, isto faz diferença.
Você poderia usar até outro editor, pois só irá manipular seus arquivos.

Sem falar que esse é apenas o uso comum que a IDE faz para você.
Poderia usar esse recurso em outras situações conforme necessidade.

V

Em resumo, é melhor deixar a sujeira das IDEs embaixo dos tapetes, do que espalhada no meio da sala.
Afinal, seja no Java ou no C#, se você usou uma IDE com geração de código automático, ela sempre vai existir.

M

ViniGodoy:
Em resumo, é melhor deixar a sujeira das IDEs embaixo dos tapetes, do que espalhada no meio da sala.
Afinal, seja no Java ou no C#, se você usou uma IDE com geração de código automático, ela sempre vai existir.

Melhor pra quem? Eu, particularmente, prefiro ver como o código é gerado pra escolher a IDE ou plugin visual que gere código de melhor qualidade. E muita gente que critica os makers da vida, agora defendem o Visual Studio pelos mesmos motivos que atacavam. Essa é a parte cômica da história.

V

Ops… onde foi que falei que o código fica escondido ou inacessível?
Ele fica separado. Você não vai olhar para ele, a menos que queira.

Mas o código do Maker fica lá, em seu projeto, num arquivo separado, mas legível. Você só não precisa deixá-lo misturado com seu próprio código. E fica bastante claro que aquele é um arquivo escrito pela IDE, que você não deveria meter a mão.

Além disso, o C# não impede você de fazer também o código na mão.

M

marcosalex:
Partial classes

Não vou entrar em detalhes da sintaxe, mas permite que a mesma classe seja implementado em dois arquivos. Se o Java tivesse isso, o Netbeans poderia pegar todo trecho que ele deixa em azul nas classes do Swing e colocar em um lugar, enquanto você edita um arquivo limpo com o resto da classe em outro.

Pra mim, isso chama “esconder a sujeira debaixo do tapete”. O Visual Studio gera um código porco, mas como fica escondido em outros arquivos, o pessoal acredita piamente que a aplicação é mais limpa e organizada do que quando usam um plugin visual no eclipse e netbeans.

o visual studio não esconde, ele SEPARA o codigo que vc não deve mecher. O codigo gerado NÃO É SUJO, é gerado apenas o necessario, não tem codigo nem a mais nem a menos.

ja no netbeans, esse metodo de layout é completamente estupido, no VS, DELPHI e C++ BUILDER é completamente mais facil e rapido de fazer. Ja tive varios transtornos com esse negocio de layout, só atrapalha, e não venha falar que é por causa que eu não sei usar, pq não é.

A

Achei a thread interessante, pois me parece que sempre que a plataforma .Net é envolvida no fórum, há alguns comentários mais apaixonados.

Prezado autor do tópico, eu sugiro que voce avalie as condições ($$$) da vaga, é claro, :lol: , mas a questão da tecnologia tem sua importância. Como você alega ser estudante e iniciante no mercado, acho uma ótima porta de entrada, pois o C# é uma linguagem muito boa de se trabalhar. E como voce disse gostar/conhecer mais de Swing, provavelmente irá gostar.

Eu trabalhei alguns anos com VB.NET e com C#, e conheço muito bem ambas. Mas sempre gostei muito mais de Java. No meu último trabalho com C# eu era senior, e troquei de trampo por um salário menor, apenas pra poder trabalhar com Java (graças a Deus já voltei ao meu antigo piso salarial, hehe). A satisfação com o que fazemos é importante tambem…mas no seu caso, em início de carreira, eu iria de cabeça no .NET, e uma vez com mais experiência no que os colegas disseram (conceitos de OO, lógica de programação, etc), fica mais fácil pra você mudar pra qualquer outra tecnologia.

G

Java x .NET (Aff me lembra meus 5 anos quando falava com meu amiguinho o carro do papai é melhor que o do teu)…
Quem são concorrentes são Oracle e Micro$oft, (Oracle só não tem $ no nome pq não tem um ‘s’ ali, não se iludam)

Nós somos os “consumidores”, e não devemos perder tempo em discutir um ou outro, é burrice, temos que explorar o que cada um tem de melhor e ganhar $$ com isso…
(Como ganhar $$, produzindo mais rápido com eficiência)

Amigo aceite o emprego somente se você conseguir se convencer que .NET é tão empolgante quanto Java, te falo que é, mas você tem que acreditar, porque já trabalhei em um local em que não consegui me convencer, mas não era .NET, e foi muito triste esse período.

Adoro Java, mas andei estudando .NET só por curtição, foi por pouco tempo, mas eu percebi que quem gosta de Java irá gostar de .NET, sem dúvida, quem não gosta é por preconceito de empresa proprietária e não por causa da linguagem ou framework, porque as duas são bem parecidas…

Para os defensores SUN:
Uma vez conversando com um amigo sobre Oracle comprar o Java, ele falou que a unica empresa que não ganhou $$ com Java foi a SUN, naquele momento minha ficha caiu, não acreditem que a Oracle irá manter a mesma politica SUN, por que senão morrerá como a mesma… Java está mais parecido com .NET que vocês pensam…

Bom mas isso é só filosofia… rsrsrs

Abraços…

W

Se conselho fosse bom, ng dava de graca. Mas meu, se vc usa a palavra “infelizmente” para uma proposta de emprego, NAO aceite. Continue procurando algo que voce gosta de fazer. Se Java eh a sua linguagem preferida, continue procurando algo em Java.

//Daniel

V

Será que a oferta ficou aberta por 3 meses?

O autor do tópico poderia pelo menos dizer se aceitou o emprego ou não…

M

Se você pretende aprender a desenvolver na plataforma .net, acesse: http://www.msdnbrasil.com.br
faça seu cadastro e comece a participar da comunidade de desenvolvedores microsoft. :wink:

Criado 8 de setembro de 2011
Ultima resposta 12 de dez. de 2011
Respostas 28
Participantes 14