Perché Java è la lingua franca in così tante istituzioni? [chiuso]

21

EDIT: Questa domanda in un primo momento sembra bashing Java, e credo che a questo punto è un po '. Tuttavia, il punto più grande che sto tentando di fare è il motivo per cui viene scelta una sola lingua, poiché l'unica soluzione è la soluzione a tutti i problemi. Java sembra essere quello che è stato usato così è quello che ho dovuto battere qui, ma non sono intenzionalmente a strappare a Java uno nuovo:)

Non mi piace Java nella maggior parte delle impostazioni accademiche. Non sto dicendo che la lingua in sé sia cattiva - ha diversi aspetti estremamente desiderabili, soprattutto la possibilità di eseguire senza ricompilazione sulla maggior parte delle piattaforme. Niente di sbagliato nell'usare la lingua per la tua prossima app ^ TM. (Non qualcosa che farei personalmente, ma è più perché ho meno esperienza con esso, piuttosto che il design è scarso)

Penso che sia uno spreco che i corsi di alto livello di CS vengono insegnati usando Java come lingua. Troppi dei miei co-studenti non possono programmare niente di cui preoccuparsi, perché non sanno come lavorare in un mondo non raccolto dalla spazzatura. Non comprendono fondamentalmente le macchine per le quali stanno programmando. Quando qualcuno può lavorare fuori da un mondo di raccolta dei rifiuti, può lavorare all'interno di uno, ma non viceversa. GC è uno strumento, non una stampella. Ma il modo in cui è usato per insegnare agli studenti di informatica è una stampella.

L'informatica non dovrebbe insegnare un'intera serie di corsi su misura per una singola lingua. Gli studenti partono dall'idea che tutto il buon design sia un design Java idiomatico, e che il design orientato agli oggetti sia l'UNICO VERO MODO CHE LE COSE SOLO POSSONO ESSERE FATTE. Altre lingue, almeno una delle quali non è una lingua raccolta rifiuti, dovrebbero essere utilizzate nell'insegnamento, al fine di dare al laureato una migliore comprensione delle macchine.

È imbarazzante che qualcuno con un PHD in CS di un'istituzione rispettata non possa programmare la propria uscita da un sacchetto di carta.

Quel che è peggio, è che quando parlo con quei professori CS che effettivamente capiscono come funzionano le cose, condividono sentimenti come questo, che stiamo facendo un cattivo servizio ai nostri studenti facendo tutto in Java. (Nota che quanto sopra sarebbe lo stesso se lo sostituissi con qualsiasi altra lingua, generalmente usando una sola lingua è il problema, non Java stesso)

In totale, sento che non riesco più a rispettare alcun tipo di laurea, quando non riesco a vedere quelli che mi circondano in grado di programmare la loro via d'uscita dai problemi di fizzbuzz.

Perché / come è diventato così?

    
posta Billy ONeal 13.07.2012 - 00:48
fonte

16 risposte

30

Questo non è un problema Java, è un problema di insegnamento. Non sapere come programmare non è un difetto linguistico, è colpa degli studenti. Lo stesso vale per tutti i tuoi problemi, GC, conoscenza di base della macchina, come funzionano le cose "sotto il cofano", per così dire.

La tua lamentela principale sulla raccolta dei rifiuti mi getta leggermente. A meno che tu non stia facendo C o C ++, la garbage collection è in genere molto buona e non un problema. Preferiresti che tutti imparassero il montaggio? I linguaggi di livello superiore che sono severi sono molto utili per l'insegnamento. Ti dà la flessibilità di librerie, pacchetti e altre sottigliezze quando ne hai bisogno, senza il confuso linguaggio "zucchero" presente in molti altri linguaggi di alto livello (PHP, Ruby, Python, Perl).

    
risposta data 02.11.2010 - 03:57
fonte
12

Le università davvero stanno facendo questo? O questa è solo una percezione che le persone ottengono quando ottengono un candidato al colloquio di cattivo lavoro?

Ho ottenuto il mio diploma CS 4 anni fa e mentre Java è stato utilizzato nelle classi di introduzione, non è stato particolarmente sottolineato dopo. Al di sopra della mia testa, i corsi obbligatori richiesti richiedevano l'apprendimento di Java, C, C ++, SML (linguaggio di programmazione funzionale), assembly, MATLAB e CAST (linguaggio di descrizione del circuito). Questo non tiene conto di tutti i corsi matematici e teorici di CS e, naturalmente, della mezza dozzina di corsi CS facoltativi che ti avrebbero esposto a un altro gruppo. Dal parlare con gli amici in un certo numero di università diverse, non sembrava che quello che stavano facendo fosse molto diverso.

Se ci sono università che insegnano solo Java, allora è davvero una tragedia. Non perché Java sia cattivo, ma perché è solo uno strumento di molti che dovrebbe essere disponibile per un programmatore. Uno sviluppatore che conosce solo Java è equivalente a un falegname che sa solo come usare un martello. Tuttavia, ho difficoltà a credere che sia davvero così, almeno per le rispettate università. Sospetto che questa sia solo la percezione di vedere candidati cattivi e incolpare la scuola per l'incompetenza dei candidati piuttosto che per la mancanza di motivazione / curiosità / professionalità / ecc. Del candidato.

    
risposta data 02.11.2010 - 06:52
fonte
11

Sono davvero sorpreso che questa sia la situazione di molte scuole. Quando ho conseguito la laurea in CS, ho tenuto una serie di corsi di lingue che includevano tutte le lingue popolari del giorno (erano circa 40 anni fa): assembler (Univac 1108 e MIX), FORTRAN IV, SNOBOL4, COBOL, Lisp e Algol 68. Non riesco a immaginare di avere solo una lingua insegnata. O come potrei apprezzare ciò che i compilatori dovevano fare senza aver scritto alcuni programmi assembler.

Abbiamo utilizzato Algol e FORTRAN per la maggior parte dei corsi di dati e algoritmi. Mi sarebbe piaciuto passare più tempo con Lisp - invece abbiamo avuto solo una presentazione e ora sto cercando di ri-imparare alcuni dei concetti. Abbiamo usato SNOBOL4 per scrivere parser - e il suo pattern matching con backtracking ha costruito una buona base per il lavoro successivo delle librerie regex incluse in molte lingue moderne.

Questa introduzione a una mezza dozzina di lingue ha suscitato in me un interesse che è continuato da allora.

    
risposta data 02.11.2010 - 06:11
fonte
8

Per ottenere il vero motivo, dovresti chiedere alle persone che gestiscono quelle istituzioni (e anche allora, potrebbero non dirlo).

Diverse ragioni possibili (e non sto difendendo né accusando nessuno qui, solo indovinando):

Puoi fare le cose in Java

Java è un linguaggio generico e in quanto tale può essere utilizzato per risolvere molti problemi.

Molti insegnanti comprendono Java

È difficile insegnare una lingua che non comprendi

Java è popolare

Ciò significa che ci sono un sacco di risorse Java: libri, una comunità attiva, librerie di codici ecc.

Java è facile

Non devi capire molte cose o teorie di basso livello per fare Java. Non puoi farlo bene , ma almeno puoi fare le cose.

Java è pervasivo

Puoi eseguirlo su più o meno qualsiasi cosa.

Esistono lavori per i programmatori Java

Ci sono molti lavori che hanno bisogno di Java - gli insegnanti dovrebbero preparare gli studenti per il mondo reale.

C'è un tempo limitato

In molti corsi, non c'è tempo per insegnare più lingue, teorie, concetti di basso livello ecc.

È ciò che gli studenti desiderano

Molti studenti hanno già sentito parlare di Java (e anche usato). A loro piace perché è familiare.

    
risposta data 12.07.2012 - 12:52
fonte
6

Questo è ciò che l'industria ha chiesto. C'era una carenza di sviluppatori Java quindi le scuole iniziarono a crearli. Le aziende hanno sviluppatori che possono iniziare a lavorare non appena hanno varcato la porta.

Ad ogni modo, la lingua non ha importanza. Potrebbero insegnare un linguaggio non GC e produrre ancora programmatori cattivi. Le scuole di lingua usano è un dettaglio di implementazione. Le scuole dovrebbero insegnare concetti. Se questo non è il caso, allora è la scuola che è il problema, non la lingua con cui insegnano. Solo perché qualcuno non sa cosa sia un puntatore non significa che non possa essere un programmatore efficace.

GC è comunque la via del futuro.

    
risposta data 02.11.2010 - 04:00
fonte
4

Motivo di pigrizia e profitto. Java ottiene la maggior parte delle persone all'80% del modo, con il 20% dello sforzo. Tuttavia, questo spesso produce codificatori di voodoo "scimmia vede la scimmia" che non hanno una profonda comprensione di ciò che sta accadendo e non sono in grado di scavare più a fondo degli strumenti di alto livello.

Insegnare correttamente C / C ++ è difficile. Anche se fatto bene, alcuni non comprenderanno appieno concetti di basso livello come i puntatori (ci sono studi su questo). Inoltre, non sembra immediatamente rilevante nel mercato del lavoro.

    
risposta data 02.11.2010 - 08:02
fonte
3

Per lo più sono d'accordo, ma fino ad un certo punto.

Se vuoi insegnare CS cource focalizzato su strutture dati o algoritmi. Ottenere la maggior parte delle cose inutili di mezzo è una buona cosa. Non vuoi che gli studenti si occupino di stuf di basso livello quando apprendi concetti di alto livello.

D'altra parte dovrebbero essere insegnate anche cose di basso livello. Solo così abbiamo più programmatori a tutto campo.

    
risposta data 02.11.2010 - 04:18
fonte
3

Come sempre, si tratta di che cosa vuoi insegnare e di quanto tempo devi farlo.

Fare cose in Java significa che non devi occuparti dei puntatori vaganti e di free / malloc. Ciò significa un numero inferiore di bug difficili da trovare.

Questo non significa che non dovresti conoscere la macchina sottostante, che devi essere brava in commercio, ma forse dovresti scegliere lo strumento giusto per il lavoro. Gli algoritmi di alto livello non sono forse l'argomento migliore per il corso di assemblatore.

    
risposta data 02.11.2010 - 09:42
fonte
2

È troppo chiedere che gli venga insegnato qualcosa su come funzionano veramente i computer ? Non ha senso per me che qualsiasi schema del corso di CS non includa qualcosa dei sistemi operativi e dell'archetizzazione del computer. Non sto dicendo che dovresti essere in grado di progettare un computer sul retro di una busta, ma una panoramica generale mette tutte le lingue in prospettiva. Voglio dire, Java viene eseguito in una macchina virtuale!

    
risposta data 02.11.2010 - 14:44
fonte
0

In tutta onestà non penso che dovresti perdere il rispetto per tutti i gradi e soprattutto non CS perché l'unica lingua insegnata è Java.

Qualsiasi comp. decente Lo studente di sci comprende che il suo diploma in CS non è altro che un pezzo di carta e che la vera conoscenza verrà da progetti personali e studio personale. Mi piacerebbe pensare che i bravi studenti sappiano che hanno bisogno di conoscere C e imparare come fare le cose in Linux / Unix e imparare come NON avere la propria mano nelle lingue moderne.

    
risposta data 12.07.2012 - 17:39
fonte
-1

Non vedo un problema con l'utilizzo di Java. Il problema più grande (come hai detto) è quando le università insegnano la programmazione imperativa come il miglior e unico modo per risolvere tutti i tuoi problemi. Questo è molto lontano dalla verità. Ad esempio, invece di utilizzare tre linguaggi imperativi (o addirittura la stessa lingua peggiore) per tre corsi diversi, dovrebbero utilizzare tre diversi paradigmi di programmazione. Un esempio è Java (imperativo), Prolog (dichiarativo) e Haskell (funzionale).

Per quanto riguarda il motivo per cui ciò accade, penso che sia una combinazione di (1) politica - i presidenti non sono di mentalità aperta o hanno benefici / sponsor personali e (2) pigrizia - i professori sono stati una volta studenti e insegnano tutto ciò che sanno o come .

    
risposta data 12.07.2012 - 19:15
fonte
-1

Il college Calvin di Grand Rapids Mi. Una volta passati da Java a Python per corsi introduttivi di programmazione, il professore incredulo ha fatto riferimento a un gruppo di noi verso la fine del suo semestre, "Molti di loro possono effettivamente programmare, è incredibile". Il suo stupore era in contrasto con le precedenti esperienze con Java. Questo non rende Java un linguaggio scurrile, difficile da imparare da zero. Direi la stessa cosa su C, o C ++ o su qualsiasi linguaggio che richieda una conoscenza approfondita degli schemi o dei tipi di allocazione di memoria.

    
risposta data 10.08.2012 - 22:33
fonte
-2

Mi sono laureato in ingegneria dei sistemi informatici, quindi ho studiato assemblaggio, microprocessori, VHDL, quali sono le porte logiche e come creare un flip-flop, ho studiato circuiti elettrici, amplificatori operazionali, passa-basso filtri, modulazione di ampiezza, costruito un circuito in un laboratorio che suonerebbe come una tastiera telefonica, incasinato con un analizzatore logico, ha preso alcune lezioni di fisica. Dal lato di Linux - ho ricompilato un kernel prima, ho scritto un piccolo driver di dispositivo e un file system per i compiti.

Ma poi mi sono reso conto che mi piacciono di più cose di alto livello molto di più. Preferisco Python su C. Mi piace C # e adoro il garbage collector. Mi piacciono la matematica e gli algoritmi e le strutture dati, ma non sono un fan particolare dei puntatori: posso pasticciarli; Io proprio non voglio.

Quindi, pensi che l'università dovrebbe insegnare più C, meno Java. Qualcun altro pensa che dovrebbero insegnare tutto in Scheme. Spolsky prenderà entrambi.

Sì, è vero che un diploma universitario è solo un pezzo di carta, ma "non lasciare che la scuola ostacoli la tua educazione". C'è sempre Wikipedia, Stack Overflow, Coursera.org, ecc. Sembra che le università tradizionali diventeranno meno importanti.

Se potessi fare il undergrad dappertutto, allora sarei andato in una scuola diversa, non avrei studiato nessuna delle cose dell'ingegneria elettrica, ma piuttosto matematica, CS + minor in fisica e francese. Scratch French; Avrei dovuto studiare all'estero in Svizzera e ho imparato 5 lingue naturali mentre lo facevo. Vorrei anche tornare indietro e trovare una persona che mi ha convinto che devo assolutamente partecipare alle lezioni di economia al college per sopravvivere nel mondo reale e schiaffeggiarlo sulla testa con la mia collezione di libri di Milton Friedman (gli unici libri in materia di economia che leggo che non fanno schifo). Inoltre, non pagherei soldi per il libro Freakonomics 1 o per un libro sul linguaggio Perl.

Con il senno di poi, avrei fatto molte cose in modo diverso. Tutto quello che posso fare ora, e te lo consiglio, è scegliere la tua avventura: link

Avendo il senno di poi avrei fatto 100 miliardi di dollari in borsa ora, e l'avrei investito nella ricerca sul cancro, avrei assunto scienziati per liberare il mondo dai rifiuti di plastica; Avrei donato abbastanza soldi per la campagna di Ron Paul in modo che la guerra in Medio Oriente sarebbe stata oltre 3 anni fa.

Riconosci ora che non riavrai mai più il tuo tempo, quindi prova a spenderlo con saggezza.

    
risposta data 10.08.2012 - 23:08
fonte
-2

Alcuni anni fa ho letto da qualche parte che, nel Regno Unito, la decisione di Java era stata presa per attirare più studenti nella programmazione. Apparentemente è stato più facile per il cervello a causa della mancanza di brutti puntatori e gestione della memoria, ecc ... Immagino che questo sia il motivo per cui Python viene rapidamente adottato come il nuovo 'strumento di apprendimento'. Sarei dell'opinione che il tuo tipico corso uni non ti trasformi in un programmatore. Tutto ciò che è destinato a fare è armarti di una certa quantità di conoscenza e ti innesca per la programmazione. Il giorno in cui si può chiamare un programmatore in genere arriva un bel po 'di tempo dopo l'uni e quando arriverà quel momento, i puntatori, la raccolta dei rifiuti e i paradigmi di programmazione diversi da OOP, non dovrebbero essere un problema.

    
risposta data 11.08.2012 - 12:52
fonte
-2

Perché viene utilizzato Java?

Tre motivi:

  1. Java utilizza la sintassi in stile C. Molti programmatori hanno familiarità con esso, quindi riduce la curva di apprendimento.

  2. Il denaro è stato speso per commercializzare Java come fresco e moderno. Ma rispetto alla lisp, java vive nell'età della pietra.

  3. La JVM. JVM è l'unica cosa interessante di java che è legittima, non solo hype di marketing. Anche se la JVM dovrebbe essere lodata come piattaforma per l'esecuzione di programmi, di per sé non merita l'esistenza del linguaggio Java. Puoi teoricamente e praticamente compilare molte lingue diverse per la JVM.

risposta data 29.09.2012 - 15:46
fonte
-3

La tua domanda sta supportando i risultati di un'altra persona che ha scritto un articolo in cui si dice che Java è così bello ma non abbastanza pesante per l'informatica scientifica. Penso che dovrebbe usare solo Big Decimal con tutte le sue precisioni, NAN ecc. E andare avanti con esso.

Voglio vivere solo in un mondo di raccolta automatica dei rifiuti. È più salutare, più pulito, più ordinato, estetico, previene i soldi sprecati per le spese sanitarie, è più desiderabile - non è necessario taggare qualcosa come indesiderato - semplicemente dereferenziandolo o impostandolo su null o quando esco dallo scope l'oggetto viene automaticamente taggato per garbage collection ..

Ok, ora sto parlando solo di Java, ma sarebbe molto utile se anche questo funziona nello scenario reale dei rifiuti. Java è scritto una volta eseguito ovunque, il che è abbastanza buono per me perché possa essere usato come lingua nelle scuole. Nessuna perdita di memoria e piacere ai programmatori felici che non vogliono sprecare tempo a codificare ogni oggetto che usano e smettere di usarlo è una buona logica per conto di Java.

Java ha dei puntatori - beh li chiamiamo riferimenti .. String s1="Ciao"; String s2="Ciao"; String s3 = new String ("Hello");

s1 e s2 punteranno allo stesso oggetto String, che è per riferimento s1 == s2, s1.equals (s3) ma s1 == s3 è falso perché s3 è un nuovo oggetto di riferimento - questa è l'aritmetica java dei riferimenti e capisco tutto questo così dispiaciuto, non desidero essere etichettato come qualcuno che non capisce le complessità sottostanti dell'aritmetica del puntatore da C o C ++.

    
risposta data 12.07.2012 - 12:31
fonte

Leggi altre domande sui tag