Sebagai pengembang C #, apakah Anda akan belajar Java untuk mengembangkan untuk Android atau menggunakan MonoDroid? [Tutup]

46

Saya akan menganggap diri saya cukup berpengalaman dalam C #. Ini bahasa pilihan saya saat ini, dan di situlah semua pengalaman profesional saya berada.

Tetap saja, saya bingung dengan keberadaan proyek MonoDroid . Pemahaman saya selalu bahwa C # dan Java sangat dekat. Seperti, jika Anda tahu satu, Anda dapat belajar yang lain dengan sangat cepat. Jadi, karena saya telah mempertimbangkan untuk mengembangkan aplikasi Android pertama saya, saya hanya berasumsi bahwa saya akan cukup membiasakan diri dengan Java untuk memulai dan kemudian hanya belajar seperti yang saya lakukan.

Bukankah ini lebih masuk akal daripada menggunakan MonoDroid, yang sepertinya kurang kaya fitur daripada Java Android SDK, dan bagaimanapun juga memerlukan mempelajari API-nya sendiri (walaupun. NET API)? Saya hanya merasa akan lebih baik untuk belajar bahasa baru (dan yang sangat populer saat itu) dan mendapatkan beberapa pengalaman di dalamnya — ketika itu sangat dekat dengan apa yang sudah Anda ketahui — daripada bertahan dengan teknologi yang Anda alami. dengan, tanpa memperoleh keterampilan yang lebih berharga.

Mungkin saya salah mengartikan potensi pengguna MonoDroid rata-rata. Mungkin lebih untuk orang-orang yang berpengalaman di Jawa dan .NET dan lebih suka. NET. Atau mungkin (sebenarnya kemungkinan) ada faktor-faktor lain yang belum saya pertimbangkan. Saya hanya ingin tahu, mengapa Anda menggunakan MonoDroid daripada hanya mengembangkan untuk Android menggunakan Java?

Dan Tao
sumber
11
Google frasa "adalah COBOL baru" dan lihat bahasa apa yang muncul dari google ...
John Reynolds
1
@JohnReynolds Ironic, maka pertumbuhan tercepat saat ini adalah di seluler dan Android, menggunakan "COBOL baru". Apa pun cara Anda mengirisnya, bahkan jika Anda memilih MonoDroid, jika Anda mengembangkan untuk Android, Anda masih mengandalkan "COBOL baru".
Jason S
1
"COBOL baru" mengacu pada bahasa, bukan VM (baik itu JVM atau Dalvik). Jadi MonoDroid tidak bergantung pada "COBOL baru" dan begitu pula Scala dan Clojure atau bahasa JVM lainnya.
John Reynolds
Masih banyak COBOL lama yang masih ada.
Alan B
@ JohnReynolds Ironisnya adalah bahwa sebagian besar kode yang berjalan hari ini adalah COBOL; dan yang paling ironis adalah kenyataan bahwa C # adalah klon dari Jawa (dan yang miskin karena mengkloning sebagian besar hal yang salah juga).
m3th0dman

Jawaban:

55

Setiap programmer C # yang kompeten harus dapat dengan cepat mengambil cukup Java untuk menulis program Android, tapi bukan itu intinya . Ini masalah penggunaan kembali kode.

Pikirkan enam bulan dari sekarang, ketika program Android Anda populer dan pengguna Anda meminta versi untuk iPhone dan Windows Phone 7. Jika Anda telah menggunakan MonoDroid, Anda dapat menggunakan kembali sebagian besar logika aplikasi Anda dengan MonoTouch (Mono untuk iOS) dan Windows Phone SDK. Sekarang mereka menginginkan versi berbasis web, jadi Anda memasukkan pustaka kelas yang sama dalam proyek ASP.Net. Versi desktop? Tidak masalah, pustaka kelas yang sama berfungsi dengan .Net di bawah Windows atau Mono di Linux dan OS X.

Selain C atau C ++, saya tidak bisa memikirkan bahasa lain yang memungkinkan Anda menggunakan kembali kode yang sama pada semua target itu.

Sunting untuk mengatasi beberapa kekhawatiran dalam komentar: .Net dan Mono tidak akan membiarkan Anda menulis program lengkap dan menggunakan program yang sama di mana-mana. Mereka akan membiarkan Anda berbagi beberapa kode, dan seperti semua pemrograman lintas platform, jumlah kode bersama tergantung pada jenis program yang Anda tulis dan seberapa baik Anda memisahkan UI dan kode perangkat keras dari logika aplikasi.

Namun, jika Anda menulis aplikasi Android di Java, berapa banyak yang dapat digunakan kembali di iOS atau Windows Phone? Itulah yang ingin saya sampaikan. Saya memiliki perpustakaan C # yang bekerja pada Mono untuk Android dalam waktu yang jauh lebih singkat daripada yang diperlukan untuk mengimplementasikannya kembali, meskipun saya sudah mengenal Java . Saya memiliki beberapa kode yang dibagikan - tidak dimodifikasi - antara situs web, program desktop, dan aplikasi seluler pada dua platform seluler yang berbeda, terima kasih kepada Mono.

Saya tidak bermaksud mengatakan, bahkan secara tidak langsung, bahwa Mono adalah alat yang sempurna untuk setiap situasi pengembangan ponsel. Ini pertukaran, tetapi saya sangat yakin bahwa ada situasi ketika Mono adalah pilihan yang jauh lebih baik.

Silakan lihat (dan ingat!) Jawaban Jason S untuk perspektif lain.

Kevin
sumber
12
Dan saya pikir Java adalah slogan "tulis sekali pakai di mana-mana"!
Luciano
3
@Luciano - argumen yang sama dapat diterapkan jika OP mengatakan dia tahu Jawa seperti bertanya-tanya apakah akan belajar C #. Bit yang penting adalah penggunaan kembali kode, bukan bahasa.
ChrisF
14
Mono dipilih untuk alasan yang sama. Kami perlu membangun klien di berbagai platform dan semua coders c # baru. Secara teori, itu ide bagus. Namun dalam praktiknya, itu telah berubah menjadi sedikit mimpi buruk. Kami menemukan banyak tempat di mana kode yang bekerja di platform .NET asli tidak akan berfungsi di platform MacOS, jadi kami harus membuat pengecualian; maka kode yang sama tidak berfungsi di LInux. Secara keseluruhan, mono tampak terlalu tidak stabil. Pada akhirnya, kami harus meninggalkan ide dan kembali menulis kode asli untuk OS yang ditargetkan.
Chu
4
Namun, satu-satunya kode yang dapat digunakan kembali adalah logika bisnis, bukan kode UI atau kode yang berinteraksi dengan perangkat keras ponsel. Lihat saya punya aplikasi MonoTouch atau WindowsPhone 7, dapatkah saya membangunnya kembali dengan Mono untuk Android dan menargetkan Android? pada FAQ MonoDroid.
Jason S
2
@JasonS, saya telah memperbarui jawaban saya untuk menanggapi komentar Anda. Sebagai catatan, satu-satunya keterlibatan saya dengan Xamarin dan Mono adalah sebagai pengguna yang puas.
Kevin
18

Ini adalah semacam jawaban tambahan, karena satu hal yang tampaknya telah diabaikan dalam jawaban sejauh ini, menyangkut apa yang sebenarnya lintas platform. Menurut Xamarin sendiri yang pada dasarnya adalah logika bisnis Anda, bukan UI Anda atau kontrol perangkat keras apa pun seperti GPS, audio, buku alamat, dan sebagainya. Itu harus ditulis khusus untuk setiap platform. Lihat entri FAQ mereka Saya memiliki aplikasi MonoTouch atau WindowsPhone 7, dapatkah saya membangunnya kembali dengan Mono untuk Android dan menargetkan Android? .

Dengan menggunakan Mono, Anda dapat menulis UI dan kode kontrol telepon menggunakan C # tetapi tidak akan portabel untuk platform apa pun. Anda harus menulis UI dan kontrol telepon untuk setiap platform, meskipun Anda dapat menulisnya dalam C #. Either way, Anda masih harus mempelajari secara spesifik kontrol UI pada Android dan bagaimana Android menangani sumber daya ponsel.

Dengan menggunakan Mono, Anda harus mempelajari Mono API, yang memanggil ke dalam API Android. Anda juga harus menunggu Mono untuk mengimplementasikan fitur Android baru dan berharap mereka mengimplementasikan semua fitur Android. Bahkan jika C # lebih kuat daripada Java, Anda tidak akan dapat melakukan lebih dari jika Anda menggunakan Android SDK secara langsung (di Jawa).

Jika Anda langsung beralih dari C # ke Android, karena C # secara sintaksis mirip dengan Java, maka sebagian besar pembelajaran pengembang C # untuk Android akan mempelajari API Android.

Beberapa pertimbangan ...

C # ke Android

Perlu Belajar

  • API Android
  • Java API: String, Kalender dan penanganan acara dll.

Tidak perlu belajar

  • Sintaks Java: C # adalah sintaks yang sangat mirip.

Pertimbangan lainnya

  • Anda tidak akan dapat menggunakan kembali kode lintas platform.
  • Anda tidak akan memiliki dependensi antara Anda dan Android SDK. Anda akan mendapatkan fitur Android baru saat dirilis.
  • Anda mungkin akan memiliki dukungan dan contoh kode Android yang lebih besar daripada Mono.

C # ke Mono

Perlu Belajar

  • Android: Anda masih perlu mempelajari UI Android dan fitur kontrol perangkat keras.
  • Mono API: Anda harus belajar cara memanggil Mono API untuk melakukan hal-hal dengan UI dan perangkat keras Android.

Tidak perlu belajar

  • API Java dan sintaks: Anda dapat mengembangkan di C #

Pertimbangan lainnya

  • Gunakan kembali kode: Anda dapat menggunakan kembali kode C # yang tidak memiliki UI atau kode kontrol perangkat keras apa pun sehingga murni "logika bisnis". Meskipun ideal, memiliki pemisahan yang bersih tidak selalu mudah. Anda harus mengevaluasi seberapa banyak kode Anda tidak akan memiliki UI atau kontrol perangkat keras.
  • Ketergantungan: Anda bergantung pada Mono yang mengimplementasikan API Android. Mungkin ada beberapa kelambatan dari rilis API Android atau beberapa fitur Android mungkin tidak pernah diterapkan.
  • Anda mungkin memiliki lebih sedikit dokumentasi dan contoh untuk dipilih.
Jason S
sumber
Anda lupa menyebutkan P / Invoke. Sebuah sampel.
Amir Karimi
-1: Apa maksudmu Learn the Mono API? Berapa banyak yang sebenarnya perlu Anda ketahui untuk mengembangkan aplikasi Android? Dan apakah Anda benar-benar mencoba MonoDroid atau Anda menebak?
Jim G.
@ Jim. Oleh Learn the Mono API, saya berarti bahwa Anda masih perlu mempelajari API Android yang Mono ulangan, selain bagian-bagian itu tidak. Seberapa banyak yang perlu Anda ketahui? Tergantung pada aplikasinya, tergantung orangnya - itu bukan inti dari OP. Sudahkah saya menggunakan MonoDroid? Tidak. Saya punya pengalaman C #, Java dan Objective C, jadi tidak perlu. Saya memang mempertimbangkan Mono untuk portabilitas. Pada saat itu saya menjawab tidak ada yang menyebutkan batas portabilitas. Saya tidak keberatan orang tidak setuju dengan saya, tetapi itu saja tidak membuat jawaban saya miskin.
Jason S
13

Saya pikir banyak yang harus dilakukan dengan sumber daya yang tersedia.

The sintaks di C # dan Java mungkin mirip, tetapi mereka menawarkan hal-hal yang sangat berbeda. Misalnya, bekerja dengan tanggal menggunakan perpustakaan Java standar adalah mimpi buruk, sedangkan di C # itu cukup menyenangkan.

Corey
sumber
2
Menarik — jadi bandingnya adalah tentang mendapatkan akses ke perpustakaan .NET. Apakah Anda tahu jika .NET menawarkan banyak fungsionalitas yang nyaman, relevan dengan Android, yang lebih sulit dicapai dengan Java Android API?
Dan Tao
19
+1 - Berasal dari C #, saya rasa java menjadi ... idiosyncratic at best ...
Oded
4
Saya menemukan bahwa kesamaan antara C # dan Java tidak menguntungkan ketika beralih di antara mereka. Saya dapat beralih antara C # dan Python, Ruby atau Lua tanpa berkedip, tetapi terakhir kali saya mencoba melakukan beberapa kode Java, saya akhirnya menggertakkan gigi dan memutar roda.
Adam Crossland
1
@ Dan Tao: banding tidak lebih tentang akses ke standar Net. Ini tentang itu dan digunakan kembali. Manfaat penggunaan kembali harus jelas. Adapun akses ke .Net, saya melihatnya dengan cara ini. Saya telah menggunakan, katakanlah, XDocument 1000 dan 1 kali. Jika saya perlu menulis aplikasi seluler yang mengintegrasikan data XML dari layanan, saya menulisnya dengan kecepatan pemikiran. Jika saya belajar Java, saya bisa dengan mudah memakan waktu 4 hingga 8 kali (atau 10 atau 12, siapa tahu) yang bolak-balik antara coding dan membaca dokumen. Jika penggunaannya untuk bisnis, tidak bertanggung jawab untuk melakukan proyek sambil belajar bahasa.
quentin-starin
9

Sepertinya ini adalah kesempatan bagus untuk belajar bahasa baru , yang saya pikir Anda tidak boleh melewatkannya.

Pergi dari C # ke Jawa sangat mudah karena mereka didasarkan pada konsep yang sama. Java seperti subset dari C #, jadi Anda harus menghapus beberapa hal (seperti properti dan rakitan) dan membiasakan diri dengan beberapa konvensi baru, tetapi sebagian besar harus menjadi no-brainer.

Martin Wickman
sumber
10
Dan mencari tahu perbedaan antara bagaimana obat generik bekerja di masing-masing, dan bertanya-tanya mengapa properti tidak ada, dan peristiwa dan ...
Oded
5
Perbedaan kecil. Bukannya dia harus belajar Haskell.
Martin Wickman
1
+1 Tidak ada salahnya mengetahui beberapa bahasa yang berbeda dan memiliki proyek dunia nyata untuk dikerjakan adalah cara yang bagus untuk memahami satu jika itu sejenis bahasa dengan yang Anda sudah tahu.
glenatron
Lebih baik pastikan orang yang membayar ok membayar untuk pengalaman belajar.
quentin-starin
1
@ qes - Mempelajari sesuatu yang berlebihan tidak cukup menjadi alasan untuk membenarkan biaya dalam banyak kasus, tetapi pengembangan aplikasi yang kompleks di lingkungan asalnya akan berjalan lebih lancar sebagian besar waktu, dan itu bisa membuat pembelajaran memiliki lebih banyak pengurangan biaya jangka panjang.
Morgan Herlocker
3

Pelajaran sejarah cepat - MonoDroid tumbuh dari MonoTouch. Dibuat banyak akal pada saat itu. Sayangnya, Novell dijual dan seluruh tim Mono di-PHK. Berita baiknya adalah Miguel de Icaza mendapatkan pendanaan dan telah memulai pakaian baru untuk membangun kembali apa yang disebut MonoTouch / MonoDroid. Jadi Anda agak limbo sampai mereka benar-benar diluncurkan.

Pembaruan Juli 2011: Pakaian Miguel telah mendapatkan kembali hak atas seluruh tumpukan Mono *. Dapatkan saat masih hawt.

Wyatt Barnett
sumber
Senang mendengar (Pembaruan Juli 2011). Saya sudah mencoba Mono sebelumnya dan merasa sedikit mengecewakan. Saya akan coba lagi!
Brian Knoblauch