it-swarm.it

Java vs. C # - Prospettiva della produttività

Se hai molti anni di esperienza con Java e diversi anni di esperienza con C # e .NET, apprezzerei la tua opinione sulle differenze di produttività nello 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à circa 10-15 anni di lavoro, una scelta per Java o .NET, in base alle differenze di produttività tra di loro , può influenzare in modo significativo l'investimento richiesto e il time-to-market.

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

La mia esperienza si basa su X anni di esperienza con Java e X anni di esperienza con C # /. NET. Java è X% più produttivo di C # .NET oppure C # /. NET è X% più produttivo di Java se si tiene conto di quanto segue.

34
Edin Dazdarevic

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

Vuoi aumentare la produttività? CI (consegna idealmente continua) e test automatici. La produttività ottenuta dalla scelta della lingua/piattaforma/IDE su qualsiasi lingua/piattaforma/IDE principale è piuttosto ridotta.

17
mlk

Ho lavorato su progetti sia al college che nel Real World ™ usando Java e C # da 5 anni ormai.

Giù le mani, mi piace usare di più C # per la sua sintonia e l'uso dello zucchero sintattico. Raramente troverai un codice Factory.GetFactory(OfFactory.GetFactory(Factory)); in C #. È più facile da leggere e seguire perché la sintassi è più piccola e più concisa.

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

Stai progettando un'applicazione desktop per Windows? Quindi C # è la scelta migliore perché è potente IDE Visual Studio e .NET Framework rendono la creazione della GUI molto semplice.

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

C # non è come tenere la mano, se decidi di lasciare aperto il codice che è tu a decidere come sviluppatore.

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

43
Sergio

Ho lavorato a lungo con entrambi Java (dal 1996) e .Net (dal 2002) e nel 2010 ho preso una decisione di andare con Java nella mia azienda sulla base del fatto che sarebbe l'ambiente più produttivo in generale.

Si noti che definisco la produttività dello sviluppo del software in termini di valore aziendale creato per unità di costo/risorsa, su base end-to-end (vale a dire, è necessario esaminare la produttività dell'intero ciclo di vita del software, inclusi l'implementazione e la manutenzione, non solo il codifica iniziale !!).

Ecco gli elementi chiave del mio ragionamento:

  • La sintassi è un fattore secondario nella produttività - mentre Java è certamente prolisso e preferisco la sintassi di C #, semplicemente non importa molto. Sia che i tuoi sviluppatori digitino object.getSomeProperty() vs. object.SomeProperty O utilizzino una classe interna anonima rispetto a una lambda, semplicemente non farà alcuna differenza apprezzabile per il vantaggio competitivo della tua azienda ....
  • Library ecosystem è fondamentale: lo sviluppo di un prodotto software moderno, non si desidera sviluppare da zero molti componenti comuni. L'ecosistema Java ha un chiaro vantaggio in termini di numero e qualità delle librerie open source (in particolare quelle sviluppate da Apache, Google, Eclipse Foundation e RedHat/JBoss)
  • Portabilità/flessibilità di implementazione - So di poter implementare una JVM praticamente su qualsiasi piattaforma, inclusi grandi cluster Linux economici. Con .Net sei limitato agli ambienti Windows. Con i progressi nelle opzioni di cloud hosting, ho ritenuto che questo fosse un vantaggio piuttosto importante.
  • Scala e Clojure sono entrambe opzioni praticabili per lo sviluppo su JVM se si desiderano funzionalità linguistiche avanzate. È un'opzione realistica da sviluppare in Java ma mantenere aperta l'opzione per passare a Scala o Clojure nel tempo. In una certa misura si tratta di linguaggi di "prossima generazione" che ritengo siano in anticipo rispetto a Java e C #, quindi questo mi ha rassicurato sul fatto che la piattaforma Java ha un buon futuro in termini di innovazione del linguaggio. (Java 7 e 8 sembravano promettenti, ma non trattenevo esattamente il respiro ....)
  • Costi di manutenzione in realtà sembrava essere abbastanza favorevole nei confronti di Java. Java ha una sintassi più semplice di C # che significa più verbosità ma sul rovescio della medaglia significa che le persone tendono a scrivere codice più gestibile - è semplicemente più difficile scrivere "codice intelligente". Inoltre, il mondo Java attribuisce molta più importanza alla compatibilità con le versioni precedenti rispetto al mondo .Net, che sarà un vantaggio in termini di costi di manutenzione per più anni.
  • Indipendenza del venditore - dopo aver visto le aziende bruciate dal blocco dei fornitori in passato, ho sentito che era un vantaggio andare con l'ecosistema Java relativamente più aperto piuttosto che dominato da Microsoft. Mondo netto. Ad esempio, preferirei scegliere i database piuttosto che essere spinto a utilizzare SQL Server (e Push è abbastanza potente, sia attraverso il supporto degli strumenti che il tipico skillset degli sviluppatori .Net). Mantenere indipendente il fornitore di investimenti del prodotto principale è, a mio avviso, una mossa intelligente a lungo termine. Ho giudicato (giustamente) che OpenJDK sarebbe stato il futuro di Java, quindi avrei effettivamente costruito su una piattaforma open source.
  • Talento - questo è ovviamente soggettivo, ma sono rimasto più colpito dall'abilità tecnica degli sviluppatori nel mondo Java che nel mondo .Net. La mia impressione in media è stata che gli sviluppatori .Net tendevano a fare qualunque cosa Microsoft fornisse strumenti o modelli semplici, mentre gli sviluppatori Java tendevano a preoccuparsi di più di trovare la giusta soluzione 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 ovviamente.
  • Strumenti riguardavano il livello. Microsoft ha molti strumenti fantastici e facili da usare che sarebbero particolarmente interessanti per lo sviluppo su Windows. Tuttavia sto lavorando principalmente allo sviluppo lato server, dove direi che gli strumenti Java hanno Edge. In particolare, Maven ha dimostrato di essere uno strumento estremamente potente nell'ecosistema Java che non credo abbia ancora un equivalente decente nel mondo .Net.

Quindi, sebbene ci fossero molte considerazioni complesse, nel complesso sono abbastanza contento della scelta di andare con Java, e farei la stessa scelta oggi (all'inizio del 2012).

Probabilmente l'unico caso ora in cui andrei con .Net sarebbe se stavo sviluppando un'applicazione desktop solo per Windows (dove il vantaggio .Net è chiaramente enorme).

24
mikera

Ho: Java 10 anni, C # 8 anni

Io voto Java per

  1. Nessun blocco del fornitore (è possibile cambiare server web/app 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 applicazioni (tipo A). Come JBoss, Tomcat, WebSphere, GlassFish, WebLogic
9
pat

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 molto presa da prendere, ma soprattutto dovresti provare a scomporre in un paio di scenari:

Applicazione desktop

Se stai sviluppando un'applicazione desktop devi scegliere la piattaforma principale con cui lavorerai. Se si tratta di una piattaforma Microsoft, usa .NET, non esiste una soluzione migliore della piattaforma sviluppata dalla stessa nave madre. Se si tratta di uno scenario Linux o multipiattaforma, prendere in considerazione Java o passare 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 creazione di nuove funzionalità nel linguaggio e nella piattaforma/framework. Tutto proviene da un unico fornitore e sicuramente questo è un vantaggio. Puoi anche utilizzare alcuni componenti molto potenti come DevExpress, ad esempio (Java non si avvicina nemmeno a qualcosa di simile a quello che il team DX ha messo insieme nel corso degli anni e questo rappresenta un enorme aumento della produttività).

Debolezza: Per le applicazioni enterprise .NET non è maturo come Java. Non hai molti fornitori 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 cosiddetti progetti open source di .NET sono in realtà solo una copia-cat di progetti di Java.

Debolezza: Oracle possiede Java (lo so, non il JCP) e questo è sicuramente un rischio da considerare. Le loro intenzioni non sono molto chiare e personalmente non mi piace dove sta andando la lingua in questo momento (conosco un sacco di Java hanno preoccupazioni simili).

Applicazione lato server

Sostanzialmente sono gli stessi argomenti delle applicazioni basate sul Web, ma poiché non devi preoccuparti troppo dell'interfaccia utente Java diventa più forte in questo caso. Ma ancora, se la piattaforma è principalmente 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 (senza dubbio il migliore IDE disponibile), MS SQL, Entity Framework, IIS e così via. Tutto ciò rappresenta un enorme aumento della produttività e ho tonnellate di esperienza che lo dimostrano. Inoltre lavoro principalmente con Java che si sono rivolti a .NET e condividono sostanzialmente la stessa opinione.

Penso che sia anche un buon punto che Microsoft sia più forte che mai nel senso che .NET sarà lì per un po '. Quindi, guardando avanti tra 10-15 anni, mi sento più sicuro con .NET rispetto a Java.

6
Alex

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

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

Edit:
Definiamo "tipica applicazione aziendale" come:

  • a più livelli
  • client/server
  • DB supportato

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

6
EricSchaefer

Sono uno studente recentemente laureato all'università, ma ho avuto esperienza commerciale 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 affermerò che la mia preferenza generale è C # rispetto a Java, mentre entrambi hanno una sintassi simile, mi piace la potenza del framework .Net rispetto alla compatibilità tra sistemi operativi di Java. Devi considerare fortemente cosa devi costruire? È solo un'applicazione desktop? Hai bisogno di connettività con altri client, quindi con altri desktop, cellulari, siti Web?

** Discussione su IDE persa perché la domanda su Stackoverflow è stata chiusa. End Gist era Java ha molti IDE gratuiti ma non sono paragonabili secondo me alla potenza e ai componenti aggiuntivi di Visual Studio, ma nota i costi di Visual Studio per licenza.

Devi esaminare quali competenze ha già il tuo team di sviluppo, poiché ciò avrà un impatto iniziale. Ciò che è più veloce è qui né lì dato a un utente esperto in entrambe le lingue/framework. Il che suppongo porti al punto che non devi considerare la lingua, poiché la lingua è solo sintassi, ma gli strumenti e il framework che la lingua sta usando.

4
JonWillis

Ho spostato avanti e indietro tra Java e .NET, a partire da Java 1.2 fino a 1.6 e .NET 1 fino a 4.0, oltre circa 10 anni di esperienza professionale (prima di essere un programmatore C/C++).

Un tempo, come .NET 2.0, direi che Java e C # sarebbero più o meno gli stessi, specialmente per il lavoro di back-end. I costrutti del linguaggio erano ancora molto simili. .NET avrebbe probabilmente ha guadagnato Edge nella programmazione dell'interfaccia utente desktop, grazie al designer WinForms in Visual Studio, e Java avrebbe avuto Edge in roba Web/Server, principalmente perché non eri bloccato con IIS.

Passando ora a .NET 3.5 e 4, do la produttività Edge a .NET, a mani basse. Ciò è principalmente, a mio avviso, perché .NET è un linguaggio in evoluzione molto più rapida, dal momento che la SM può prendere decisioni linguistiche relativamente rapidamente, invece di spingere cambiamenti attraverso la politica del JCP. Grandi miglioramenti sono la parola chiave var, l'insieme di Linq, i metodi di estensione, l'operatore a coalescenza nulla ??, 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 il maggior numero di sviluppatori è il più a suo agio e con cui ha esperienza. La curva di apprendimento è sempre il principale killer della produttività.

3
rally25rs

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ù disposti a usare librerie open source. Inoltre sembrano esserci più librerie disponibili per Java. Anche se guardi 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. Sembra che molte di queste innovazioni siano arrivate prima a Java e dopo che è stata creata una porta .NET. Dal punto di vista della biblioteca sembra certamente che Java vinca in termini di nuove scoperte innovative.

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

Naturalmente, molte di queste librerie fanno risparmiare un sacco di tempo e ti rendono più produttivo. Il linguaggio principale al linguaggio principale C # e Java non sono così diversi e per me è troppo vicino per essere chiamato. Getta nell'esercito di biblioteche di terze parti e la scala si inclina sicuramente verso Java. Sempre con un negozio aperto molta inclinazione si bilancia. È solo che molti negozi .NET hanno l'atteggiamento non inventato qui, mentre molti negozi Java sono tutto ciò che serve per portare a termine il lavoro ... Questo è vero anche all'interno dell'azienda che lavoro, il. Il team NET non ottiene molto (a causa della gestione) mentre il team Java ha molte librerie/utility di terze parti approvate. Anche con .NET molte cose buone non sono gratuite (ad es. Prima di NPOI se si voleva lavorare con documenti Microsoft Office, la maggior parte delle soluzioni [senza contare l'automazione dell'ufficio] non erano gratuite. Considerando che Java aveva POI dal 2001 Non penso che NPOI sia uscito fino al 2008, è difficile da dire in base al sito del progetto npoi.

3
Cervo

Con la somiglianza nella sintassi e negli strumenti, la produttività guadagna da C # o Java non è di un ordine di grandezza per fare una differenza significativa nel tuo progetto di lavoro di 10-15 anni. più da vicino su questioni come:

  1. Quali sono i requisiti del progetto e quali capacità linguistiche soddisfano tali requisiti (ad es. Client multipiattaforma contro 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 per l'ambiente di lavoro per essere sicuro di impiegare, trattenere e utilizzare pienamente il miglior team possibile per un progetto significativo.

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

3
AlexC

Mi sono posto questa domanda molto: qual è la migliore? C # o Java?

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

Impara come programmare e poi allenarti molto usando una sola lingua e quando diventerai perfetto nello scrivere il codice con essa, pensare ad altre lingue e credermi, imparerai le altre lingue come un gioco da ragazzi.

0
Salah