Come sviluppatore C #, impareresti a Java di sviluppare per Android o invece utilizzare MonoDroid? [chiuso]


46

Mi considererei piuttosto esperto in C #. E 'la mia lingua di scelta in questo momento, ed è dove praticamente tutte le mie bugie esperienza professionale.

Tuttavia, sono perplesso dall'esistenza del progetto MonoDroid . La mia comprensione è sempre stata che C # e Java sono molto vicini. Ad esempio, se ne conosci uno, puoi imparare l'altro molto rapidamente. Quindi, dato che ho preso in considerazione lo sviluppo della mia prima app per Android, ho appena pensato che mi sarei familiarizzato con Java abbastanza per iniziare e quindi imparare un po 'come andavo.

Ciò non avrebbe più senso rispetto all'utilizzo di MonoDroid, che è probabilmente meno ricco di funzionalità rispetto all'SDK Android Java e che richiede comunque l'apprendimento della propria API (sebbene un'API .NET)? Sento solo che sarebbe meglio imparare una nuova lingua (e una estremamente popolare in quella) e fare un po 'di esperienza in essa - quando è così vicino a ciò che già conosci comunque - piuttosto che attenersi a una tecnologia che hai sperimentato con, senza acquisire competenze più preziose.

Forse sto gravemente travisando il potenziale utente MonoDroid medio. Forse è più per le persone che hanno esperienza in Java e .NET e preferiscono semplicemente .NET. O forse (in effetti è probabile) ci sono altri fattori che non ho preso in considerazione. Mi sto solo chiedendo, perché dovresti usare MonoDroid invece di sviluppare per Android usando Java?


11
Google la frase "è il nuovo COBOL" e scopri in che lingua viene fornito Google ...
John Reynolds,

1
@JohnReynolds Ironico allora che la crescita più veloce in questo momento è nel cellulare e Android, usando "il nuovo COBOL". Qualunque sia il modo in cui lo tagli, anche se scegli MonoDroid, se stai sviluppando per Android, fai ancora affidamento sul "nuovo COBOL".
Jason S,

1
"il nuovo COBOL" si riferisce alla lingua, non alla VM (sia essa JVM o Dalvik). Quindi MonoDroid non si basa sul "nuovo COBOL" e nemmeno Scala e Clojure o qualsiasi altro linguaggio JVM.
John Reynolds,

C'è ancora una grande quantità del vecchio COBOL ancora in circolazione.
Alan B,

@JohnReynolds La cosa ironica è che la maggior parte del codice che è in esecuzione oggi è COBOL; e il più ironico è il fatto che C # sia un clone di Java (e povero dal momento che ha clonato anche la maggior parte delle cose sbagliate).
m3th0dman,

Risposte:


55

Qualsiasi programmatore C # competente dovrebbe essere in grado di raccogliere rapidamente abbastanza Java per scrivere un programma Android, ma non è questo il punto . È una questione di riutilizzo del codice.

Pensa tra sei mesi, quando il tuo programma Android è popolare e i tuoi utenti chiedono una versione per iPhone e Windows Phone 7. Se hai utilizzato MonoDroid, puoi riutilizzare la maggior parte della logica dell'applicazione con MonoTouch (Mono per iOS) e l'SDK di Windows Phone. Ora vogliono una versione basata sul web, quindi includi le stesse librerie di classi in un progetto ASP.Net. Versioni desktop? Nessun problema, quella stessa libreria di classi funziona con .Net su Windows o Mono su Linux e OS X.

A parte C o C ++, non riesco a pensare ad altri linguaggi che ti permetterebbero di riutilizzare lo stesso codice su tutti quei target.

Modifica per rispondere ad alcune preoccupazioni nei commenti: .Net e Mono non ti permetteranno di scrivere un programma completo e di utilizzare lo stesso programma ovunque. Ti permetteranno di condividere un po 'di codice e, come tutta la programmazione multipiattaforma, la quantità di codice condiviso dipende dal tipo di programmi che stai scrivendo e da quanto bene separi l'interfaccia utente e il codice hardware dalla logica dell'applicazione.

Tuttavia, se scrivi la tua app Android in Java, quanto è riutilizzabile su iOS o Windows Phone? Questo è il punto che stavo cercando di chiarire. Avevo librerie C # esistenti che stavano lavorando su Mono per Android in molto meno tempo di quanto ci sarebbe voluto per reimplementarle, anche se conoscevo già Java . Ho del codice condiviso - non modificato - tra un sito Web, programmi desktop e app mobili su due diverse piattaforme mobili, grazie a Mono.

Non intendevo implicare, neppure indirettamente, che Mono fosse lo strumento perfetto per ogni situazione di sviluppo mobile. È un compromesso, ma credo fermamente che ci siano situazioni in cui Mono è una scelta molto migliore.

Si prega di vedere (e migliorare!) La risposta di Jason S per un'altra prospettiva.


12
E pensavo che Java fosse quello con lo slogan "scrivi una volta eseguito ovunque"!
Luciano,

3
@Luciano - gli stessi argomenti potrebbero essere applicati se l'OP avesse detto di conoscere Java e si chiedeva se imparare C #. Il bit importante è il riutilizzo del codice, non la lingua.
ChrisF

14
Mono è stato scelto in casa per lo stesso motivo. Avevamo bisogno di costruire un client su più piattaforme e tutti i programmatori nuovo c #. In teoria, è stata una grande idea. In pratica, tuttavia, si è trasformato in un po 'un incubo. Abbiamo trovato molti posti in cui il codice che funzionava in una piattaforma .NET nativa non funzionava in una piattaforma MacOS, quindi abbiamo dovuto fare un'eccezione; quindi quello stesso codice non funzionava in LInux. Nel complesso, il mono sembrava troppo instabile. Alla fine, abbiamo dovuto abbandonare l'idea e tornare a scrivere codice nativo per il sistema operativo di destinazione.
Chu,

4
Tuttavia, l'unico codice riutilizzabile è la logica aziendale, non il codice UI o il codice che interagisce con l'hardware del telefono. Vedi che ho un'applicazione MonoTouch o WindowsPhone 7, posso semplicemente ricostruirla con Mono per Android e targetizzare Android? sulle FAQ di MonoDroid.
Jason S,

2
@JasonS, ho aggiornato la mia risposta per rispondere al tuo commento. Per la cronaca, il mio unico coinvolgimento con Xamarin e Mono è come utente soddisfatto.
Kevin,

18

Questa è una specie di risposta supplementare, dal momento che una cosa che sembra essere stata finora trascurata nelle risposte, riguarda ciò che è realmente multipiattaforma. Secondo Xamarin, questa è fondamentalmente la tua logica aziendale, non la tua interfaccia utente o qualsiasi controllo hardware come GPS, audio, rubrica e così via. Questi dovranno essere scritti appositamente per ciascuna piattaforma. Vedi la loro voce FAQ Ho un'applicazione MonoTouch o WindowsPhone 7, posso semplicemente ricostruirla con Mono per Android e targetizzare Android? .

Usando Mono, puoi scrivere la tua UI e il codice di controllo del telefono usando C # ma non sarà portabile su nessuna piattaforma. Dovrai scrivere l'interfaccia utente e il controllo del telefono per ciascuna piattaforma, anche se puoi scriverlo in C #. Ad ogni modo, dovrai ancora imparare le specifiche dei controlli dell'interfaccia utente su Android e come Android gestisce le risorse del telefono.

Usando Mono, dovrai imparare l'API Mono, che chiama l'API Android. Dovrai anche aspettare che Mono attui nuove funzionalità Android e spero che implementino tutte le funzionalità Android. Anche se C # è più potente di Java, non sarai in grado di fare di più che se utilizzi Android SDK direttamente (in Java).

Se stai andando direttamente da C # ad Android, poiché C # è così sintatticamente simile a Java, la maggior parte dell'apprendimento di uno sviluppatore C # per Android imparerà l'API Android.

Alcune considerazioni ...

C # per Android

Bisogno di imparare

  • API Android
  • API Java: gestione stringhe, calendario ed eventi ecc.

Non ho bisogno di imparare

  • Sintassi Java: C # è una sintassi molto simile.

Altre considerazioni

  • Non sarai in grado di riutilizzare il codice su più piattaforme.
  • Non avrai dipendenze tra te e l'SDK di Android. Riceverai nuove funzionalità Android man mano che vengono rilasciate.
  • Probabilmente avrai un supporto maggiore ed esempi per il codice Android rispetto a Mono.

C # a Mono

Bisogno di imparare

  • Android: devi ancora imparare l'interfaccia utente e le funzionalità di controllo hardware di Android.
  • API Mono: devi imparare a chiamare l'API di Mono per fare cose con l'interfaccia utente e l'hardware di Android.

Non ho bisogno di imparare

  • API Java e sintassi: è possibile sviluppare in C #

Altre considerazioni

  • Riutilizzo del codice: è possibile riutilizzare il codice C # che è privo di qualsiasi UI o codice di controllo hardware e quindi è pura "logica aziendale". Sebbene ideale, avere una separazione così pulita non è sempre facile. Dovrai valutare quanta parte del tuo codice non avrà alcuna interfaccia utente o controllo hardware.
  • Dipendenze: dipende dall'implementazione dell'API Android di Mono. Potrebbe esserci un certo ritardo dalle versioni dell'API di Android o alcune funzionalità di Android potrebbero non essere mai implementate.
  • Potresti avere meno documentazione ed esempi tra cui scegliere.

Hai dimenticato di menzionare P / Invoke. Un campione.
Amir Karimi,

-1: cosa intendi Learn the Mono API? Quanto devi sapere per sviluppare un'app Android? E hai davvero provato MonoDroid o stai indovinando?
Jim G.

@JimG. Con Learn the Mono API, voglio dire che hai ancora bisogno di imparare l'API di Android che replica Mono, oltre alle parti non è così. Quanto devi sapere? Dipende dall'app, dipende dalla persona - che non era davvero l'essenza dell'OP. Ho usato MonoDroid? No. Ho esperienza con C #, Java e Objective C, quindi non ne ho bisogno. Ho considerato Mono per portabilità. All'epoca ho risposto che nessuno aveva menzionato i limiti della portabilità. Non mi dispiace che le persone non siano d'accordo con me, ma ciò di per sé non rende la mia risposta scadente.
Jason S,

13

Penso che molto abbia a che fare con le risorse disponibili.

La sintassi in C # e Java può essere simile, ma offrono cose molto diverse. Ad esempio, lavorare con le date usando le librerie Java standard è un incubo, mentre in C # è abbastanza piacevole.


2
Interessante, quindi l'appello riguarda maggiormente l'accesso alle librerie .NET. Ti capita di sapere se .NET offre molte funzionalità utili, relative ad Android, che è più difficile da ottenere con le API Android Java?
Dan Tao,

19
+1 - Venendo da C #, trovo java come ... idiosincratico nella migliore delle ipotesi ...
Oded

4
Trovo che le somiglianze tra C # e Java non siano un vantaggio quando si passa da una all'altra. Posso passare da C # a Python, Ruby o Lua senza battere ciglio, ma l'ultima volta che ho provato a scrivere un codice Java, ho finito per digrignare i denti e girare le ruote.
Adam Crossland,

1
@ Dan Tao: l'appello non riguarda più l' accesso allo standard .Net. Riguarda sia questo che il riutilizzo. Il vantaggio del riutilizzo dovrebbe essere ovvio. Per quanto riguarda l'accesso a .Net, lo guardo in questo modo. Ho usato, diciamo, XDocument 1000 e 1 volte. Se devo scrivere un'app mobile che integra i dati XML da un servizio, lo scrivo alla velocità del pensiero. Se sto imparando Java, potrei facilmente impiegare dalle 4 alle 8 volte (o 10 o 12, chissà) che rimbalzano avanti e indietro tra la codifica e la lettura dei documenti. Se l'uso è per affari, è irresponsabile fare un progetto mentre impari una lingua.
Quentin-starin,

9

Sembra una grande opportunità per l'apprendimento di una nuova lingua , che non credo dovresti lasciar perdere.

Passare da C # a Java è un gioco da ragazzi in quanto si basano sugli stessi concetti. Java è come un sottoinsieme di C #, quindi dovrai disimparare alcune cose (come proprietà e assiemi) e abituarti ad alcune nuove convenzioni, ma soprattutto dovrebbe essere un gioco da ragazzi.


10
E capire le differenze tra il modo in cui i generici funzionano in ciascuno, e chiedersi perché le proprietà non esistono, e gli eventi e ...
Oded

5
Differenze minori Non è che debba imparare Haskell.
Martin Wickman,

1
+1 Nessun danno nel conoscere alcune lingue diverse e avere un progetto del mondo reale su cui lavorare è un ottimo modo per impadronirne una se è un tipo di linguaggio simile a quelli che già conosci.
glenatron,

Meglio assicurarsi che la persona che paga sia ok pagando per un'esperienza di apprendimento.
Quentin-starin,

1
@qes - Imparare qualcosa che è ridondante non è un motivo sufficiente per giustificare i costi nella maggior parte dei casi, ma lo sviluppo di un'app complessa nel suo ambiente nativo andrà più agevolmente per la maggior parte del tempo e ciò potrebbe rendere l'apprendimento più riduzioni dei costi a lungo termine.
Morgan Herlocker,

3

Breve lezione di storia - MonoDroid è cresciuto da MonoTouch. Aveva molto senso in quel momento. Sfortunatamente, Novell fu venduta e l'intero team Mono fu licenziato. La buona notizia è che Miguel de Icaza ha ottenuto finanziamenti e ha iniziato un nuovo vestito per ricostruire ciò che era MonoTouch / MonoDroid. Quindi sei un po 'in un limbo fino a quando non si lanciano davvero.

Aggiornamento luglio 2011: l'outfit di Miguel ha riacquistato i diritti su tutto lo stack Mono *. Prendi mentre è falco.


Buono a sapersi (aggiornamento di luglio 2011). Avevo provato Mono prima e l'ho trovato un po 'deludente. Ci proverò ancora!
Brian Knoblauch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.