it-swarm-id.com

Java vs. C # - Perspektif produktivitas

Jika Anda memiliki beberapa tahun pengalaman dalam bekerja dengan Java dan beberapa tahun pengalaman dalam bekerja dengan C # dan .NET, saya akan menghargai pendapat Anda tentang perbedaan produktivitas pengembangan perangkat lunak antara kedua lingkungan ini. Salah satu pelanggan kami sedang mempertimbangkan untuk mengganti solusi perangkat lunak mereka yang sudah ada. Sebagai pengganti akan membutuhkan sekitar 10 - 15 tahun kerja manusia, sebuah pilihan untuk Java atau .NET, berdasarkan pada perbedaan produktivitas di antara mereka , dapat secara signifikan mempengaruhi investasi yang dibutuhkan dan waktu ke pasar.

Apakah Anda dapat memberikan kepada kami, indikasi perbedaan produktivitas pengembangan perangkat lunak antara Java dan C # /. NET? Saya lebih suka menerima jawaban sebagai berikut:

Pengalaman saya didasarkan pada pengalaman X tahun bekerja dengan Java dan pengalaman X tahun bekerja dengan C # /. NET. Java adalah X% lebih produktif daripada C # .NET. atau C # /. NET adalah X% lebih produktif daripada Java jika Anda memasukkan yang berikut ke dalam akun.

34
Edin Dazdarevic

Pengalaman saya didasarkan pada 10 tahun pengalaman bekerja dengan Java dan 3 tahun pengalaman bekerja dengan C # /. NET. Java 0% lebih produktif daripada C # .NET. Ini didasarkan pada penulisan aplikasi berbasis layanan back-end.
C # /. NET mungkin 5% lebih produktif daripada Java untuk menulis aplikasi pengguna. Tapi kemudian saya belum melakukan ini selama hampir 5 tahun dalam Java dan editor UI Netbeans baru bisa menutup celah.

Anda ingin meningkatkan produktivitas? CI (Pengiriman Kontinyu idealnya) dan tes otomatis. Produktivitas yang diperoleh oleh pilihan bahasa/platform/IDE pada semua bahasa/platform/IDE utama cukup kecil.

17
mlk

Saya telah mengerjakan proyek di perguruan tinggi dan di Real World ™ menggunakan Java dan C # selama 5 tahun sekarang.

Hands down Saya menikmati menggunakan C # lebih karena itu ringkas dan penggunaan gula sintaks. Anda jarang akan menemukan kode Factory.GetFactory(OfFactory.GetFactory(Factory)); dalam C #. Lebih mudah untuk membaca dan mengikuti karena sintaksinya lebih kecil dan lebih ringkas.

Dengan yang mana Anda akan lebih produktif? Itu tergantung pada jenis proyek.

Apakah Anda merancang aplikasi desktop untuk Windows? Maka C # adalah pilihan terbaik karena itu kuat IDE Visual Studio dan .NET Framework membuat membuat GUI sangat sederhana.

Terus terang, saya senang saya tidak menggunakan Java lagi (sudah lebih dari satu tahun sekarang) karena saya ingat betapa mengerikannya kode itu. Contoh singkatnya adalah penanganan pengecualian. kode Anda dapat melempar pengecualian Anda harus akun untuk setiap pengecualian tunggal. Ini dengan cepat mengubah kode sepele menjadi 20 baris + monstrositas.

C # bukan sebagai pegangan tangan, jika Anda memilih untuk membiarkan kode terbuka, itu keputusan Anda sebagai pengembang.

C # juga telah membuat banyak penambahan sepanjang tahun yang membuatnya menyenangkan untuk digunakan. Lambdas, delegasi, fungsi anonim (ala Ruby), banyak hal-hal kecil yang baik yang akan Anda temukan saat Anda melanjutkan.

43
Sergio

Saya telah bekerja secara luas dengan Java (sejak 1996) dan .Net (sejak 2002) dan pada 2010 membuat keputusan untuk pergi dengan Java di perusahaan saya dengan dasar bahwa itu akan menjadi the lingkungan paling produktif secara keseluruhan.

Perhatikan bahwa saya mendefinisikan produktivitas pengembangan perangkat lunak dalam hal nilai bisnis yang dibuat per unit biaya/sumber daya, secara end-to-end (yaitu Anda harus melihat produktivitas seluruh siklus hidup perangkat lunak termasuk penyebaran dan pemeliharaan, bukan hanya pengkodean awal !!).

Berikut adalah elemen kunci dari alasan saya:

  • Sintaks adalah faktor minor dalam produktivitas - sementara Java pasti bertele-tele dan saya lebih suka sintaksis C #, itu tidak terlalu menjadi masalah. Apakah pengembang Anda mengetik object.getSomeProperty() vs. object.SomeProperty Atau menggunakan kelas dalam anonim vs. lambda sama sekali tidak akan membuat perbedaan yang berarti untuk keunggulan kompetitif perusahaan Anda ....
  • Ekosistem perpustakaan sangat penting - mengembangkan produk perangkat lunak modern, Anda tidak ingin mengembangkan banyak komponen umum dari awal. Ekosistem Java memiliki keunggulan yang jelas dalam hal jumlah dan kualitas perpustakaan sumber terbuka (terutama yang dikembangkan oleh Apache, Google, Eclipse Foundation dan RedHat/JBoss)
  • Portabilitas/fleksibilitas penempatan - Saya tahu saya dapat menggunakan JVM di hampir semua platform, termasuk cluster Linux murah yang besar. Dengan .Net, Anda dibatasi untuk lingkungan Windows. Dengan kemajuan dalam opsi cloud hosting, saya menilai ini menjadi keuntungan yang cukup penting.
  • Scala dan Clojure keduanya merupakan opsi yang layak untuk pengembangan pada JVM jika Anda menginginkan fitur bahasa tingkat lanjut. Ini adalah opsi realistis untuk dikembangkan di Java tetapi tetap buka opsi untuk pindah ke Scala atau Clojure seiring waktu. Untuk beberapa hal, ini adalah bahasa "generasi berikutnya" yang saya pikir lebih unggul daripada Java dan C #, jadi ini meyakinkan saya bahwa platform Java memiliki masa depan yang baik dalam hal inovasi bahasa. (Java 7 dan 8 terlihat menjanjikan, tapi aku tidak benar-benar menahan napas ....)
  • Biaya pemeliharaan tampaknya cukup menguntungkan bagi Java. Java memiliki sintaksis yang lebih sederhana daripada C # yang berarti lebih banyak verbositas tetapi di sisi sebaliknya berarti orang cenderung menulis kode yang lebih bisa dipelihara - cukup sulit untuk menulis "kode pintar". Selain itu, dunia Java memberi bobot lebih besar pada kompatibilitas mundur dibandingkan dunia .Net, yang akan menjadi keuntungan dalam hal biaya perawatan selama beberapa tahun.
  • Kemandirian Vendor - setelah melihat perusahaan dibakar oleh vendor lock-in di masa lalu, saya merasa lebih baik menggunakan ekosistem Java yang relatif lebih terbuka daripada yang didominasi oleh Microsoft. Dunia bersih. Sebagai contoh, saya lebih suka memiliki pilihan database daripada didorong untuk menggunakan SQL Server (dan Push cukup kuat, baik melalui dukungan alat dan keahlian khusus pengembang. Net). Menjaga agar vendor investasi produk inti Anda tetap independen, menurut saya merupakan langkah jangka panjang yang cerdas. Saya menilai (dengan benar ternyata) bahwa OpenJDK akan menjadi masa depan Java jadi saya akan secara efektif membangun di atas platform open source.
  • Talent - ini subjektif tentu saja, tapi saya lebih terkesan dengan kemampuan teknis pengembang di dunia Java daripada di dunia .Net. Kesan saya rata-rata adalah bahwa pengembang Net memiliki kecenderungan untuk melakukan apa pun yang disediakan Microsoft untuk alat atau templat yang mudah, sedangkan pengembang Java cenderung lebih peduli untuk menemukan solusi yang tepat dari perspektif rekayasa perangkat lunak. Ini benar-benar subyektif dan tidak diragukan tergantung pada lokalitas spesifik/pasar dan ada banyak individu yang tidak sesuai dengan pola ini, jadi YMMV tentu saja.
  • Alat sekitar level. Microsoft memiliki banyak alat yang hebat dan mudah digunakan yang akan sangat menarik untuk dikembangkan di Windows. Namun saya bekerja terutama pada pengembangan sisi server, di mana saya berpendapat alat Java memiliki Edge. Secara khusus, Maven telah terbukti menjadi alat yang sangat kuat dalam ekosistem Java yang menurut saya masih tidak memiliki padanan yang setara di dunia .Net.

Jadi, sementara ada banyak pertimbangan kompleks, secara keseluruhan saya cukup senang dengan pilihan untuk pergi dengan Jawa, dan akan membuat pilihan yang sama hari ini (Pada awal 2012).

Mungkin satu-satunya kasus sekarang di mana saya akan pergi dengan. Net akan menjadi jika saya sedang mengembangkan aplikasi desktop Windows saja (di mana keuntungan. Net jelas besar).

24
mikera

Saya punya: Java 10 tahun, C # 8 tahun

Saya memilih Java untuk

  1. Tidak ada kunci Vendor (Anda dapat mengubah server aplikasi/web dari linux ke windows ke Unix)
  2. Interoperabilitas/Dapat dipertukarkan dari paket pihak ketiga, seperti JasperReports JFreeChart, JSF atau Spring
  3. Sebagian besar inovasi berasal dari sini (Log4j, Ant, Spring, Hibernate, dan seterusnya)
  4. Bekerja pada beberapa server aplikasi (seperti A). Seperti JBoss, Tomcat, WebSphere, GlassFish, WebLogic
9
pat

Saya memiliki 10+ tahun pengalaman dengan Java (sejak versi 1.1, sungguh!) Dan 7 tahun pengalaman dengan .NET (kebanyakan C #).

Anda memiliki keputusan yang harus diambil, tetapi sebagian besar Anda harus mencoba memecah menjadi beberapa skenario:

Aplikasi Desktop

Jika Anda mengembangkan aplikasi desktop, Anda harus menggunakan platform utama yang akan Anda gunakan. Jika platform Microsoft menggunakan .NET, tidak ada solusi yang lebih baik daripada platform yang dikembangkan oleh kapal induk itu sendiri. Jika ini adalah skenario Linux atau Multi-platform, pertimbangkan Java atau pindah ke solusi berbasis web.

Aplikasi Berbasis Web

Ini adalah keputusan yang sangat sulit untuk dibuat karena masing-masing memiliki kekuatan dan kelemahan mereka sendiri. Berikut beberapa di antaranya:

C #

Kekuatan: Saat ini memiliki lebih banyak momentum membangun fitur baru ke dalam bahasa dan platform/kerangka kerja. Semuanya berasal dari satu vendor dan tentunya ini merupakan keuntungan. Anda juga dapat menggunakan beberapa komponen yang sangat kuat seperti DevExpress misalnya (Java bahkan tidak mendekati untuk memiliki sesuatu seperti apa yang telah disatukan oleh tim DX selama bertahun-tahun dan ini merupakan peningkatan produktivitas yang sangat besar).

Kelemahan: Untuk aplikasi perusahaan .NET tidak setua Java. Anda tidak memiliki banyak vendor yang membangun perangkat lunak perusahaan di .NET seperti yang Anda miliki untuk Java.

Java

Kekuatan: Lebih dewasa (sudah dijelaskan) dan memiliki komunitas besar dengan beberapa proyek open source hebat yang dapat membantu. Beberapa .NET yang disebut proyek sumber terbuka benar-benar hanyalah salinan dari proyek-proyek dari Jawa.

Kelemahan: Oracle memiliki Java (Saya tahu, bukan JCP) dan itu jelas merupakan risiko yang harus dipertimbangkan. Niat mereka tidak begitu jelas dan saya pribadi tidak suka ke mana bahasa ini sekarang (saya tahu banyak Java pengembang memiliki masalah serupa).

Aplikasi Sisi Server

Ini pada dasarnya argumen yang sama dengan Aplikasi Berbasis Web tetapi karena Anda tidak perlu terlalu khawatir tentang UI Java semakin kuat dalam kasus ini. Tetapi sekali lagi, jika platform sebagian besar adalah Windows .NET mungkin pilihan yang lebih baik.

Pertimbangan Keseluruhan

Secara keseluruhan, menurut pendapat saya, .NET memiliki keunggulan terutama karena integrasi yang ketat dari Visual Studio 2010 (menyerahkan yang terbaik IDE di luar sana), MS SQL, Entity Framework, IIS dan seterusnya. Ini semua merupakan peningkatan produktivitas yang sangat besar dan saya punya banyak pengalaman untuk membuktikannya. Juga saya bekerja dengan sebagian besar Java pengembang yang beralih ke .NET dan mereka berbagi pada dasarnya pendapat yang sama.

Saya pikir itu juga poin yang baik bahwa Microsoft lebih kuat dari sebelumnya. NET akan ada di sana untuk sementara waktu. Jadi ketika melihat 10-15 tahun ke depan saya merasa lebih aman dengan .NET daripada Java.

6
Alex

Jawa: 5 tahun (tidak berkelanjutan)
C #: 7 tahun

Saya tidak percaya Anda bisa mengukur produktivitas dengan cara itu. Itu sangat tergantung pada pengembang individu dan proyek. Gunakan apa yang diketahui pengembang Anda.

Edit:
Mari kita mendefinisikan "aplikasi perusahaan tipikal" sebagai:

  • multi-tier
  • server klien
  • DB didukung

Baik Java dan C # dapat melakukan itu. Ini bukan masalah bahasa, tetapi tentang kerangka/runtime. Sekali lagi, gunakan apa yang diketahui pengembang Anda. Mereka dapat mempelajari bahasa baru dan kerangka kerja baru, tetapi butuh waktu untuk mengonsumsinya. Itu akan berlaku untuk aplikasi desktop. Kedua bahasa dapat digunakan dengan berbagai toolkit/lib GUI, tetapi mereka semua memiliki pendekatan dan filosofi yang berbeda.

6
EricSchaefer

Saya baru saja lulus dari universitas, tetapi telah memiliki pengalaman komersial dengan kedua bahasa, memberikan total sekitar 3 tahun Java dan 4 tahun C # .Net (note .net berarti Anda dapat menggunakan C #, VB.net, C++ CLI, dan J # dan F #).

Saya akan menyatakan sekarang preferensi saya secara keseluruhan adalah C # di atas Java, sementara keduanya memiliki sintaksis yang sama saya suka kekuatan kerangka .Net atas kompatibilitas OS lintas Jawa. Anda harus sangat mempertimbangkan, apa yang perlu Anda bangun? Apakah ini hanya aplikasi desktop? Apakah Anda memerlukan konektivitas ke klien lain, begitu juga desktop, ponsel, situs web lain?

** Diskusi tentang IDE hilang karena pertanyaan di Stackoverflow ditutup. Akhir Intinya adalah Java memiliki banyak IDE gratis tetapi mereka tidak membandingkan menurut pendapat saya untuk kekuatan dan tambahan studio visual.Tapi perhatikan Visual studio biaya lebih dari per lisensi.

Anda perlu melihat keterampilan apa yang sudah dimiliki tim pengembangan Anda, karena ini akan berdampak awal. Yang lebih cepat ada di sini atau di sana, diberikan pengguna berpengalaman dalam bahasa/kerangka kerja. Yang saya kira membawa poin bahwa Anda tidak harus mempertimbangkan bahasa, karena bahasanya hanya sintaks, tetapi alat dan kerangka kerja yang menggunakan bahasa.

4
JonWillis

Saya telah bolak-balik antara Java dan .NET, dimulai dengan Java 1.2 hingga 1.6, dan .NET 1 hingga 4.0, lebih dari 10) tahun pengalaman kerja profesional (menjadi programmer C/C++ sebelum itu).

Pada suatu waktu, seperti .NET 2.0, saya akan mengatakan bahwa Java dan C # akan hampir sama, terutama untuk pekerjaan back-end. Konstruksinya masih sangat mirip. NET akan memiliki mungkin mendapatkan Edge di pemrograman UI desktop, karena perancang WinForms di Visual Studio, dan Java akan memiliki Edge di Web/Server, terutama karena Anda tidak terjebak dengan IIS.

Sekarang pindah ke. NET 3.5 dan 4, saya memberikan Edge produktivitas untuk. NET, tangan-down. Ini terutama, menurut pendapat saya, karena .NET adalah bahasa yang berkembang lebih cepat, karena MS dapat membuat keputusan bahasa relatif cepat, sebagai lawan mendorong perubahan melalui politik JCP. Perbaikan besar adalah kata kunci var, keseluruhan Linq, Metode Perpanjangan, operator penggabungan Null ??, dynamic, dan mungkin banyak hal hebat yang benar-benar meningkatkan produktivitas .

Sekarang, yang mengatakan, bahasa "paling produktif" untuk suatu proyek hampir selalu salah satu yang paling nyaman dan berpengalaman dengan pengembang. Kurva pembelajaran selalu merupakan pembunuh produktivitas terbesar.

3
rally25rs

Satu hal yang saya perhatikan adalah banyak toko C # /. NET memiliki sikap "tidak ditemukan di sini" dan melarang semua perpustakaan pihak ketiga/sumber terbuka sementara banyak toko-toko Java lebih bersedia menggunakan perpustakaan sumber terbuka. Juga tampaknya ada lebih banyak perpustakaan yang tersedia untuk Java. Bahkan jika Anda melihat beberapa perpustakaan pihak ketiga yang keren di .NET mis. NHibernate, NPOI, Spring.NET, dll. Mereka adalah port dari pustaka Java dan karenanya berada di belakangnya. Tampaknya sepertinya banyak dari inovasi ini yang didahulukan ke Java dan setelah beberapa waktu, port NET dibuat. Dari perspektif perpustakaan, tampaknya Java menang dalam hal penemuan inovatif baru.

Namun Microsoft memang membuat beberapa perpustakaan resmi, mis. ASP MVC, LINQ, dll. Tetapi sering suka dengan ASP Perpustakaan pihak ketiga MVC seperti Struts, Spring MVC, dll. Sudah keluar untuk Java dan Microsoft terlambat memasuki paradigma web view controller model.

Tentu saja, banyak dari perpustakaan ini menghemat banyak waktu dan membuat Anda lebih produktif. Bahasa inti ke bahasa inti C # dan Java tidak terlalu berbeda dan bagi saya itu terlalu dekat untuk dipanggil. Melempar pasukan perpustakaan pihak ketiga dan skalanya tentu miring ke arah Jawa. Masih dengan toko terbuka banyak saldo miring keluar. Hanya saja, banyak toko .NET memiliki sikap yang tidak ditemukan di sini sementara banyak toko Java adalah apa pun yang diperlukan untuk menyelesaikan pekerjaan ... Ini bahkan berlaku di perusahaan tempat saya bekerja. Tim NET tidak mendapatkan banyak (karena manajemen) sementara tim Java memiliki banyak perpustakaan/utilitas pihak ketiga yang disetujui. Juga dengan .NET lebih banyak hal baik tidak gratis (mis. Sebelum NPOI jika Anda ingin bekerja dengan dokumen kantor Microsoft, sebagian besar solusi [tidak termasuk otomatisasi kantor] tidak gratis. Sedangkan Java sudah memiliki POI sejak tahun 2001 Saya tidak berpikir NPOI keluar sampai 2008, sulit untuk mengatakan berdasarkan situs proyek npoi.

3
Cervo

Dengan kesamaan dalam sintaks dan alat, keuntungan produktifitas dari C # atau Java bukan urutan besarnya untuk membuat perbedaan yang signifikan untuk proyek kerja 10 - 15 orang tahun Anda. Saya akan melihat lebih dekat pada masalah seperti:

  1. Apa persyaratan proyek dan kemampuan bahasa apa yang memenuhi persyaratan tersebut (mis. Lintas platform vs klien Windows yang kaya).
  2. Apa yang bisa saya tempatkan sebagai pendekatan/metodologi proyek yang akan memungkinkan tim saya bekerja secara produktif.
  3. Apa yang dapat saya lakukan tentang lingkungan kerja untuk memastikan saya mempekerjakan, mempertahankan, dan memanfaatkan tim terbaik sebaik mungkin untuk proyek yang signifikan.

Saya akan menyarankan bahwa, menurut pendapat saya, premis di balik pertanyaan, bahwa "perbedaan produktivitas antara (C # dan Jawa) dapat secara signifikan mempengaruhi investasi yang diperlukan dan waktu ke pasar" tidak benar. Saya tidak ragu akan ada beberapa perbedaan tetapi tidak akan signifikan.

3
AlexC

Saya sering bertanya pada diri sendiri: mana yang lebih baik? C # atau Java?

Saya akan memberi Anda saran dan saran ini adalah kesimpulan dari penelitian saya: Tidak ada yang lebih baik, hanya bahasa yang Anda ketahui dengan baik dan Anda dapat melakukan banyak aplikasi menarik dengan yang terbaik.

Pelajari cara memprogram dan kemudian latih diri Anda banyak menggunakan satu bahasa dan ketika Anda menjadi sempurna dalam menulis kode dengannya, pikirkan bahasa lain dan percayalah, Anda akan belajar bahasa lain seperti sepotong kue.

0
Salah