it-swarm.asia

Java vs. C # - Verimlilik perspektifi

Java ve C # ve .NET ile çalışma konusunda birkaç yıllık bir deneyime sahipseniz, bu iki ortam arasındaki yazılım geliştirme verimliliği farklılıkları hakkındaki görüşünüze değer veriyorum. Müşterilerimizden biri mevcut yazılım çözümlerini değiştirmeyi düşünüyor.Yedeğiştirme yaklaşık 10 - 15 adam yıl çalışmayı gerektireceğinden, aralarındaki verimlilik farklılıklarına bağlı olarak Java veya .NET için bir seçim) , gerekli yatırımı ve pazara sunma süresini önemli ölçüde etkileyebilir.

Bize, Java ve C # /. NET arasındaki yazılım geliştirme verimliliği farklılıklarının bir göstergesi verebilir misiniz? Aşağıdaki gibi bir cevap almayı tercih ederim:

Deneyimlerim Java ve C # /. NET ile çalışan X yıllık deneyimine dayanarak X yıllık deneyimine dayanıyor. NET = Java C # .NET'ten% X daha verimli) veya C # /. NET, aşağıdakileri dikkate alırsanız Java) değerinden% X daha verimlidir.

34
Edin Dazdarevic

Deneyimlerim Java ve C #/ile çalışan 3 yıllık deneyime dayanmaktadır. NET. Java C # .NET'ten% 0 daha verimlidir) Bu, arka uç hizmete dayalı uygulamaların yazılmasına dayanır.
C # /. NET, Java kullanıcı uygulamaları yazmak için% 5 daha üretken olabilir. Ama sonra bunu Java ve yeni Netbeans UI editörü boşluğu kapatabilirdi.

Verimliliği artırmak mı istiyorsunuz? CI (ideal olarak Sürekli Teslimat) ve otomatik testler. Herhangi bir büyük dil/platform/IDE üzerinde dil/platform/IDE seçimi ile elde edilen verimlilik oldukça düşüktür.

17
mlk

5 yıldır Java ve C # kullanarak) hem üniversitede hem de Real World ™ projelerinde çalıştım.

Eller aşağı, özlü ve sözdizimi şekeri kullanımı nedeniyle C # kullanmaktan daha çok hoşlanıyorum. C # 'da nadiren bir Factory.GetFactory(OfFactory.GetFactory(Factory)); kodu bulacaksınız. Sözdizimi daha küçük ve daha özlü olduğu için okumak ve takip etmek daha kolaydır.

Hangisiyle daha üretken olacaksınız? Bu, projenin türüne bağlıdır.

Windows için bir masaüstü uygulaması mı tasarlıyorsunuz? Sonra C # güçlü çünkü en iyi seçimdir IDE Visual Studio ve .NET Framework GUI'leri oluşturmayı çok basit hale getirir.

Açıkçası, Java artık (şimdi bir yılı aşkın bir süredir)) kullanmama sevindim, çünkü kodun ne kadar korkunç bir şekilde ayrıntılı olması gerektiğini hatırlıyorum. kodunuz can size bir istisna atabilir zorunluluk mümkün olan her istisna için hesap oluşturabilirsiniz.Bu hızlı bir şekilde önemsiz kodu 20 satır + bir canavarlığa dönüştürür.

C # el tutma gibi değildir, kodunuzu açık bırakmayı seçerseniz, karar vermek için bir geliştirici olarak size kalır.

C # ayrıca, kullanımı keyifli hale getiren yıl boyunca birçok ekleme yaptı. Lambdas, delegeler, anonim işlev (a la Ruby), ilerlerken bulabileceğiniz birçok iyi küçük şey.

43
Sergio

Hem Java (1996'dan beri) hem de .Net (2002'den beri) ile kapsamlı bir şekilde çalıştım ve 2010'da şirketimde olması gerektiği gibi bir Java ile gitme kararı verdim genel olarak en verimli ortam.

Yazılım geliştirme verimliliğini uçtan uca birim maliyet/kaynak başına yaratılan iş değeri olarak tanımladığımı unutmayın (yani, dağıtım ve bakım da dahil olmak üzere tüm yazılım yaşam döngüsünün verimliliğine sadece ilk kodlama !!).

İşte akıl yürütmemdeki temel unsurlar:

  • Sözdizimi üretkenlikte küçük bir faktördür - Java kesinlikle ayrıntılı olsa da ve ben C # sözdizimini tercih ediyorum, sadece çok önemli değil. Geliştiricilerinizin object.getSomeProperty() ve object.SomeProperty Yazıp yazmadığı veya lambda'ya karşı anonim bir iç sınıf kullanması, şirketinizin rekabet avantajında ​​kayda değer bir fark yaratmayacaktır ...
  • Kütüphane ekosistemi kritik öneme sahiptir - modern bir yazılım ürünü geliştirmek, çok sayıda ortak bileşeni sıfırdan geliştirmek istemezsiniz. Java ekosistemi açık kaynak kitaplıklarının sayısı ve kalitesi açısından açık bir avantaja sahiptir (özellikle Apache, Google, Eclipse Foundation ve RedHat/JBoss tarafından geliştirilenler)
  • Taşınabilirlik/dağıtım esnekliği - Büyük ucuz Linux kümeleri de dahil olmak üzere hemen hemen her platformda bir JVM dağıtabileceğimi biliyorum. .Net ile Windows ortamlarıyla sınırlısınız. Bulut barındırma seçeneklerindeki ilerlemelerle, bunun oldukça önemli bir avantaj olduğuna karar verdim.
  • Scala ve Clojure, gelişmiş dil özellikleri istiyorsanız, JVM'de geliştirme için uygun seçeneklerdir. Java 'da geliştirmek için gerçekçi bir seçenektir ancak zaman içinde Scala veya Clojure'a geçme seçeneğini açık tutun. Bir dereceye kadar bunlar hem Java hem de C # 'ın önünde olduğunu düşündüğüm "yeni nesil" dillerdir, bu nedenle bu, Java platformunun dil yeniliği açısından iyi bir geleceğe sahip olduğunu garanti etti. (Java 7 ve 8 umut verici görünüyordu, ama tam olarak nefesimi tutmuyordum ....)
  • Bakım maliyetleri aslında Java'ya karşı oldukça uygun görünüyordu. Java, C # 'dan daha basit bir sözdizimine sahiptir, bu da daha fazla ayrıntı anlamına gelir, ancak ters çevrildiğinde insanlar daha sürdürülebilir kod yazma eğilimi gösterir - "akıllı kod" yazmak daha zordur. Buna ek olarak, Java dünyası geriye dönük uyumluluğa .Net dünyasından çok daha fazla ağırlık veriyor ve bu da birkaç yıl boyunca bakım maliyetleri açısından avantajlı olacak.
  • Satıcı bağımsızlığı - Şirketlerin geçmişte satıcı kilitlenmesiyle yakıldığını gördükten sonra, Microsoft hakimiyetinden ziyade nispeten daha açık Java ekosisteme gitmenin bir avantaj olduğunu hissettim. Net dünya. Örneğin, SQL Server'ı kullanmaya itilmek yerine veritabanlarının seçimini tercih ederim (ve Push, hem araç desteği hem de .Net geliştiricilerinin tipik beceri seti aracılığıyla oldukça güçlüdür). Temel ürün yatırım satıcınızı bağımsız tutmak bence uzun vadeli akıllı bir hareket. OpenJDK'nın Java 'nın geleceği olacağını (doğru bir şekilde ortaya çıktığı gibi) yargıladım, bu yüzden etkili bir şekilde açık kaynaklı bir platform üzerine inşa edeceğim.
  • Talent - Bu elbette özneldir, ancak Java dünyasındaki geliştiricilerin .Net dünyasından daha fazla teknik yeteneklerinden etkilendim. Ortalama izlenimim, .Net geliştiricilerinin Microsoft için kolay araçlar veya şablonlar sağladıkları her şeyi yapma eğilimindeyken, Java geliştiricileri bir yazılım mühendisliği perspektifinden doğru çözümü bulma konusunda daha fazla önem verme eğilimindeydi. Bu tamamen özneldir ve şüphesiz belirli bölgeye/pazara bağlıdır ve açıkça bu kalıba uymayan birçok kişi vardı, bu yüzden elbette YMMV.
  • Araçlar seviye ile ilgiliydi. Microsoft, Windows üzerinde geliştirmek için özellikle çekici olacak çok sayıda harika, kullanımı kolay araçlara sahiptir. Ancak öncelikle Java araçlarının Edge sahip olduğunu iddia ediyorum sunucu tarafı geliştirme üzerinde çalışıyorum. Özellikle Maven, Java ekosisteminde .Net dünyasında iyi bir eşdeğeri olduğunu düşünmediğim son derece güçlü bir araç olduğunu kanıtladı.

Bu yüzden birçok karmaşık husus olsa da, genel olarak Java ile gitme seçiminden oldukça memnunum ve bugün aynı seçimi yapacağım (2012 başı itibariyle).

Muhtemelen .Net'le birlikte gideceğim tek durum, yalnızca Windows'a yönelik bir masaüstü uygulaması (.Net avantajının çok büyük olduğu) geliştiriyor olsaydım olurdu.

24
mikera

Bende: Java 10 yıl, C # 8 yıl

Java için

  1. Satıcı kilidi yok (uygulama/web sunucularını linux'dan pencerelere Unix'e değiştirebilirsiniz)
  2. Birlikte çalışabilirlik/JasperReports JFreeChart, JSF veya Spring gibi üçüncü taraf paketlerinin değiştirilebilir
  3. Çoğu yenilik buradan gelir (Log4j, Ant, Spring, Hibernate, ve dahası)
  4. Birden çok uygulama sunucusunda (A gibi) çalışır. JBoss, Tomcat, WebSphere, GlassFish, WebLogic gibi
9
pat

Java (sürüm 1.1'den beri, gerçekten!) Ve .NET (çoğunlukla C #) ile 7 yıllık tecrübem var.

Verilecek çok kararınız var, ancak çoğunlukla birkaç senaryoya ayrılmaya çalışmalısınız:

Masaüstü Uygulaması

Bir masaüstü uygulaması geliştiriyorsanız, üzerinde çalışacağınız ana platform ile gitmek zorundasınız. Bir Microsoft platformu .NET kullanıyorsa, ana geminin kendisi tarafından geliştirilen platformdan daha iyi bir çözüm yoktur. Linux veya Çok platformlu bir senaryo ise Java veya web tabanlı bir çözüme geçmeyi düşünün).

Web Tabanlı Uygulama

Bu çok zor bir karardır çünkü her birinin kendi güçlü ve zayıf yanları vardır. İşte birkaçı:

C #

Güç: Şu anda dile ve platforma/çerçeveye yeni özellikler oluşturma konusunda daha fazla ivme var. Her şey tek bir satıcıdan geliyor ve kesinlikle bu bir avantaj. Örneğin DevExpress gibi bazı çok güçlü bileşenleri de kullanabilirsiniz (Java, DX ekibinin yıllar içinde bir araya getirdiği gibi bir şeye sahip olmak için bile yaklaşmaz ve bu büyük bir verimlilik artışını temsil eder).

Zayıflık: Kurumsal uygulama için .NET Java kadar olgun değil. Java için yaptığınız gibi .NET'te kurumsal yazılımlar üreten pek çok satıcınız yok.

Java

Güç: Daha olgun (zaten açıklanmış) ve yardımcı olabilecek birkaç harika açık kaynak projesiyle büyük bir topluluğa sahip. Açık kaynaklı projeler olarak adlandırılan pek çok .NET gerçekten Java'nın projelerinin bir kopya kedisidir.

Zayıflık: Oracle = Java (JCP değil biliyorum)) sahibidir ve bu kesinlikle dikkate alınması gereken bir risktir. Niyetleri çok net değil ve kişisel olarak dilin şu anda nereye gittiğini sevmiyorum (Java geliştiricilerin benzer endişeleri var).

Sunucu Tarafı Uygulaması

Temelde Web Tabanlı Uygulamalar ile aynı argümanlar ama UI Java bu durumda daha da güçleniyor. daha iyi bir seçim olabilir.

Genel Hususlar

Genel olarak, bence .NET, çoğunlukla Visual Studio 2010'un sıkı entegrasyonu (en iyi IDE orada), MS SQL, Entity Framework, IIS ve diğerleri. Bu tüm büyük bir verimlilik artışı temsil ve bunu kanıtlayan tonlarca deneyimim var. Ayrıca çoğunlukla Java geliştiricileri .NET döndü ve paylaşmak temelde aynı görüş.

Bence Microsoft'un her zamankinden daha güçlü olması iyi bir nokta. NET'in bir süre orada olacağı anlamına geliyor. Bu yüzden 10-15 yıl öncesine baktığımda .NET ile Java'dan daha güvenli hissediyorum.

6
Alex

Java: 5 yıl (sürekli değil)
C #: 7 yıl

Verimliliği bu şekilde ölçebileceğinize inanmıyorum. Bu büyük ölçüde bireysel geliştiriciye ve projeye bağlıdır. Geliştiricilerinizin bildiklerini kullanın.

Düzenleme:
"Tipik kurumsal uygulamayı" şu şekilde tanımlayalım:

  • çok katmanlı
  • müşteri sunucusu
  • DB destekli

Hem Java ve C # bunu yapabilir. Bu çok dil değil, çerçeve/çalışma zamanı meselesi. Yine, geliştiricilerinizin bildiklerini kullanın. Yeni bir dil ve yeni bir çerçeve, ama onu grok için zaman alır.Bu bir masaüstü uygulaması için geçerli olacaktır. Her iki dil de çok sayıda GUI araç kiti/libs ile kullanılabilir, ancak hepsinin farklı yaklaşımları ve felsefeleri vardır.

6
EricSchaefer

Üniversiteden yeni mezun olmuş bir öğrenciyim, ancak her iki dilde de ticari deneyimim oldu, toplam yaklaşık 3 yıl Java ve 4 yıl C # .Net (not .net kullanabileceğiniz anlamına gelir) C #, VB.net, C++ CLI ve J # ve F #).

Şimdi her ikisi de benzer sözdizimine sahipken genel tercihimin Java yerine C # olduğunu söyleyeceğim. Java çerçevesinin Java işletim sistemi uyumluluğu üzerindeki .Net çerçevesinin gücünü seviyorum. Yapmanız gereken şeyleri güçlü bir şekilde düşünmelisiniz? Bu sadece bir masaüstü uygulaması mı? Diğer istemcilerle, yani diğer masaüstü bilgisayarlarla, cep telefonlarıyla, web siteleriyle bağlantıya mı ihtiyacınız var?

** Tartışma IDE Stackoverflow soru olarak kayboldu. Son Özeti Java birçok ücretsiz IDE var ama benim görüşüme göre karşılaştırmak değil) Visual Studio'nun gücüne ve eklentilerine dikkat edin, ancak Visual studio'nun lisans başına maliyetini not edin.

Geliştirme ekibinizin zaten hangi becerilere sahip olduğuna bakmanız gerekir, çünkü bu ilk etkiyi yaratacaktır. Daha hızlı olan ne burada ne de dil/çerçevede deneyimli bir kullanıcı var. Sanırım hangi dili sadece sözdizimi olduğu için değil, dilin kullandığı araçlar ve çerçeve de dikkate almanız gerektiği noktasını getiriyor.

4
JonWillis

Java ve .NET, Java 1.2 en fazla 1.6 ve .NET 1 en fazla 4.0, yaklaşık 10 üzerinden) arasında ileri geri döndüm yıllık mesleki deneyim (bundan önce C/C++ programcısı olmak).

Bir kerede, .NET 2.0 gibi, Java ve C # 'ın özellikle arka uç çalışmaları için yaklaşık olarak aynı olacağını söyleyebilirim. Dil yapıları hala çok benzerdi. muhtemelen Visual Studio'daki WinForms tasarımcısı nedeniyle masaüstü UI programlamasında Edge kazandı ve Java, öncelikle IIS ile sıkışıp kalmamanız nedeniyle Web/Sunucu öğelerinde Edge'e sahip olurdu.

Şimdi .NET 3.5 ve 4'e geçiyorum, .NET'e verimlilik veriyoruz, eller aşağı. Bence bu çok daha hızlı gelişen bir dildir, çünkü MS, JCP'nin politikaları aracılığıyla değişiklikleri zorlamak yerine, dil kararlarını nispeten hızlı bir şekilde yapabilir. Büyük gelişmeler var anahtar kelimesi, Linq'in tamamı, Uzantı Yöntemleri, Null birleştirme operatörü ??, dynamic ve muhtemelen verimliliği gerçekten artıran çok daha fazla şey.

Şimdi, bir proje için "en üretken" dil neredeyse her zaman en geliştiricilerin en rahat ve deneyimli dilidir. Öğrenme eğrisi her zaman en büyük verimlilik katilidir.

3
rally25rs

Fark ettiğim bir şey, birçok C # /. NET mağazasının "burada icat edilmedi" tutumuna sahip olması ve tüm üçüncü taraf/açık kaynak kütüphanelerini yasaklaması, birçok Java mağazasının açık kaynak kütüphanelerini kullanmaya daha istekli olması. Ayrıca Java için daha fazla kütüphane mevcut gibi görünüyor. .NET'teki bazı harika üçüncü taraf kitaplıklarına baksanız bile NHibernate, NPOI, Spring.NET, vb. Java kitaplıklarının bağlantı noktalarıdır ve bu nedenle bunların arkasındadırlar. Bu yeniliklerin birçoğu Java 'a ilk geldi ve daha sonra bir .NET portu oluşturulmuş gibi görünüyor. Kütüphane açısından yeni yenilikçi keşifler açısından kesinlikle Java kazanıyor gibi görünüyor.

Yine de Microsoft bazı resmi kütüphaneler yapıyor. ASP MVC, LINQ, vb. Ancak genellikle ASP gibi Struts, Spring MVC, vb. Gibi MVC üçüncü taraf kütüphaneleri Java ve Microsoft için zaten dışarıdaydı model görünüm denetleyicisi web paradigmasına geç kalmıştı.

Tabii ki, bu kütüphanelerin birçoğu tonlarca zaman kazandırır ve sizi daha üretken hale getirir. Çekirdek dil ile çekirdek dil C # ve Java o kadar farklı değildir ve benim için aramaya çok yakındır. Üçüncü taraf kütüphanelerin ordusuna atın ve ölçek kesinlikle Java'ya doğru eğildi. Yine de açık bir dükkanla bu eğimin çoğu dengeler. Bu sadece bir sürü .NET mağaza burada icat değil tutum var bir sürü Java dükkan iş yapmak için ne gerekiyorsa ... Bu bile çalıştığım şirket içinde doğrudur. Java ekibinin onaylanmış birçok üçüncü taraf kütüphanesi/yardımcı programı varken NET ekibi (yönetim nedeniyle) fazla bir şey alamıyor. Ayrıca .NET ile çok daha iyi şeyler ücretsiz değildir (örneğin, Microsoft ofis belgeleriyle çalışmak istiyorsanız NPOI'dan önce [ofis otomasyonunu saymaz] çözümlerin çoğu ücretsiz değildir. Java2001'den beri POI vardı NPOI 2008'e kadar çıktı sanmıyorum, npoi proje sitesine dayalı söylemek zor.

3
Cervo

Sözdizimi ve araçlardaki benzerlikle, C # veya Java) 10 - 15 kişilik iş projenizde önemli bir fark yaratacak büyüklükte değil. gibi konularda daha yakından:

  1. Projenin gereksinimleri nelerdir ve bu gereksinimleri hangi dil yetenekleri karşılar (ör. Çapraz platform ve zengin Windows istemcisi).
  2. Ekibimin verimli bir şekilde çalışmasını sağlayacak bir proje yaklaşımı/metodolojisi olarak neler yerleştirebilirim.
  3. Önemli bir proje için mümkün olan en iyi ekibi kullandığımdan, elde tuttuğumdan ve tam olarak kullandığımdan emin olmak için çalışma ortamı hakkında ne yapabilirim?.

Bence, sorunun arkasındaki önermenin "(C # ve Java) arasındaki verimlilik farklılıklarının gerekli yatırımı önemli ölçüde etkileyebileceğini ve pazara sunma süresinin" doğru olmadığını öne sürüyorum. Bazı farklar olacağından şüphe etmiyorum ama önemli olmayacaktı.

3
AlexC

Kendime bu soruyu çok sordum: hangisi daha iyi? C # veya Java?

Size bir tavsiye vereceğim ve bu tavsiye araştırmamın sonucudur: Hiçbiri daha iyi değil, sadece iyi bildiğiniz dil ve çok sayıda büyüleyici uygulama yapabilirsiniz.

Bir dili kullanarak programlamayı ve sonra kendinizi çok eğitmeyi öğrenin ve onunla kod yazma konusunda mükemmel olduğunuzda, diğer dilleri düşünün ve bana inanın, bir parça kek gibi diğer dilleri öğreneceksiniz.

0
Salah