Apa yang akan Anda pilih untuk proyek Anda antara .NET dan Java pada saat ini? [Tutup]


13

Anda baru saja memulai proyek baru dan Anda memiliki dua teknologi ini untuk dipilih, Java dan .NET. Proyek yang sedang Anda kerjakan tidak melibatkan memiliki fitur yang akan membuatnya mudah untuk memilih antara dua teknologi (mis. NET memiliki ini yang saya butuhkan dan Java tidak) dan keduanya harus bekerja dengan baik untuk Anda (meskipun Anda hanya butuh satu tentu saja). Memperhitungkan:

  • Performa
  • Alat yang tersedia (bahkan alat pihak ketiga)
  • Kompatibilitas lintas platform
  • Perpustakaan (terutama perpustakaan pihak ketiga)
  • Biaya (Oracle tampaknya mencoba dan memonetisasi Java)
  • Proses pengembangan (termudah / tercepat)

Juga perlu diingat bahwa Linux bukan platform utama Anda, tetapi Anda ingin port proyek Anda ke Linux / MacO juga. Anda pasti harus mengingat masalah yang telah berputar di sekitar Oracle dan komunitas Java dan keterbatasan Mono dan Java juga. Akan sangat dihargai jika orang-orang dengan pengalaman dalam keduanya dapat memberikan ikhtisar dan pandangan subjektif mereka sendiri tentang apa yang akan mereka pilih dan mengapa.

java  .net  mono 

Tidak ada informasi yang cukup tentang persyaratan untuk secara efektif menjawab pertanyaan ini.
red-kotoran

3
Mono terasa menyebalkan (mis. Waktu tenggelam). Bahkan desainer WinForm dasar tidak ada di sana.
Pekerjaan

@Job sebenarnya, MonoDevelop memiliki desainer GUI untuk GTK #, karena WinForms belum open source.
Mahmoud Hossam

Ya, tetapi bagaimana Mono dengan perpustakaan pihak ketiga? Apakah mereka "hanya bekerja"? Dan (mungkin yang paling penting) apakah vendor memberikan dukungan jika Anda menggunakannya dengan Mono?
TMN

Jawaban:


26

Keputusan terpenting (edit: teknis) adalah:

  • Akankah Anda pada saat ini berkomitmen 100% untuk menggunakan Windows sebagai platform penyebaran masa depan Anda?

Jika tidak, maka Anda harus menggunakan Java.


Kesimpulan dari Mono sering digunakan untuk mengatakan "Ya, .NET adalah cross-platform". Seberapa valid klaim itu? adalah bahwa Mono hanyalah opsi IFF yang Anda kembangkan untuk melawannya!

Anda tidak dapat mengharapkan aplikasi .NET untuk bekerja di luar kotak.


@ Basic mengatakan bahwa ini lebih merupakan komentar daripada jawaban. Untuk lebih tepatnya saya menganggapnya sebagai pertanyaan untuk pergi di atas daftar, karena ini mungkin keputusan teknis paling penting yang perlu Anda lakukan ketika berhadapan dengan .NET. Seperti yang dikatakan Basic, ia akan menguji Mono, maka itu tidak mungkin, dan saya akan menganggap Java dan .NET cukup cocok. Saya memiliki sedikit pengalaman dengan .NET, tetapi sedikit di Jawa.

  • Kinerja - Java berjalan cukup baik, tetapi masih memiliki sedikit waktu startup. Ini karena JVM mulai dari awal ketika diinisialisasi, dan akses acak dari file jar perpustakaan runtime agak lambat ketika perlu dibaca dari disk. Java 6 terbaru memiliki proses latar belakang untuk mencoba menyimpan file jar perpustakaan runtime di cache disk sehingga akses cepat saat diperlukan.

  • Alat tersedia. Ada banyak alat, dan ada banyak tersedia sebagai Open Source berkualitas tinggi. IBM memiliki beberapa alat yang sangat canggih tersedia, tetapi mereka juga mengambil cukup banyak uang untuk itu. Anda mungkin ingin melihat MyEclipse yang mencari nafkah dari mengumpulkan bagian-bagian terbaik di dunia Jawa dan membuatnya dapat diakses dengan biaya rendah, untuk melihat apa yang tersedia. Netbeans memiliki editor GUI yang sangat bagus. JDeveloper memiliki debugger Swing yang bagus. Sun 6 JDK memiliki VisualVM yang merupakan profiler entry level yang bagus yang dapat menganalisis program yang sudah berjalan (yang merupakan fitur pembunuh).

  • Kompatibilitas lintas platform. Sangat bagus, cenderung sangat baik. JVM sangat, sangat andal, dan dapat diprediksi. Masalah hanya muncul ketika perbedaan sistem operasi merembes dalam pemisah file seperti, sensitivitas nama file kasus dan perilaku menu.

  • Perpustakaan. Ada banyak dan banyak dari mereka yang tersedia secara bebas dan dapat digunakan, tetapi terutama ditulis di Jawa karena agak sulit untuk menarik kode yang ditulis dalam bahasa non-JVM.

  • Biaya. Java pada dasarnya tersedia secara gratis. Apa yang ditunjukkan Oracle adalah bahwa alat-alat listrik - kemungkinan besar berasal dari JRocket - akan dikenakan biaya. Perhatikan juga bahwa dukungan yang diberikan ("Java for Business") juga dikenakan harga. Platform non-x86 adalah jenis yang sekarat, tetapi IBM memiliki banyak dan IBM menyediakan implementasi Java yang sangat baik untuk mereka. Ini dihargai sebagai bagian dari sistem operasi - kemungkinan besar untuk adopsi yang lebih baik.

  • Proses pengembangan. Banyak waktu dengan Java dihabiskan untuk meneliti dan memilih teknologi yang tepat dan mempelajarinya, tetapi ketika itu dilakukan saya pikir ada banyak teknologi yang cukup cepat untuk dikembangkan. Versi terbaru Java EE menyediakan untuk menulis halaman web yang sangat kuat menggunakan Facelet yang dapat dimuat ulang setidaknya secepat halaman PHP.

Saya pikir kecuali Anda tidak ahli dalam Java atau .NET, Anda akan menghemat waktu dan uang dengan memilih teknologi yang paling Anda dan organisasi Anda kenal.


14
Siapa yang menjamin bahwa program Java yang Anda tulis di Windows akan berjalan di tempat lain? Hanya perlu satu panggilan JNI untuk memutus jaminan itu. Masalah yang sama adalah dengan CLI - jika Anda menggunakan non-cross plaform API, Anda kehilangan portablity. Dengan demikian, satu-satunya orang yang dapat membuat jaminan portabilitas adalah diri Anda - programmer, terlepas dari kerangka apa yang Anda gunakan.
Mark H

3
@ Thorbjørn, apakah Anda akan mempercayai Oracle dalam iklim saat ini?
radekg

12
1 karena Thorbjørn mengatakan bahwa jika Anda tidak 100% berkomitmen untuk Windows Anda harus menggunakan Java, bukan berarti Anda harus menggunakan Java. Dan saya setuju - ya, Mono ada di sana sebagai cadangan, tetapi jika rencana Anda saat ini tidak berkomitmen untuk Windows, selamatkan diri Anda dari kesakitan dan lanjutkan dengan teknologi yang dimaksudkan untuk berjalan pada platform lain. Dan saya katakan ini sebagai pengembang .NET dan .NET.
Carson63000

4
Saya bertanya-tanya apakah ada salah satu dari -pemilih suara "mono-exist-on-other" yang benar-benar mencoba melakukannya ...

4
"Java pada dasarnya tersedia secara gratis (...) alat-alat listrik akan dikenakan biaya (...) dukungan yang diberikan juga ada harganya" . Sama persis untuk .NET, kan?
Konamiman

19

Oke, mari kita coba jabarkan ini:

Memperhitungkan:

Alat Kinerja tersedia (bahkan alat pihak ketiga)

Baik platform Java dan .NET memiliki banyak alat pengujian kinerja yang baik, saya tahu bahwa di ruang Java ada banyak alat open source gratis yang memadai untuk sebagian besar skenario. Saya tidak dapat berbicara untuk sisi .NET.

Kompatibilitas lintas platform

Java memiliki keunggulan di sini - proyek Mono (atau serupa) diperlukan untuk menjalankan .NET di beberapa platform. Saya tidak yakin dengan Mono adalah 100% anti peluru dan pemain, sesuatu yang mudah-mudahan orang lain bisa ikut.

Perpustakaan (terutama perpustakaan pihak ketiga)

Keduanya mendapat dukungan kuat di sini. Awalnya eco-system Java memimpin (secara harfiah ada pustaka sumber terbuka gratis untuk apa saja yang dapat Anda pikirkan) tapi saya akan mengatakan bahwa. NET sudah pasti mengetahui di mana masalahnya (NHiberante untuk kegigihan, NUnit untuk pengujian unit untuk menyebutkan dua yang dasar + Saya yakin ada satu truk metrik lagi).

Biaya (Oracle tampaknya mencoba dan memonetisasi Java)

Semua perusahaan mencoba untuk menghasilkan uang pada tingkat tertentu, tetapi dalam kasus Jawa saya pikir pernyataan Anda agak menyesatkan. Java bersumber terbuka pada versi 6 (proyek OpenJDK) dan Oracle tidak menunjukkan kecenderungan untuk memonetisasi Jawa di luar apa yang Sun lakukan. Jadi ya mereka menjual server aplikasi dan ekstensi ke JVM (ekstensi manajemen khususnya), tetapi Java inti itu sendiri? Tidak dan mereka tidak akan pernah (ini telah dinyatakan secara terbuka di depan umum).

Saya pikir baik MS dan Oracle mendapat manfaat besar-besaran karena pendapatan tidak langsung dengan platform masing-masing.

Total Biaya Kepemilikan (TCO)? Saya bahkan tidak akan masuk ke perdebatan ini karena tidak ada cara untuk membuktikannya (pemrograman adalah aktivitas manusia yang kreatif). Saya pribadi berpikir bahwa sistem berbasis Java cenderung memiliki biaya awal yang lebih rendah karena Anda dapat menggunakan tumpukan open source gratis dari atas ke bawah dalam banyak kasus. Namun, perusahaan besar cenderung lebih suka memiliki kontrak dukungan sehingga dapat membatalkan manfaat tertentu.

Proses pengembangan (termudah / tercepat)

Tergantung pada apa yang Anda coba bangun! Saya pribadi berpendapat bahwa mereka cukup banyak, walaupun C # memiliki beberapa fitur tambahan dalam bahasa inti di Jawa saat ini. Namun dengan (beberapa antar-operasi dengan Java) bahasa pada JVM (Groovy, Scala, Clojure dll) Anda dapat memiliki semua fitur langauge yang Anda inginkan.

.NET memiliki keuntungan yang berbeda untuk membangun 'hal' ujung depan web untuk sementara waktu (Pengembangan Aplikasi Cepat jika Anda mau), tapi saya pikir JEE6 dan / atau Spring dan kerangka kerja web / aplikasi lainnya telah cukup banyak menutup celah itu.

Juga perlu diingat bahwa Linux bukan platform utama Anda, tetapi Anda ingin port proyek Anda ke Linux / MacO juga. Anda pasti harus mengingat masalah yang telah berputar di sekitar Oracle dan komunitas Java dan keterbatasan Mono dan Java juga. Akan sangat dihargai jika orang-orang dengan pengalaman dalam keduanya dapat memberikan ikhtisar dan pandangan subjektif mereka sendiri tentang apa yang akan mereka pilih dan mengapa.

Jika Anda ingin port ke Linux, UNIX dan khususnya Mac OS maka seperti yang dinyatakan di atas Java memiliki keunggulan di sana.

Semoga itu bisa membantu!


4

Dengan mempertimbangkan daftar poin Anda, saya akan terpecah dan itu akan sangat tergantung pada apa yang saya butuhkan untuk membangun.

.Net menang untuk aspek-aspek ini:

  • Performa
  • Proses pengembangan (termudah / tercepat)

Java menang untuk aspek-aspek ini:

  • Kompatibilitas lintas platform
  • Perpustakaan (terutama perpustakaan pihak ketiga)

Ini merupakan undian untuk aspek-aspek ini:

  • Biaya (Oracle tampaknya mencoba dan memonetisasi Java)
  • Alat yang tersedia (bahkan alat pihak ketiga)

.Net adalah, untuk semua maksud dan tujuan, tumpukan teknologi platform tunggal. Ya, ada Mono, tetapi sampai Mono 100% kompatibel dengan implementasi Windows itu tidak memberikan pengalaman lintas platform yang benar. Satu-satunya subset yang bisa Anda andalkan untuk dukungan lintas platform adalah apa yang cocok dengan Silverlight.

Yang mengatakan,. Net memiliki kinerja yang lebih baik (pengukuran aktual TBD). Di mata pengguna, kinerja yang dirasakan adalah satu-satunya hal yang penting. Setelah berkembang di Jawa selama 12+ tahun terakhir, dan baru-baru ini melakukan .Net, saya dapat menghargai kekuatan platform.

Java di sisi lain memiliki set IDE yang lebih kaya untuk dipilih, dan biaya IDE superior ini jauh lebih sedikit daripada biaya variasi .Net. Di sisi lain, biaya mesin J2EE profesional dengan mudah mengurangi biaya pengembangan lingkungan. Di .Net, saya memiliki persepsi menjadi nikel-dan-redup sampai mati. Di Jawa ada solusi untuk biaya besar - yang dapat dengan mudah dibuat dengan waktu pengembang mengaturnya. Di luar IDE, untuk alat yang penting (profiler, cakupan, dll.) Biayanya sama.

Pada akhirnya itu sangat tergantung pada kebutuhan . Jika saya akan menggunakan pada Windows, maka. Net adalah tidak punya otak. Saya punya klien yang hanya toko Windows. Jika saya akan menggunakan Unix atau perlu mendukung sistem hetergeneous, maka Java tidak punya otak. Saya bahkan mungkin radikal dan menyarankan tumpukan teknologi campuran. Lagi pula, hanya karena klien memerlukan server untuk menjadi Unix tidak berarti mereka menjalankannya di desktop mereka. Tidak setiap aplikasi terbaik dibuat menjadi aplikasi web.


4

Kinerja - Merata

Kedua platform berkinerja sangat baik untuk hampir semua aplikasi.

Tidak terlalu membedakan mereka, meskipun pengalaman subjektif saya adalah bahwa Java memiliki sedikit keunggulan untuk aplikasi yang berjalan lama, sedangkan .Net lebih cepat untuk waktu startup aplikasi.

Alat yang tersedia (bahkan alat pihak ke-3) - Debatable

Tergantung pada alat apa yang Anda butuhkan dan apa yang Anda kenal.

Net tentu saja memiliki beberapa alat hebat yang disediakan oleh Microsoft. Di sisi lain, ada alat yang sama baiknya di dunia Java misalnya di Eclipse, Netbeans of IntelliJ environment.

Kompatibilitas lintas platform - Java win

.Net secara fundamental terkait dengan platform Microsoft (Windows, Xbox, dll.). Implementasi lengkap tidak tersedia untuk platform non-Microsoft .

Mono bagus, tetapi sebenarnya tidak memberi Anda kemampuan lintas platform penuh karena tidak mendukung semua perpustakaan .Net (misalnya, Anda tidak dapat mengharapkan semua hal Windows GUI berfungsi dengan benar, jadi kecuali Anda beralih ke toolkit lintas-platform seperti GTK # Anda tidak akan dapat menjalankan aplikasi di berbagai platform)

Java benar-benar portabel. Bukan hanya bahasa, tetapi jauh lebih penting semua perpustakaan Java portabel. Memberikan Anda tetap pada pustaka Java murni (misalnya Swing untuk GUI) maka kode Anda akan berjalan di mana pun Anda memiliki lingkungan Java runtime.

Perpustakaan (terutama perpustakaan pihak ketiga) - Java menang

Mungkin kekuatan terbaik dari platform Java adalah ekosistem perpustakaan yang luas, terutama perpustakaan open source. Beberapa contoh:

  • Semua perpustakaan dan alat Apache
  • Semua perpustakaan di ekosistem Eclipse yang luas
  • Semua perpustakaan dikontribusikan / dikelola oleh Google
  • JBoss dan semua alat perusahaan terkait dikelola oleh Red Hat

Biaya (Oracle tampaknya mencoba dan memonetisasi Java) - Java menang jika Anda menggunakan open source, jika tidak Even.

Anda dapat memiliki tumpukan Java open source 100% yang gratis dan tidak mengikat Anda ke platform berpemilik tertentu. Ini 100% gratis.

Sebagai alternatif, Anda dapat membeli IntelliJ IDEA, menjalankan Java pada Windows dan menggunakan database berpemilik, dalam hal ini harganya hampir sama dengan biaya seperti tumpukan Microsoft .NET biasa.

Proses pengembangan (termudah / tercepat) - Debatable

Ini mungkin lebih tergantung pada pengalaman pengembang Anda dengan setiap platform daripada atribut khusus dari platform tersebut.

Net tentu saja memiliki beberapa alat hebat yang dapat membuat Anda sangat produktif untuk aplikasi GUI sederhana di Windows. Tidak mengherankan karena ini adalah "sweet spot" untuk pengembangan .Net.

Di sisi lain, saya lebih suka tumpukan Java untuk pengembangan sisi server. Dengan alat-alat seperti Maven dan semua kemampuan penyebaran / integrasi berkelanjutan Anda dapat membangun proses pengembangan yang sangat efektif untuk aplikasi sisi server yang tangguh.

Dari segi bahasa, C # memiliki beberapa keunggulan produktivitas dibandingkan Java. Tetapi di sisi lain jika Anda mengembangkan platform Java saat ini, trennya bukan menggunakan Java itu sendiri melainkan menggunakan salah satu bahasa JVM baru seperti Scala, Groovy atau Clojure - jika Anda melakukannya maka Anda akan jauh lebih produktif daripada C # atau Java.


3

.Bersih

Sulit untuk menjawab pertanyaan ini tanpa menjadi subyektif atau flamebaiting (saya punya perasaan saya akan downvoted), tetapi. Net adalah bahasa pada kenaikan dan Java tampaknya macet oleh masalah hukum serta menjadi kurang populer.

Juga .net saat ini adalah bahasa yang jauh lebih kohesif dan modern dengan dukungan yang sangat baik untuk multicore (Parallel.net) dan pemrograman asynchrounous (ekstensi reaktif), belum lagi LINQ yang saya tidak bisa hidup tanpanya. Net juga memiliki sejumlah alat gratis, tetapi Visual Studio Express, Sql Server Express, Web Matrix dll.

Memang benar bahwa java memiliki beberapa manfaat multi platform. Anda memiliki beberapa opsi untuk .Net dengan mono dll yang mungkin dilakukan untuk aplikasi tradisional atau komponen backend tetapi beberapa merasa rapuh jika Anda melakukan sesuatu yang sangat khusus (dan mari kita tidak membahas WPF).

Pilihan lain jika crossplatform benar-benar sangat penting adalah pergi Silverlight, saya pribadi tidak terlalu tertarik pada "aplikasi" silverlight tetapi setidaknya itu bekerja.

Crossplatform adalah titik yang menyakitkan, tanyakan pada diri Anda apakah itu benar-benar diperlukan, setidaknya pada titik ini.


Lebih suka. Net bukanlah hal yang buruk. Sebenarnya saya sangat menyukainya. Tidak diragukan lagi bahwa Jawa sedang menghadapi krisis identitas saat ini, yang memalukan - saya juga menyukai platform itu. Saya senang Anda mengakui track record Java yang ditingkatkan untuk lintas-platform (+1). Beberapa klien memerlukan penyebaran Unix, yang lain membutuhkan penyebaran Windows. Orang-orang Jawa dapat melayani kedua platform, sementara Net benar-benar terbatas pada Windows. Yang mengatakan, ada banyak klien Windows hanya di luar sana.
Berin Loritsch

1

Di organisasi kami, pada titik ini, kami akan memilih Jawa. Alasannya sederhana: tim Java kami lebih besar, lebih berpengalaman, dan lebih terlatih daripada tim .NET kami (yang juga cukup terikat dalam pemeliharaan sistem yang ada sehingga mereka kekurangan sumber daya untuk mengerjakan proyek-proyek baru besar) .
Yang mengatakan, jika ada alasan mendesak untuk menggunakan .NET (misalnya persyaratan klien, beberapa pelanggan mungkin memiliki basis diinstal besar perangkat lunak .NET dan ingin sistem baru mereka masuk ke dalam basis itu, mengambil alih pemeliharaan sendiri, dll.) Kami akan lakukanlah dan sewa kontraktor untuk melakukan pekerjaan di mana kita tidak bisa membebaskan orang-orang kita sendiri.
Saya tidak akan memaksakan teknologi pada pelanggan terhadap kepentingan terbaik mereka, dan beberapa pelanggan hanya mendapat manfaat (karena organisasi internal mereka) lebih dari satu daripada yang lain karena investasi yang diperlukan untuk menggunakan sistem (sekali lagi, katakanlah kami memiliki pelanggan yang sudah memiliki sejumlah aplikasi .NET berjalan dan memiliki staf untuk mendukungnya, kita tidak akan mencoba dan memaksa mereka untuk mempekerjakan orang dan membeli lisensi perangkat keras dan perangkat lunak untuk menjalankan aplikasi Java di samping, dan tentu saja sebaliknya akan juga benar. Kami sebenarnya menyarankan mereka untuk tidak melakukannya jika mereka datang kepada kami dengan itu sebagai permintaan).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.