Como desenvolvedor de C #, você aprenderia Java a desenvolver para Android ou usar o MonoDroid? [fechadas]


46

Eu me consideraria muito bem versado em c #. É a minha língua preferida no momento e é onde basicamente reside toda a minha experiência profissional.

Ainda assim, estou intrigado com a existência do projeto MonoDroid . Meu entendimento sempre foi que C # e Java são muito próximos. Por exemplo, se você conhece um, pode aprender o outro rapidamente. Então, como eu considerei desenvolver meu primeiro aplicativo para Android, presumi que me familiarizaria com o Java o suficiente para começar e, em seguida, apenas aprender.

Isso não faria mais sentido do que usar o MonoDroid, que provavelmente é menos rico em recursos do que o Java Android SDK e requer aprendizado de sua própria API (embora uma API .NET)? Eu apenas sinto que seria melhor aprender um novo idioma (e um extremamente popular nesse sentido) e obter alguma experiência nele - quando é tão próximo do que você já sabe de qualquer maneira - em vez de usar a tecnologia que você possui com, sem adquirir habilidades mais valiosas.

Talvez eu esteja deturpando grosseiramente o potencial usuário médio do MonoDroid. Talvez seja mais para pessoas com experiência em Java e .NET e que preferem o .NET. Ou talvez (na verdade, é provável) haja outros fatores que simplesmente não considerei. Só estou pensando, por que você usaria o MonoDroid em vez de apenas desenvolver para Android usando Java?


11
Google a frase "é o novo COBOL" e ver o que google linguagem surge com ...
John Reynolds

1
@JohnReynolds Ironic, então, que o crescimento mais rápido no momento está no celular e no Android, usando "o novo COBOL". Seja como for, mesmo que você escolha o MonoDroid, se estiver desenvolvendo para o Android, ainda estará confiando no "novo COBOL".
Jason S

1
"o novo COBOL" refere-se ao idioma, não à VM (seja JVM ou Dalvik). Portanto, o MonoDroid não conta com "o novo COBOL" e Scala e Clojure ou qualquer outro idioma da JVM.
John Reynolds

Ainda existe uma grande quantidade de COBOL antigo por aí.
Alan B

@JohnReynolds O irônico é que a maior parte do código que está sendo executado hoje é COBOL; e o mais irônico é o fato de o C # ser um clone de Java (e um pobre, pois também clonou a maioria das coisas erradas).
M3th0dman 28/03

Respostas:


55

Qualquer programador C # competente deve conseguir rapidamente o Java suficiente para escrever um programa Android, mas esse não é o ponto . É uma questão de reutilização de código.

Pense daqui a seis meses, quando seu programa Android for popular e seus usuários solicitarem uma versão para iPhone e Windows Phone 7. Se você usou o MonoDroid, poderá reutilizar a maior parte da lógica de seu aplicativo com o MonoTouch (Mono para iOS) e o Windows Phone SDK. Agora, eles querem uma versão baseada na Web, para incluir as mesmas bibliotecas de classes em um projeto ASP.Net. Versões de desktop? Não tem problema, essa mesma biblioteca de classes funciona com .Net no Windows ou Mono no Linux e OS X.

Além de C ou C ++, não consigo pensar em nenhuma outra linguagem que permita reutilizar o mesmo código em todos esses destinos.

Edite para abordar algumas preocupações nos comentários: .Net e Mono não permitirão que você escreva um programa completo e use o mesmo programa em qualquer lugar. Eles permitem que você compartilhe algum código e, como toda programação de plataforma cruzada, a quantidade de código compartilhado depende do tipo de programa que você está escrevendo e de quão bem você separa a interface do usuário e o código de hardware da lógica do aplicativo.

No entanto, se você escrever seu aplicativo Android em Java, quanto disso é reutilizável no iOS ou no Windows Phone? Esse é o ponto que eu estava tentando enfatizar. Eu tinha bibliotecas C # existentes que estavam trabalhando no Mono para Android em muito menos tempo do que seria necessário para reimplementá-las, mesmo que eu já conhecesse Java . Eu tenho algum código que é compartilhado - não modificado - entre um site, programas de desktop e aplicativos móveis em duas plataformas móveis diferentes, graças ao Mono.

Não pretendia sugerir, nem indiretamente, que o Mono fosse a ferramenta perfeita para todas as situações de desenvolvimento móvel. É uma troca, mas acredito firmemente que há situações em que o Mono é uma escolha muito melhor.

Por favor, veja (e vote!) A resposta de Jason S para outra perspectiva.


12
E eu pensei que era o Java que tinha o slogan "escrever uma vez, execute todos os lugares"!
Luciano

3
@ Luciano - os mesmos argumentos poderiam ser aplicados se o OP dissesse que conhecia Java, e estava pensando em aprender C #. O importante é a reutilização do código, não o idioma.
ChrisF

14
Mono foi escolhido em casa pelo mesmo motivo. Precisávamos criar um cliente em várias plataformas e todos os codificadores em novo c #. Em teoria, foi uma ótima ideia. Na prática, no entanto, tornou-se um pesadelo. Encontramos muitos lugares onde o código que funcionava em uma plataforma .NET nativa não funcionava em uma plataforma MacOS; portanto, tivemos que fazer uma exceção; então esse mesmo código não funcionou no Linux. No geral, o mono parecia muito instável. No final, tivemos que abandonar a ideia e voltar a escrever código nativo para o sistema operacional alvo.
Chu

4
Ainda assim, o único código reutilizável é a lógica comercial, não o código da interface do usuário ou o código que interage com o hardware do telefone. Veja que eu tenho um aplicativo MonoTouch ou WindowsPhone 7, posso apenas reconstruí-lo com o Mono para Android e segmentar o Android? no FAQ do MonoDroid.
Jason S

2
@ Jason, atualizei minha resposta para abordar seu comentário. Para constar, meu único envolvimento com Xamarin e Mono é como um usuário satisfeito.
Kevin

18

Esse é um tipo de resposta suplementar, já que uma coisa que parece ter sido negligenciada nas respostas até agora diz respeito ao que é realmente multiplataforma. De acordo com o próprio Xamarin, essa é basicamente sua lógica comercial, não sua interface do usuário ou qualquer controle de hardware, como GPS, áudio, catálogo de endereços etc. Esses terão que ser escritos especificamente para cada plataforma. Veja a entrada de perguntas frequentes. Tenho um aplicativo MonoTouch ou WindowsPhone 7. Posso apenas reconstruí-lo com o Mono para Android e segmentar o Android? .

Usando o Mono, você pode escrever sua interface do usuário e o código de controle do telefone usando C #, mas não será portátil em nenhuma plataforma. Você precisará escrever a interface do usuário e o controle do telefone para cada plataforma, mesmo que você possa escrevê-lo em C #. De qualquer forma, você ainda precisará aprender as especificidades dos controles de interface do usuário no Android e como o Android lida com os recursos do telefone.

Usando o Mono, você precisará aprender a API Mono, que chama a API do Android. Você também terá que esperar o Mono implementar novos recursos do Android e esperar que eles implementem todos os recursos do Android. Mesmo se o C # for mais poderoso que o Java, você não poderá fazer mais do que se usar o Android SDK diretamente (em Java).

Se você vai diretamente do C # para o Android, como o C # é tão sintaticamente semelhante ao Java, a maior parte do aprendizado de um desenvolvedor de C # para Android aprenderá a API do Android.

Algumas considerações ...

C # para Android

Precisa aprender

  • API do Android
  • API Java: String, calendário e manipulação de eventos etc.

Não precisa aprender

  • Sintaxe Java: C # é uma sintaxe muito semelhante.

Outras considerações

  • Você não poderá reutilizar o código entre plataformas.
  • Você não terá nenhuma dependência entre você e o SDK do Android. Você receberá novos recursos do Android assim que forem lançados.
  • Você provavelmente terá mais suporte e exemplos para código Android do que o Mono.

C # para Mono

Precisa aprender

  • Android: você ainda precisa aprender os recursos de controle de interface do usuário e de hardware do Android.
  • API Mono: você precisa aprender a chamar a API do Mono para fazer coisas com a interface do usuário e o hardware do Android.

Não precisa aprender

  • API Java e sintaxe: você pode desenvolver em C #

Outras considerações

  • Reutilizar código: você pode reutilizar o código C # desprovido de qualquer interface de usuário ou código de controle de hardware e, portanto, é pura "lógica de negócios". Embora ideal, ter uma separação tão limpa nem sempre é fácil. Você terá que avaliar quanto do seu código não terá nenhum controle de interface do usuário ou hardware.
  • Dependências: você depende do Mono implementar a API do Android. Pode haver algum atraso nas versões da API do Android ou alguns recursos do Android podem nunca ser implementados.
  • Você pode ter menos documentação e exemplos para escolher.

Você esqueceu de mencionar P / Invoke. Uma amostra.
Amir Karimi

-1: Como assim Learn the Mono API? Quanto você realmente precisa saber para desenvolver um aplicativo Android? E você realmente tentou o MonoDroid ou está adivinhando?
Jim G.

@JimG. Por Learn the Mono API, quero dizer que você ainda precisa aprender a API do Android que o Mono replica, além das partes que não. Quanto você precisa saber? Depende do aplicativo, depende da pessoa - essa não era a essência do OP. Eu usei o MonoDroid? Não. Eu tenho experiência em C #, Java e Objective C, então não há necessidade. Eu considerei o Mono para portabilidade. Na época em que respondi, ninguém havia mencionado os limites da portabilidade. Não me importo de as pessoas discordarem de mim, mas isso por si só não torna minha resposta ruim.
23713 Jason S

13

Eu acho que muito disso tem a ver com os recursos disponíveis.

A sintaxe em C # e Java pode ser semelhante, mas eles oferecem coisas muito diferentes. Por exemplo, trabalhar com datas usando bibliotecas Java padrão é um pesadelo, enquanto em C # é bastante agradável.


2
Interessante - portanto, o apelo é mais sobre como obter acesso às bibliotecas .NET. Você sabe se o .NET oferece muitas funcionalidades convenientes, relevantes para o Android, mais difíceis de alcançar com as APIs do Java Android?
Dan Tao

19
+1 - Vindo de C #, acho java para ser ... idiossincrática no melhor ...
Oded

4
Acho que as semelhanças entre C # e Java não são uma vantagem ao alternar entre elas. Posso alternar entre C # e Python, Ruby ou Lua sem piscar, mas na última vez que tentei codificar Java, acabei rangendo os dentes e girando as rodas.
Adam Crossland 01/01

1
@ Dan Tao: o apelo não é mais sobre o acesso ao padrão .Net. É sobre isso e reutilizar. O benefício da reutilização deve ser óbvio. Quanto ao acesso ao .Net, eu vejo dessa maneira. Eu usei, digamos, o XDocument 1000 e 1 vezes. Se eu precisar escrever um aplicativo móvel que integre dados XML de um serviço, eu o escrevo na velocidade do pensamento. Se eu estou aprendendo Java, eu poderia facilmente levar de 4 a 8 vezes mais (ou 10 ou 12, quem sabe) pulando para frente e para trás entre codificação e leitura de documentos. Se o uso é para negócios, é irresponsável fazer um projeto enquanto aprende um idioma.
você precisa

9

Parece uma ótima oportunidade para aprender um novo idioma , que eu acho que você não deve deixar passar.

Ir de C # para Java é fácil, pois eles são baseados nos mesmos conceitos. Java é como um subconjunto de C #, então você terá que desaprender algumas coisas (como propriedades e montagens) e se acostumar com algumas novas convenções, mas principalmente deve ser um acéfalo.


10
E descobrir as diferenças entre a forma como os genéricos trabalhar em cada um, e me pergunto por propriedades não existem, e eventos e ...
Oded

5
Pequenas diferenças. Não é como se ele tivesse que aprender Haskell.
Martin Wickman

1
+1 Não faz mal conhecer alguns idiomas diferentes e ter um projeto do mundo real para trabalhar, é uma ótima maneira de pegar o jeito, se for um idioma semelhante ao que você já conhece.
glenatron

Melhor garantir que a pessoa que está pagando está bem pagando por uma experiência de aprendizado.
Quentin-starin

1
@qes - Aprender algo redundante não é motivo suficiente para justificar custos na maioria dos casos, mas o desenvolvimento de um aplicativo complexo em seu ambiente nativo será mais tranquilo na maioria das vezes, e isso pode fazer com que o aprendizado tenha mais reduções de custos a longo prazo.
Morgan Herlocker

3

Lição de história rápida - o MonoDroid cresceu a partir do MonoTouch. Fez muito sentido na época. Infelizmente, a Novell foi vendida e toda a equipe Mono foi demitida. A boa notícia é que Miguel de Icaza garantiu financiamento e iniciou uma nova equipe para reconstruir o que era o MonoTouch / MonoDroid. Então você está no limbo até que eles realmente sejam lançados.

Atualização de julho de 2011: A roupa de Miguel recuperou os direitos de toda a pilha Mono *. Obtenha enquanto está hawt.


É bom ouvir (atualização de julho de 2011). Eu já havia experimentado o Mono antes e achei um pouco decepcionante. Vou tentar outra vez!
Brian Knoblauch
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.