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.
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.
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.
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:
object.getSomeProperty()ve
object.SomePropertyYazıp yazmadığı veya lambda'ya karşı anonim bir iç sınıf kullanması, şirketinizin rekabet avantajında kayda değer bir fark yaratmayacaktır ...
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.
Bende: Java 10 yıl, C # 8 yıl
Java için
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.
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:
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.
Ü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.
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.
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.
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:
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ı.
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.