Java vs. C # - Prospettiva di produttività [chiusa]

34

Se hai un certo numero di anni di esperienza nel lavorare con Java e un numero di anni di esperienza nel lavorare con C # e .NET, apprezzerei la tua opinione sulle differenze di produttività dello sviluppo del software tra questi due ambienti. Uno dei nostri clienti sta valutando la possibilità di sostituire la soluzione software esistente. Poiché la sostituzione richiederà ca. 10 - 15 anni di lavoro, una scelta per Java o .NET, basata su differenze di produttività tra di essi, può influenzare in modo significativo l'investimento richiesto e il time-to-market.

Sareste in grado di fornirci un'indicazione delle differenze di produttività dello sviluppo del software tra Java e C # /. NET? Preferirei ricevere una risposta come segue:

My experience is based on X years experience working with Java and X years experience working with C#/.NET. Java is X% more productive then C#.NET or C#/.NET is X% more productive than Java if you take the the following into account.

    
posta Edin Dazdarevic 25.02.2011 - 13:48
fonte

11 risposte

16

La mia esperienza si basa su 10 anni di esperienza lavorativa con Java e 3 anni di esperienza lavorativa con C # /. NET. Java è 0% più produttivo di C # .NET. Questo si basa sulla scrittura di applicazioni basate sul servizio di back-end.
C # /. NET è forse il 5% più produttivo di Java per la scrittura di applicazioni utente. Ma poi non l'ho fatto da quasi 5 anni in Java e il nuovo editor dell'interfaccia utente di Netbeans avrebbe potuto colmare il divario.

Vuoi aumentare la produttività? CI (idealmente Consegna continua) e test automatici. La produttività ottenuta dalla lingua / piattaforma / scelta IDE su qualsiasi lingua / piattaforma / IDE principali è abbastanza piccola.

    
risposta data 25.02.2011 - 17:35
fonte
41

Ho lavorato a progetti sia in college che in Real World ™ utilizzando Java e C # per 5 anni.

Mani giù Mi piace usare C # in più a causa della sua succinta sintassi e dell'uso dello zucchero di sintassi. Raramente troverai un codice Factory.GetFactory(OfFactory.GetFactory(Factory)); in C #. È più facile da leggere e seguire perché la sintassi è più piccola e più sintetica.

Con quale diventi più produttivo? Dipende dal tipo di progetto.

Stai progettando un'applicazione desktop per Windows? Quindi C # è la scelta migliore grazie al suo potente IDE Visual Studio e .NET Framework rende la creazione di GUI molto semplice.

Francamente, sono contento di non usare più Java (è passato più di un anno) perché ricordo quanto fosse orribilmente prolisso il codice. Un rapido esempio è la gestione delle eccezioni. Se il tuo codice può generare un'eccezione, devi tenere conto di ogni singola eccezione possibile. Questo trasforma rapidamente il codice banale in una 20 riga + mostruosità.

C # non è come tenere in mano, se decidi di lasciare il tuo codice aperto a te come sviluppatore per decidere.

C # ha anche apportato molte aggiunte nel corso dell'anno che ne fanno una gioia da usare. Lambdas, delegati, funzione anonima (a la Ruby), tante piccole cose buone che troverai mentre prosegui.

    
risposta data 25.02.2011 - 14:27
fonte
23

Ho lavorato molto sia con Java (dal 1996) che con .Net (dal 2002) e nel 2010 ho fatto una decisione di andare con Java nella mia azienda sulla base del fatto che sarebbe stato il ambiente più produttivo in generale .

Si noti che definisco la produttività dello sviluppo del software in termini di valore di business creato per unità di costo / risorsa, su base end-to-end (ovvero si deve considerare la produttività dell'intero ciclo di vita del software compresa l'implementazione e la manutenzione, non solo la codifica iniziale !!).

Ecco gli elementi chiave del mio ragionamento:

  • La sintassi è un fattore minore nella produttività - mentre Java è certamente prolisso e preferisco la sintassi di C #, semplicemente non ha molta importanza. Se i tuoi sviluppatori digitano object.getSomeProperty() rispetto a object.SomeProperty o utilizzi una classe interna anonima rispetto a una lambda, semplicemente non apporteranno alcuna differenza apprezzabile al vantaggio competitivo della tua azienda ....
  • L'ecosistema della biblioteca è fondamentale: lo sviluppo di un prodotto software moderno non ti consente di sviluppare molti componenti comuni da zero. L'ecosistema Java ha un chiaro vantaggio in termini di numero e qualità delle librerie open source (specialmente quelle sviluppate da Apache, Google, Eclipse Foundation e RedHat / JBoss)
  • Portabilità / flessibilità di implementazione - So di poter distribuire una JVM praticamente su qualsiasi piattaforma, compresi i grossi cluster Linux economici. Con .Net, sei limitato agli ambienti Windows. Con i progressi delle opzioni di cloud hosting, ho ritenuto questo un vantaggio piuttosto importante.
  • Scala e Clojure sono entrambe opzioni valide per lo sviluppo su JVM se desideri funzionalità linguistiche avanzate. È un'opzione realistica da sviluppare in Java, ma tieni aperta l'opzione per passare a Scala o Clojure nel tempo. In una certa misura si tratta di linguaggi di "prossima generazione" che penso siano in anticipo sia su Java che su C #, quindi questo mi ha rassicurato sul fatto che la piattaforma Java ha un buon futuro in termini di innovazione linguistica. (Java 7 e 8 sembravano promettenti, ma non stavo esattamente trattenendo il respiro ...)
  • I costi di manutenzione in realtà sembravano essere piuttosto favorevoli nei confronti di Java. Java ha una sintassi più semplice di C # che significa più verbosità, ma sul lato opposto significa che le persone tendono a scrivere un codice più gestibile - è semplicemente più difficile scrivere "codice intelligente". Inoltre, il mondo Java attribuisce maggiore importanza alla retrocompatibilità rispetto al mondo .Net, che sarà vantaggioso in termini di costi di manutenzione per diversi anni.
  • Indipendenza del fornitore - avendo visto le aziende che venivano bruciate dal lock-in del fornitore in passato, ritenevo che fosse un vantaggio andare con l'ecosistema Java relativamente più aperto piuttosto che con il mondo .Net dominato da Microsoft. Ad esempio, preferirei avere la scelta dei database piuttosto che essere spinto a utilizzare SQL Server (e la spinta è abbastanza strong, attraverso sia il supporto degli strumenti che il tipico skillset degli sviluppatori .Net). Mantenere indipendente il vostro principale fornitore di prodotti di investimento è, a mio avviso, una mossa intelligente a lungo termine. Ho giudicato (correttamente come si è scoperto) che OpenJDK sarebbe il futuro di Java, quindi mi piacerebbe davvero costruire su una piattaforma open source.
  • Talento - questo è soggettivo, naturalmente, ma sono rimasto più impressionato dalle capacità tecniche degli sviluppatori nel mondo Java che nel mondo .Net. La mia impressione, in media, era che gli sviluppatori .Net avevano la tendenza a fare qualsiasi cosa fornisse semplici strumenti o modelli a Microsoft, mentre gli sviluppatori Java tendevano a preoccuparsi di trovare la soluzione giusta dal punto di vista dell'ingegneria del software. Questo è completamente soggettivo e senza dubbio dipende dalla specifica località / mercato e c'erano chiaramente molte persone che non si adattavano a questo modello, quindi YMMV naturalmente.
  • Gli strumenti erano di livello. Microsoft ha un sacco di ottimi strumenti facili da usare che sarebbero particolarmente interessanti per lo sviluppo su Windows. Comunque sto lavorando principalmente sullo sviluppo lato server, dove direi che gli strumenti Java hanno il vantaggio. In particolare, Maven ha dimostrato di essere uno strumento estremamente potente nell'ecosistema Java che ancora non ritengo abbia un equivalente decente nel mondo .Net.

Quindi, anche se ci sono state molte considerazioni complesse, nel complesso sono abbastanza felice della scelta di andare con Java, e oggi farei la stessa scelta (dall'inizio del 2012).

Probabilmente l'unico caso in cui vorrei andare .Net sarebbe se stessimo sviluppando un'applicazione desktop solo per Windows (dove il vantaggio .Net è chiaramente enorme).

    
risposta data 09.01.2012 - 10:50
fonte
9

Ho: Java 10 anni, C # 8 anni

Io voto Java per

  1. Nessun fornitore si blocca (puoi cambiare app / web server da linux a windows in Unix)
  2. Interoperabilità / Intercambiabilità di pacchetti di terze parti, come JasperReports JFreeChart, JSF o Spring
  3. La maggior parte dell'innovazione viene da qui (Log4j, Ant, Spring, Hibernate e così via)
  4. Funziona su più server di applicazioni (un po 'come A). Ad esempio JBoss, Tomcat, WebSphere, GlassFish, WebLogic
risposta data 23.03.2011 - 07:01
fonte
6

Java: 5 anni (non continuo)
C #: 7 anni

Non credo che tu possa quantificare la produttività in questo modo. Ciò dipende in gran parte dal singolo sviluppatore e dal progetto. Usa quello che sanno i tuoi sviluppatori.

Modifica
Definiamo "tipica applicazione aziendale" come:

  • multi livelli
  • client / server
  • DB supportato

Sia Java che C # possono farlo. Non è tanto una questione di linguaggio, ma di framework / runtime. Ancora una volta, usa ciò che i tuoi sviluppatori sanno. Possono imparare una nuova lingua e una nuova struttura, ma ci vuole del tempo per farlo. Sarebbe vero per un'app desktop. Entrambi i linguaggi possono essere utilizzati con numerosi toolkit / librerie GUI, ma hanno tutti approcci e filosofie diversi.

    
risposta data 25.02.2011 - 14:33
fonte
6

Ho più di 10 anni di esperienza con Java (dalla versione 1.1, davvero!) e 7 anni di esperienza con .NET (principalmente C #).

Hai una decisione ben precisa, ma soprattutto dovresti provare a suddividere in un paio di scenari:

Applicazione desktop

Se stai sviluppando un'applicazione desktop devi andare con la piattaforma principale con cui lavorerai. Se si tratta di una piattaforma Microsoft che utilizza .NET, non esiste una soluzione migliore della piattaforma sviluppata dalla nave madre stessa. Se si tratta di uno scenario Linux o Multi-piattaforma, considera Java o passa a una soluzione basata sul Web.

Applicazione basata sul Web

Questa è una decisione molto difficile da prendere perché ognuno ha la propria forza e debolezza. Eccone alcuni:

C #

Forza: Attualmente ha più slancio nella costruzione di nuove funzionalità nel linguaggio e nella piattaforma / framework. Tutto viene da un fornitore e sicuramente questo è un vantaggio. Puoi anche utilizzare alcuni componenti molto potenti come DevExpress, ad esempio (Java non si avvicina nemmeno ad avere qualcosa di simile a quello che il team DX ha messo insieme nel corso degli anni e questo rappresenta un enorme incremento di produttività).

Debolezza: Per le applicazioni aziendali. NET non è maturo come Java. Non hai molti produttori che creano software enterprise in .NET come per Java.

Java

Forza: Più maturo (già spiegato) e ha una grande comunità con diversi grandi progetti open source che possono aiutare. Diversi progetti .NET cosiddetti open source sono in realtà solo una copia di progetti di Java.

Debolezza: Oracle possiede Java (lo so, non il JCP) e questo è sicuramente un rischio da prendere in considerazione. Le loro intenzioni non sono molto chiare e personalmente non mi piace dove la lingua sta andando adesso (so che molti sviluppatori Java hanno preoccupazioni simili).

Applicazione lato server

Fondamentalmente sono gli stessi argomenti delle applicazioni basate sul web, ma perché non devi preoccuparti troppo dell'interfaccia utente Java diventa più strong in questo caso. Ma ancora una volta, se la piattaforma è per lo più Windows .NET potrebbe essere una scelta migliore.

Considerazioni generali

Nel complesso, a mio avviso, .NET ha il vantaggio soprattutto a causa della stretta integrazione di Visual Studio 2010 (non ci sono i migliori IDE disponibili), MS SQL, Entity Framework, IIS e così via. Tutto ciò rappresenta un enorme aumento di produttività e ho un sacco di esperienza che lo dimostra. Inoltre, lavoro principalmente con sviluppatori Java che si sono rivolti a .NET e condividono sostanzialmente la stessa opinione.

Penso che sia anche un buon punto che Microsoft sia più strong che mai che .NET sarà lì per un po '. Quindi quando guardo 10-15 anni avanti mi sento più sicuro con .NET che Java.

    
risposta data 28.08.2011 - 02:17
fonte
4

Sono uno studente appena laureato all'università, ma ho avuto esperienze commerciali con entrambe le lingue, per un totale di circa 3 anni java e 4 anni C # .Net (nota .net significa che puoi usare C #, VB.net, C ++ CLI e J # e F #).

Ora stabilirò che la mia preferenza generale è C # su Java, mentre entrambi hanno una sintassi simile. Mi piace la potenza del framework .Net sulla compatibilità cross-OS di Java. Devi prendere in seria considerazione, cosa devi costruire? È solo un'applicazione desktop? Hai bisogno di connettività con altri client, quindi altri desktop, cellulari, siti web?

** La discussione sull'IDE persa quando la domanda su Stackoverflow è stata chiusa. Alla fine ce n'era Java ha molti IDE gratuiti ma non sono paragonabili, secondo me, al potere e ai componenti aggiuntivi dello studio visivo. Ma nota i costi di studio in Visual per licenza.

Devi capire quali sono le competenze del tuo team di sviluppo, poiché ciò avrà un impatto iniziale. Quale è più veloce è qui né lì dato un utente esperto in una lingua / framework. Immagino che porti il punto che non devi prendere in considerazione la lingua, dato che la lingua è solo sintassi, ma gli strumenti e il framework che il linguaggio sta usando.

    
risposta data 25.02.2011 - 14:06
fonte
3

Con la somiglianza della sintassi e degli strumenti, i guadagni di produttività di C # o di Java non sono di un ordine di grandezza per fare una differenza significativa nel tuo progetto di lavoro di 10-15 anni uomo. Vorrei esaminare più da vicino problemi come:

  1. Quali sono i requisiti del progetto e quali funzionalità linguistiche soddisfano tali requisiti (ad esempio, cross-platform o rich client Windows).
  2. Cosa posso mettere in atto come approccio / metodologia di progetto che consentirà al mio team di lavorare in modo produttivo.
  3. Cosa posso fare riguardo all'ambiente di lavoro per assicurarmi di impiegare, mantenere e utilizzare appieno il miglior team possibile per un progetto significativo.

Suggerirei, a mio parere, la premessa dietro alla domanda, che "le differenze di produttività tra (C # e Java) possano influenzare in modo significativo l'investimento richiesto e il time-to-market" non è vero. Non dubito che ci sarebbe qualche differenza ma non sarebbe significativo.

    
risposta data 25.02.2011 - 16:37
fonte
3

Ho invertito la rotta tra Java e .NET, iniziando con Java 1.2 fino a 1.6 e .NET 1 fino a 4.0, oltre 10 anni di esperienza professionale (essendo un programmatore C / C ++ prima) .

In una volta, come .NET 2.0, direi che Java e C # sarebbero pressoché uguali, specialmente per il lavoro di back-end. I costrutti linguistici erano ancora molto simili. .NET avrebbe probabilmente guadagnato il vantaggio nella programmazione dell'interfaccia utente desktop, a causa del progettista WinForms in Visual Studio, e Java avrebbe avuto il vantaggio in roba Web / server, principalmente perché non si era bloccati con IIS.

Ora passando a .NET 3.5 e 4, conferisco il margine di produttività a .NET, a mani libere. Questo è principalmente, secondo me, perché .NET è un linguaggio in evoluzione molto più veloce, dal momento che la MS può prendere decisioni linguistiche relativamente velocemente, invece di spingere i cambiamenti attraverso la politica del JCP. I grandi miglioramenti sono la parola chiave var , l'interezza di Linq, i Metodi di estensione, l'operatore Null-coalescing ?? , dynamic , e probabilmente molte altre cose straordinarie che aumentano davvero la produttività.

Ora, detto questo, il linguaggio "più produttivo" per un progetto è quasi sempre quello con cui i più sviluppatori sono i più comodi e con esperienza. La curva di apprendimento è sempre il più grande killer di produttività.

    
risposta data 27.08.2011 - 04:17
fonte
3

Una cosa che ho notato è che molti negozi C # /. NET hanno un atteggiamento "non inventato qui" e vietano tutte le librerie di terze parti / open source mentre molti negozi Java sono più propensi a utilizzare le librerie open source. Inoltre sembrano esserci più librerie disponibili per Java. Anche se si guardano alcune fantastiche librerie di terze parti in .NET, ad es. NHibernate, NPOI, Spring.NET, ecc. Sono porte delle librerie Java e quindi sono dietro di esse. Sicuramente sembra che molte di queste innovazioni arrivino prima a Java e dopo la creazione di una porta .NET. Dal punto di vista della biblioteca, sicuramente sembra che Java vince in termini di nuove scoperte innovative.

Ancora Microsoft crea alcune librerie ufficiali, ad es. ASP MVC, LINQ, ecc. Ma spesso come con ASP MVC, le librerie di terze parti come Struts, Spring MVC, ecc. Erano già disponibili per Java e Microsoft stava entrando in ritardo nel paradigma web del controller della visualizzazione del modello.

Naturalmente, molte di queste librerie risparmiano un sacco di tempo e ti rendono più produttivo. Il linguaggio di base per il linguaggio di base C # e Java non sono così diversi e per me è troppo vicino per chiamare. Getta l'esercito di librerie di terze parti e la scala si inclina certamente verso Java. Ancora con un negozio aperto un sacco di quell'inclinazione saldi. Solo un sacco di negozi .NET hanno l'atteggiamento non inventato qui, mentre molti negozi Java sono ciò che serve per portare a termine il lavoro ... Questo è vero anche nella società in cui lavoro, il team .NET non ha molto (a causa della gestione) mentre il team Java ha molte librerie / utilità di terze parti approvate. Anche con .NET molte più cose buone non sono gratuite (ad esempio, prima dell'NPOI se si voleva lavorare con i documenti dell'ufficio di Microsoft, la maggior parte delle soluzioni [senza contare l'automazione dell'ufficio] non erano gratuite. non pensate che l'NPOI sia uscito fino al 2008, è difficile da dire in base al sito del progetto npoi.

    
risposta data 27.08.2011 - 04:58
fonte
0

Mi sono fatto molte domande: quale è meglio? C # o Java?

Ti darò un consiglio e questo consiglio è la conclusione della mia ricerca: nessuno di loro è migliore, solo la lingua che conosci bene e puoi fare molte applicazioni affascinanti con la migliore.

Scopri come programmare e poi allenarti molto usando una lingua e quando diventi perfetto per scrivere codice con esso, pensa ad altre lingue e credimi, imparerai le altre lingue come un pezzo di torta.

    
risposta data 26.08.2011 - 23:40
fonte

Leggi altre domande sui tag