Java raggiungerà C #? [chiuso]


17

Oggi ho pubblicato una domanda che mi chiedeva quale lingua C # o Java sarebbe meglio per me studiare. Ho avuto delle ottime risposte. Una cosa che è emersa è che forse Java è ora piuttosto indietro rispetto a C # con nuove funzionalità. Ho visto alcuni collegamenti web e la maggior parte ha sottolineato cosa aveva C # e cosa non aveva Java.

Quindi la mia domanda a tutti voi è che Java raggiungerà di nuovo C #? E se dovessi indovinare dove sarebbe tra 5 anni. Avrebbero tutte le cose che forse ora mancano? Che ne dici di Java 7?


7
-1, presuntivo e ipotetico. Passerebbe a +1 se il titolo cambiasse in "Java è dietro C # e, in caso affermativo, come potrebbe recuperare?"
Nicole,

2
Java e C # raggiungeranno Scheme? Fammi sapere quando ricevi funzioni, chiusure e continuazioni anonime di prima classe.
dietbuddha

5
@dietbuddha: Preferisco non sporcare il mio codice con ), grazie mille.
Josh K

1
@JoshK preferiresti riempirlo; e}, giusto? LISP sembra usare molte parentesi perché ogni funzione le usa e tu annidi molte funzioni.
YuriAlbuquerque,

Risposte:


32

Le funzionalità del linguaggio sono una parte molto piccola di ciò che rende Java e C # tick. In definitiva, queste sono parti di grandi ecosistemi J2EE e .NET.

Entrambi hanno i loro punti di forza e dovrebbero diventare più grandi nei prossimi 5 anni.


19
+1 per "Le funzionalità del linguaggio sono una parte molto piccola di ciò che rende Java e C # tick"
Craige

1
Sì, le API e le librerie sono per molti versi molto più significative.
Michael K,

2
D'accordo, ma le domande riguardano la lingua e non l'ecosistema;)
Philippe

1
Odio davvero votare +1 su risposte molto brevi, ma sei qui per qualcosa. Mi piacerebbe vederti espandere questa risposta.
Nicole,

3
Le domande dicono: "quale lingua C # o Java sarebbe meglio per me studiare" e "dove sarebbe tra 5 anni" entrambi questi aspetti dipendono più dall'ecosistema che dalla lingua.
Shamit Verma

16

Avrei detto di fino a quando Oracle è entrata in scena. Il che è triste, perché mi è davvero piaciuto il salto di qualità delle funzionalità che Java e C # hanno avuto negli ultimi sei anni circa.


2
Perché pensi che Oracle saboterà Java?

2
Non credo che la cultura aziendale abbia la stessa agilità che Sun ha avuto nell'incorporare funzionalità.
Jesse C. Slicer,

8
@Glenn, la causa Oracle vs Google mi mostra che non "ottengono" open source e che significa che le grandi aziende hanno meno probabilità di scegliere Java per lo sviluppo futuro. groklaw.net/staticpages/index.php?page=OracleGoogle
Tangurena

Oracle potrebbe non "avvitare Java" esattamente, ma JVM. In questo momento hanno in progetto di combinare due implementazioni JVM che hanno acquisito JRockit da BEA e HotSpot per Sun. Mentre ci sono, hanno completamente escluso il progetto Da Vinci Machine.
vartec,

2
Sono confuso con Oracle. Il seme di Android è una specie di spegnimento, ma contribuiscono al kernel Linux e sono i principali sviluppatori del filesystem Btrfs. Oracle sembra "ottenere" l'open source meglio di Microsoft, ma questo non dice molto.
jonescb

6

Come lingua, non espongo Java per aggiungere innovazione a un ritmo significativo, principalmente perché quelli della community open source all'avanguardia sono più propensi a concentrarsi sui nuovi linguaggi JVM, come Scala, Clojure, Groovy, JRuby e JPython.

Inoltre, l'impegno di Java per la retrocompatibilità significa che l'aggiunta di funzionalità linguistiche è intrinsecamente più difficile rispetto ai giorni precedenti della lingua.


5

Il grande punto interrogativo qui è Oracle. Sun ha davvero rallentato le cose per Java negli ultimi mezzo decennio circa. La speranza di molti nella comunità Java era che Sun avrebbe fatto girare Java o venderlo a qualcuno che avrebbe messo molte risorse e sforzi. Mentre Oracle sicuramente potrebbe farlo, è una grande azienda con molti gruppi con i propri interessi acquisiti. La mia ipotesi, ed è proprio questo, una supposizione, è che Oracle lascerà stagnare Java e lo userà principalmente come strumento per azioni legali sui brevetti.

Forse lo venderanno a Google per una grande quantità di denaro e tutti saranno felici. È nelle mani di sale del consiglio e avvocati piuttosto che di ingegneri e progettisti di software.

Sul lato positivo delle cose, anche senza miglioramenti, Java è un buon linguaggio e ha un bel ecosistema attorno. Mentre personalmente preferisco C # e il mondo .net, Java è ancora un'ottima scelta. Andando avanti, il tempo lo dirà, ma per ora, Java non è affatto male. (Escluse le librerie di data e ora ... wow, sono sempre brutte e disordinate)


1
Ora ci sono librerie di terze parti per superare i problemi di data / ora.
Michael K,

1
Oracle utilizzava Java insieme a PL / SQL come linguaggio per i programmi che vivevano all'interno del database, almeno a partire da 10g. Oracle usa Java pesantemente. Se questo significhi che porteranno Java in una direzione che mi piace è discutibile, ma non lo uccideranno.
David Thornley,

4

Non c'è niente da recuperare, quindi la domanda non ha senso.

Solo perché Java non replica esattamente C # non significa che sia "inferiore" in qualche modo, è solo diverso. Potresti anche chiedere quando C # "raggiungerà" Cobol.


23
Non sono d'accordo C # e Java sono simili in molti modi, molto più di C # e COBOL. Ricordo un giorno di aver letto che "C # è ciò che Java avrebbe dovuto essere". Per riassumere, credo che C # e Java siano direttamente in competizione, e avendo lavorato con entrambi devo dire che ho molte funzionalità di C # in Java, ma non viceversa ...
Philippe

Hai trovato situazioni in cui potresti usare C # o Java? Vale a dire situazioni in cui lo sviluppatore potrebbe fare una scelta. Di solito un negozio avrebbe già preferenze / pregiudizi / pregiudizi e la scelta sarebbe tra le lingue sullo stesso ecosistema. Ad esempio tra Java e Scala o tra C # e F #
Shamit Verma

2
Non sono d'accordo con tutte le decisioni di progettazione prese da C #, ma come Java, hanno intenzionalmente deciso di effettuare una sostituzione C ++ e, con l'esempio di Java prima di loro, hanno deliberatamente aggiunto alcune funzionalità critiche che Java ha lasciato fuori. Quindi, se pensi che quelle funzionalità siano buone, allora Java deve "mettersi al passo" con C # In particolare, la possibilità di creare oggetti incorporati in modo che tutto ciò che è orientato agli oggetti non DEVE essere gonfio e penso const. I delegati sono una nuova funzionalità che hanno incorporato, non che non possono essere creati come una struttura di dati della libreria. Direi che entrambi devono recuperare il ritardo con il C ++!
Dov

@Philippe, non lasciarti sorprendere dal suo contro esempio. Avrebbe potuto facilmente dire "Quando C # raggiungerà Java?". Il suo punto è ancora che non esiste una ragione oggettiva per cui Java sia dietro C #; è tutta una preferenza personale.
jonescb

Nessuno parla di replica, ma C # ha alcune caratteristiche essenziali che Java sta solo considerando di implementare NOW (come lambdas, che sono emulate con una brutta implementazione di oggetti).
YuriAlbuquerque,

4

La questione se C # o Java sia davanti all'altro è al centro del dibattito, ma invece di concentrarmi sulle caratteristiche linguistiche dell'una o dell'altra preferirei concentrarmi su ciò che è coinvolto nell'evoluzione di una lingua. Il fatto è che non credo che nessuno discuterà: Java è più vecchio di C #.

Problemi con la modifica del funzionamento di una lingua:

  1. Se interrompi la retrocompatibilità, fai incazzare molti sviluppatori
  2. Se fai incazzare i tuoi sviluppatori, passano a un'altra lingua che li supporta meglio. Quindi, nessun motivo per continuare a lavorare con la lingua.
  3. Java ha preso presto alcune decisioni di progettazione con la pressione di lanciare il linguaggio sul mercato. La speranza era di tornare indietro e riempire alcuni degli spazi vuoti. Quelle decisioni affliggono ancora la lingua perché i manutentori non vogliono violare il primo punto.
  4. Java ha dato vita a molti nuovi territori e ha dimostrato una volta per tutte che un linguaggio raccolto dalla spazzatura può essere preso sul serio e che funziona abbastanza bene per la maggior parte delle persone.
  5. C # è arrivato più tardi e ha imparato molte delle lezioni in cui Java si è imbattuto - così sono stati in grado di evitare alcune delle limitazioni tecniche che Java ha a causa del punto 3.
  6. Le nuove funzionalità linguistiche devono risolvere un problema reale in modo ragionevole. Non tutte le funzionalità linguistiche hanno senso nel contesto della lingua in cui si sta tentando di aggiungerla. Questo è il motivo per cui, nonostante le loro somiglianze, Java e C # continueranno ad essere lingue diverse.

Quindi, C # ha più funzioni linguistiche di Java? Credo di si. Sono utili? Credo di si. Ciò significa che C # è migliore o più maturo di Java? Con cui non sono d'accordo. Sono diversi, chiari e semplici. Java non avrà mai tutte le funzionalità di C # in quanto C # non avrà mai tutte le funzionalità di Java.

Una delle funzionalità di Java, la possibilità di scrivere un programma su Windows e distribuirlo su Unix o Mac, non avverrà mai direttamente dal supporto di Microsoft. Perchè lo chiedi? Non è perché Microsoft è cattiva (che sia vero o no, non mi interessa davvero). È perché hanno imparato una lezione che Sun non ha mai fatto: scrivere una volta eseguito ovunque commodizza i sistemi operativi e l'hardware. Se ti interessa guadagnare dalle vendite del tuo sistema operativo, non vuoi renderlo banale da scambiare e avere ancora un'applicazione funzionante. Se lo hai fatto, non puoi ottenere alcun profitto dal sistema operativo perché ci sono sempre opzioni più economiche.


Perché è importante che Mono non sia gestito da MS? Mono funziona davvero bene. Non sottovalutarlo.
Kugel,

Non è uno scavo su Mono, ma non tutte le API .NET sono supportate direttamente. Mentre stanno facendo progressi e hanno fatto molta strada, ci sono delle limitazioni, in particolare nelle applicazioni desktop. Non sono sicuro di quanto sia vicino Mono o se legalmente può arrivare all'implementazione di Winforms o WPF. Tuttavia, per il lavoro strettamente lato server, sono abbastanza sicuro che sia compatibile. Non ci ho guardato di recente.
Berin Loritsch,

Penso che "la capacità di scrivere un programma su Windows e distribuirlo su Unix o Mac, non avverrà mai direttamente dal supporto di Microsoft" è stata smentita ora
JoelFan,

Al momento in cui ho scritto la risposta, non lo era. Quindi C # ha un Microsoft scritto un runtime e librerie che funzionano su Mac e Unix? Mono non proviene direttamente da Microsoft, anche se alcuni sviluppatori Microsoft potrebbero lavorarci sopra. Ho ancora dubbi su un'app desktop costruita su WPF che funziona per Linux. Solo il lato server potrebbe essere OK.
Berin Loritsch,

1

Java non ha davvero bisogno di nuove "caratteristiche" non più di quanto non faccia C o C ++. È un linguaggio ben progettato per lo sviluppo orientato agli oggetti. Le aggiunte che possono essere fatte sono nella creazione di librerie per eseguire una vasta gamma di attività. Lo stesso vale per C #: la maggior parte delle funzionalità vengono aggiunte per fare in modo che il linguaggio faccia più cose. Personalmente penso che la maggior parte di quelle funzionalità non siano necessarie: i puntatori in OO sono davvero così morbidi a meno che tu non stia lavorando a livello hardware (a quel punto è probabilmente meglio usare qualcosa come C). Inoltre, l'esecuzione in una VM dovrebbe rendere difficile l'accesso diretto all'hardware, se non impossibile.

Unix ha iniziato la tendenza alla creazione di moduli che fanno molto bene una cosa. Penso che sia Java che C # stiano diventando un po 'fuori controllo per quanto riguarda le funzionalità. È meglio creare un nucleo facilmente estensibile di un "linguaggio" multiuso gigante che è più simile a un framework. Per me , Java soddisfa questo requisito meglio di C #.


7
La lingua senza lambda corretta non è una lingua utilizzabile. Se quella caratteristica fosse aggiunta a Java, sarei d'accordo con il resto dei tuoi argomenti. Senza questo, Java non è affatto estensibile, è a malapena utilizzabile.
Logica SK

2
@Craige Personally (opinione) Non mi piace avere caratteristiche sintattiche. Voglio che la lingua sia fuori dai piedi, molto minimale.
Michael K,

1
@Michael - Non riesco a tracciare la connessione tra una lingua con caratteristiche sintattiche e una lingua che ti ostacola. Solo perché una lingua ha detto funzionalità, non significa che devi usarle. Prendi ad esempio i metodi getter e setter di C #. Il 90% delle volte ti risparmierà la scrittura di centinaia di righe di codice ridondante. Puoi comunque scriverne uno tuo, se lo desideri.
Craige

1
@Craige, se la lingua ha delle caratteristiche, almeno i tuoi strumenti devono conoscerle. E il potere dell'ecosistema Java è principalmente nei suoi strumenti, che sono possibili interamente grazie alla semplicità minimalista del linguaggio.
Logica SK

1
@SK, non capisco come si possa dire che una lingua con lambda è inutilizzabile. C non ha lambda e C ++ li ottiene in C ++ 0x e le persone usano questi linguaggi da decenni. Solo perché preferisci la programmazione funzionale che non invalida la programmazione imperativa.
jonescb

1

Non c'è niente di sbagliato in molte delle funzionalità che C # sta aggiungendo, ma data la velocità con cui stanno cambiando la lingua, stanno rendendo consapevolmente difficile, se non impossibile, che Mono tenga il passo. In tal caso, allora dico che stiamo aspettando che C # raggiunga Java in termini di gamma di sistemi su cui può implementare. Non è sufficiente eseguire solo su Windows.


0

Non ho intenzione di avviare un forum di discussione, ma penso che Java fosse qui molto prima di C # e del resto C # sembra più una replica che java.

Per quanto riguarda la risposta alla tua domanda: Java e C # sono lingue diverse, quindi non puoi confrontarle solo con le loro caratteristiche. Quello che puoi fare in Java non puoi farlo in C # e viceversa.

Quindi finalmente è come iniziare un argomento Windows vs Linux.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.