it-swarm-eu.dev

Java vs. C # - perspektiva produktivity

Máte-li několikaleté zkušenosti s prací s Java a mnohaleté zkušenosti s prací s C # a .NET), vážím si vašeho názoru na rozdíly v produktivitě vývoje softwaru mezi těmito dvěma prostředími. Jeden z našich zákazníků uvažuje o nahrazení stávajícího softwarového řešení, protože výměna bude vyžadovat přibližně 10 - 15 pracovních let za rok, volba pro Java nebo .NET) na základě rozdílů v produktivitě mezi nimi , může výrazně ovlivnit požadované investice a dobu uvedení na trh.

Mohli byste nám poskytnout informace o rozdílech v produktivitě vývoje softwaru mezi Java a C # /. NET?) Raději bych dostal odpověď následovně:

Moje zkušenost je založena na X leté zkušenosti s prací s Java a X leté zkušenosti s prací s C # /. NET. Java je X% produktivnější než C # .NET nebo C # /. NET je o X% produktivnější než Java, pokud vezmete v úvahu následující skutečnosti).

34
Edin Dazdarevic

Moje zkušenost je založena na 10leté zkušenosti s prací s Java a 3leté zkušenosti s prací s C # /. NET. Java je 0% produktivnější než C # .NET Toto je založeno na psaní back-end aplikací založených na službách.
C # /. NET je možná o 5% produktivnější než Java pro psaní uživatelských aplikací.) Ale pak jsem to neudělal téměř 5 let v Java a nový editor uživatelského rozhraní Netbeans mohl tuto mezeru uzavřít.

Chcete zvýšit produktivitu? CI (ideálně kontinuální dodávka) a automatizované testy. Produktivita získaná výběrem jazyka/platformy/IDE na jakémkoli hlavním jazyce/platformě/IDE je poměrně malá.

17
mlk

Na projektech pracuji jak na vysoké škole, tak v reálném světě ™ a používám Java a C # již 5 let).

Ruce dolů Užívám si C # více, protože je to stručnost a použití syntaktického cukru. V C # jen zřídka najdete kód Factory.GetFactory(OfFactory.GetFactory(Factory));. Čtení a sledování je jednodušší, protože syntaxe je menší a stručnější.

S kterým z vás bude produktivnější? To záleží na typu projektu.

Navrhujete stolní aplikaci pro Windows? Pak je C # nejlepší volbou, protože je výkonný IDE Visual Studio a .NET Framework umožňuje vytváření GUI velmi jednoduchým.

Upřímně řečeno, jsem rád, že už nepoužívám Java (již je to více než rok)), protože si pamatuji, jak strašně podrobný musí být kód. Rychlým příkladem je zpracování výjimek. váš kód může vyvolá výjimku, kterou musíte účet pro každou jedinou možnou výjimku. Tím se triviální kód rychle změní na 20 řádek + nestvůra.

C # není tak držen rukou, pokud se rozhodnete ponechat kód otevřený, o kterém se rozhodnete jako vývojář.

C # také během roku udělal mnoho doplňků, díky kterým je radost používat. Lambdové, delegáti, anonymní funkce (a la Ruby), spousta dobrých malých věcí, které najdete.

43
Sergio

Ve velké míře jsem pracoval s oběma Java (od roku 1996) a .Net (od roku 2002) a v roce 2010 jsem ve své společnosti udělal rozhodnutí jít s Java na základě toho, že by bylo nejproduktivnější prostředí celkově.

Všimněte si, že definuji produktivitu vývoje softwaru z hlediska obchodní hodnoty vytvořené na jednotku nákladů/zdrojů, a to end-to-end (tj. Musíte se podívat na produktivitu celého životního cyklu softwaru včetně nasazení a údržby, nikoli pouze počáteční kódování !!).

Zde jsou klíčové prvky mého uvažování:

  • Syntaxe je malý faktor produktivity - zatímco Java je určitě podrobný a já dávám přednost syntaxi C #, na tom prostě moc nezáleží. Ať už vaši vývojáři píší object.getSomeProperty() vs. object.SomeProperty Nebo používají anonymní vnitřní třídu vs. lambda, jednoduše nezpůsobí znatelný rozdíl oproti konkurenční výhodě vaší společnosti ....
  • Ekosystém knihovny je rozhodující - při vývoji moderního softwarového produktu nechcete vyvíjet spoustu běžných komponent od nuly. Ekosystém Java má jasnou výhodu, pokud jde o počet a kvalitu knihoven s otevřeným zdrojovým kódem (zejména knihoven vyvinutých Apache, Google, Eclipse Foundation a RedHat/JBoss).
  • Přenosnost/flexibilita nasazení - Vím, že mohu nasadit JVM na téměř jakékoli platformě, včetně velkých levných clusterů Linuxu. S .Net jste omezeni na prostředí Windows. S pokroky v možnostech cloudového hostování jsem to považoval za docela důležitou výhodu.
  • Scala a Clojure jsou životaschopné možnosti vývoje na JVM, pokud chcete pokročilé jazykové funkce. Je to realistická možnost, jak se vyvíjet v Java, ale ponechat otevřenou možnost přesunout se do Scala nebo Clojure v průběhu času. Do jisté míry se jedná o jazyky „další generace“, o kterých si myslím, že jsou před oběma Java a C #, takže mě to ujistilo, že platforma Java má dobrou budoucnost, pokud jde o jazykové inovace . (Java 7 a 8 vypadala slibně, ale já jsem se přesně nedržela dechu ....)
  • Náklady na údržb se ve skutečnosti zdálo být docela příznivé vůči Javě. Java má jednodušší syntaxi než C #, což znamená více výřečnosti, ale na druhé straně to znamená, že lidé mají tendenci psát více spravovatelného kódu - je prostě těžší napsat "chytrý kód". Kromě toho svět Java klade mnohem větší váhu zpětné kompatibility než svět .Net, který bude výhodný z hlediska nákladů na údržbu v průběhu několika let.
  • Nezávislost dodavatele - poté, co jsem v minulosti viděl společnosti vypalovat blokováním dodavatele, cítil jsem, že je výhodou jít spíše s relativně otevřenějším ekosystémem Java než Microsoft- dominoval. Net svět. Například bych raději měl na výběr databází, než aby byl tlačen do používání SQL Server (a Push je docela silný, a to jak prostřednictvím podpory nástroje a typické dovednosti vývojářů .Net). Udržování nezávislosti dodavatele vašich klíčových produktů je podle mého názoru chytrý dlouhodobý krok. Posoudil jsem (správně, jak se ukázalo), že OpenJDK bude budoucností Java, takže budu efektivně stavět na open source platformě.
  • Talent - to je samozřejmě subjektivní, ale byl jsem ohromen technickou schopností vývojářů ve světě Java než ve světě .Net. Průměrně jsem měl dojem, že vývojáři .Net měli tendenci dělat cokoli, co společnost Microsoft poskytla pro snadné nástroje nebo šablony, zatímco vývojáři Java se více zajímali o nalezení správného řešení z pohledu softwarového inženýrství. To je zcela subjektivní a bezpochyby závisí na konkrétní lokalitě/trhu a zjevně bylo mnoho jednotlivců, kteří se tomuto vzoru nehodili, takže YMMV samozřejmě.
  • Nástroje byly o úrovni. Microsoft má mnoho skvělých, snadno použitelných nástrojů, které by byly obzvláště přitažlivé pro vývoj na Windows. Pracuji však především na vývoji na straně serveru, kde bych argumentoval, že nástroje Java mají Edge. Zejména se Maven ukázal jako extrémně silný nástroj v ekosystému Java, o kterém si stále nemyslím, že má ve světě .Net slušný ekvivalent.

Takže i když zde bylo spousta komplexních úvah, celkově jsem docela spokojený s výběrem jít s Java, a dnes bych učinil stejnou volbu (od začátku roku 2012).

Pravděpodobně jediným případem, kdy bych šel s .Net, by bylo, kdybych vyvíjel stolní aplikaci pouze pro Windows (kde je výhoda .Net zjevně obrovská).

24
mikera

Mám: Java 10 let, C # 8 let)

Hlasuji Java pro

  1. Žádné uzamčení dodavatele (můžete změnit aplikační/webové servery z linuxu na Windows na Unix)
  2. Interoperabilita/zaměnitelnost balíčků třetích stran, jako je JasperReports JFreeChart, JSF nebo Spring
  3. Většina inovací pochází odtud (Log4j, Mravenec, Jaro, Hibernace a dále a dále)
  4. Funguje na více aplikačních serverech (podobně jako A). Například JBoss, Tomcat, WebSphere, GlassFish, WebLogic
9
pat

Mám více než 10 let zkušeností s Java (od verze 1.1, opravdu!)) A 7 let zkušeností s .NET (většinou C #).

Musíte se přesto rozhodnout, ale většinou byste se měli pokusit rozdělit na několik scénářů:

Desktopová aplikace

Pokud vyvíjíte stolní aplikaci, musíte jít s hlavní platformou, se kterou budete pracovat. Pokud to používá platforma Microsoft .NET, neexistuje lepší řešení než platforma vyvinutá samotnou mateřskou lodí. Pokud se jedná o scénář pro Linux nebo více platforem, zvažte uvážení Java nebo přechod na webové řešení).

Webová aplikace

Je to velmi těžké rozhodnutí, protože každý má svou vlastní sílu a slabost. Zde je několik:

C #

Síla: V současné době má větší dynamika budování nových funkcí do jazyka a platformy/rámce. Vše pochází od jednoho dodavatele a rozhodně je to výhoda. Můžete také použít některé velmi výkonné komponenty, jako je například DevExpress (Java nemá ani blízko, aby měla něco jako to, co tým DX dal dohromady v průběhu let, což představuje obrovské zvýšení produktivity).

Slabost: Pro podnikové aplikace .NET není tak zralá jako Java. Nemáte tolik dodavatelů, kteří vytvářejí podnikový software v .NET, jako máte pro Javu.

Java

Síla: Zralejší (již vysvětlená) a má velkou komunitu s několika skvělými open source projekty, které mohou pomoci. Několik tzv. Open source projektů je opravdu jen kopií projektů z Javy.

Slabost: Oracle vlastní Java (já vím, ne JCP)) a to je určitě riziko, které je třeba vzít v úvahu. Jejich záměry nejsou příliš jasné a já osobně se mi nelíbí, kde jazyk právě probíhá (vím hodně Java vývojáři mají podobné obavy).

Aplikace na straně server

Je to v podstatě stejné argumenty jako webové aplikace, ale protože se nemusíte příliš obávat o UI Java v tomto případě zesílí. Ale znovu, pokud je platforma většinou Windows .NET může být lepší volbou.

Celkové úvahy

Celkově mám za to, že .NET má výhodu hlavně z důvodu těsné integrace Visual Studio 2010 (předání nejlepších IDE), MS SQL, Entity Framework, IIS a tak dále. To vše představuje obrovské zvýšení produktivity a mám spoustu zkušeností, které to dokazují. Také pracuji s většinou Java vývojáři, kteří se obrátili na .NET a sdílejí v podstatě stejný názor.

Myslím, že je také dobré, že Microsoft je silnější, než kdy předtím, což znamená, že .NET tam bude chvíli. Takže když se dívám o 10-15 let dopředu, cítím se bezpečnější .NET než Java.

6
Alex

Java: 5 let (nespojité)
C #: 7 let

Nevěřím, že takto můžete kvantifikovat produktivitu. To do značné míry závisí na individuálním vývojáři a projektu. Využijte to, co vaši vývojáři vědí.

pravit:
Pojďme definovat „typickou podnikovou aplikaci“ jako:

  • víceúrovňový
  • klient-server
  • DB couvala

To dokážou oba Java a C #. Není to ani tak otázka jazyka, ale rámce/runtime. Opět platí, co vaši vývojáři vědí. Mohou se naučit nový jazyk a nový rámec, ale vyžaduje to čas, abych si ho zahrál. To by platilo pro stolní aplikaci. Oba jazyky lze použít s mnoha nástroji/liby GUI, ale všechny mají různé přístupy a filozofie.

6
EricSchaefer

Jsem nedávno absolvovaný student univerzity, ale měl jsem komerční zkušenosti s oběma jazyky, celkem tedy asi 3 roky Java a 4 roky C # .Net (poznámka .net znamená, že můžete použít C #, VB.net, C++ CLI a J # a F #).

Nyní řeknu, že moje celková preference je C # před Javou, zatímco obě mají podobnou syntaxi, líbí se mi síla. Musíte důrazně zvážit, co musíte postavit? Je to jen aplikace pro stolní počítače? Potřebujete připojení k jiným klientům, tedy k jiným stolním počítačům, mobilům, webům?

** Diskuse o IDE ztraceno jako otázka u Stackoverflow byla uzavřena. End Gist of it Java má mnoho bezplatných IDE, ale podle mého názoru se nesrovnávají) k síle a doplňkům vizuálního studia. Všimněte si však nákladů za studiové studio za licenci.

Musíte se podívat na to, jaké dovednosti váš vývojový tým již má, protože to bude mít počáteční dopad. Což je rychlejší, ani zde není zkušený uživatel v jazyce/rámci. Což myslím, že upozorňuje na to, že nesmíte uvažovat o jazyce, protože jazyk je jen syntaxí, ale nástroje a rámec, který jazyk používá.

4
JonWillis

Překlopil jsem tam a zpět mezi Java a .NET), počínaje Java 1,2 až 1,6 a .NET 1 až 4,0, přes asi 10) let odborné praxe (dříve programátor C/C++).

Najednou, stejně jako .NET 2.0, bych řekl, že Java a C # by byly zhruba stejné, zejména pro back-end práci. Jazykové konstrukce byly stále velmi podobné. NET by měl Pravděpodobně získal Edge v programování uživatelského rozhraní pro stolní počítače, a to díky návrháři WinForms ve Visual Studio, a Java by měl Edge ve věcech Web/Server, hlavně proto, že jste nebyli přilepeni k IIS.

Nyní přecházím na .NET 3.5 a 4, dávám produktivitu Edge na .NET, hands-down. Podle mého názoru je to především proto, že .NET je mnohem rychlejším vyvíjejícím se jazykem, protože členské státy mohou přijímat jazyková rozhodnutí relativně rychle, na rozdíl od prosazování změn politikou JCP. Velkými vylepšeními jsou klíčové slovo var, celá řada Linq, Extension Methods, operátor Null-coalescing ??, dynamic a pravděpodobně mnohem více skvělých věcí, které skutečně zvyšují produktivitu.

Nyní, to znamená, že „nejproduktivnější“ jazyk pro projekt je téměř vždy ten, s nímž jsou nejvíce vývojáři nejpohodlnější a nejzkušenější. Křivka učení je vždy největším zabijákem produktivity.

3
rally25rs

Jedna věc, kterou jsem si všiml, je mnoho obchodů C # /. NET má přístup "nevynalezen zde" a zakazuje všechny knihovny třetích stran/open source, zatímco mnoho obchodů Java je více ochotno používat knihovny otevřených zdrojů. Zdá se, že existuje více knihoven pro Javu. I když se podíváte na některé skvělé knihovny třetích stran v .NET, např. NHibernate, NPOI, Spring.NET atd. Jsou porty knihoven Java, a proto jsou za nimi. Určitě se zdá, že mnoho z těchto inovací přišlo nejprve na Java a po čase byl vytvořen .NET port. Z pohledu knihovny se zdá, že Java vyhrává, pokud jde o nové inovativní objevy.

Microsoft přesto pořádá některé oficiální knihovny, např. ASP MVC, LINQ atd. Ale často jako u ASP Knihovny třetích stran jako Struts, Spring MVC atd. Již byly venku pro Java a Microsoft byl pozdě vstupující do webového paradigmatu ovladače zobrazení modelu.

Mnoho z těchto knihoven samozřejmě ušetří spoustu času a učiní vás produktivnějšími. Základní jazyk na základní jazyk C # a Java nejsou tak odlišné a pro mě je příliš blízko k tomu, aby se dalo volat. Hodit do armády knihoven třetích stran a měřítko se určitě nakloní směrem k Javě. Stále s otevřeným obchodem se hodně naklonění vyvažuje. Je to jen spousta .NET obchodů nemá zde vynalezený přístup, zatímco spousta Java obchodů je čímkoli, co je potřeba k provedení práce ... To platí i ve společnosti, ve které pracuji,. NET tým nemá moc (kvůli správě), zatímco tým Java má mnoho schválených knihoven/utilit třetích stran. Také s .NET není mnoho dobrých věcí zdarma (např. Před NPOI, pokud jste chtěli pracovat s kancelářskými dokumenty Microsoft, většina řešení [nepočítá se automatizace kanceláří] nebyla zdarma.) Java měl POI od roku 2001. Nemyslím si, že by NPOI vyšel až do roku 2008, na základě projektu npoi je těžké to říct.

3
Cervo

S podobností v syntaxi a nástrojích, produktivita zisky buď z C # nebo Java nejsou řádově takové velikosti, aby významně změnily váš pracovní projekt 10 - 15 mužských let. podrobněji v otázkách jako:

  1. Jaké jsou požadavky projektu a jaké jazykové schopnosti tyto požadavky splňují (např. Mezi platformami a bohatými klienty Windows).
  2. Co mohu zavést jako projektový přístup/metodiku, která umožní mému týmu pracovat produktivně.
  3. Co mohu dělat s pracovním prostředím, abych zajistil, že zaměstnávám, udržuji a plně využívám nejlepší možný tým pro významný projekt.

Navrhoval bych, že podle mého názoru, předpoklad za otázkou, že „rozdíly v produktivitě mezi (C # a Java) mohou významně ovlivnit požadované investice a dobu uvedení na trh“, nejsou pravdivé. Nepochybuji o nějakém rozdílu, ale nebude to významné.

3
AlexC

Ptal jsem se na tuto otázku hodně: což je lepší? C # nebo Java?

Poradím vám a tato rada je závěrem mého výzkumu: Žádný z nich není lepší, nejlepší je pouze jazyk, který dobře znáte a s ním můžete provádět spoustu fascinujících aplikací.

Naučte se, jak programovat a potom se hodně trénovat pomocí jednoho jazyka, a když se s ním stanete dokonalým v psaní kódu, přemýšlet o jiných jazycích a věřit mi, naučíte se ostatní jazyky jako kousek dortu.

0
Salah