Java si trova spesso nel mondo accademico. Qual è la ragione dietro questo?
realmondo non è un vantaggio per gli studenti o le aziende che vogliono assumere gli studenti.
Java si trova spesso nel mondo accademico. Qual è la ragione dietro questo?
realmondo non è un vantaggio per gli studenti o le aziende che vogliono assumere gli studenti.
Risposte:
A poche università hanno qualcuno che è sufficientemente noto che molti (se non la maggior parte) le decisioni ruotano intorno a quella della persona piace, antipatie, opinioni, gusti, ecc Basta per esempio, Texas A & M ha Bjarne Stroustrup sul personale; probabilmente non è una sorpresa per nessuno che il loro curriculum tenda a enfatizzare il C ++.
La maggior parte delle università è un po 'diversa però. In primo luogo, le decisioni sono spesso prese molto di più a beneficio della facoltà rispetto agli studenti. Il criterio più grande in molti casi è "quale lingua richiede il minimo sforzo da parte nostra?" Molti di loro sono anche attenti alla loro pigrizia: vogliono imparare non solo la lingua con il minor numero di concetti avanzati, ma anche quella che è (ad esempio) la più lenta a innovare, aggiornare o abbracciare qualcosa di nuovo.
In secondo luogo, la maggior parte delle decisioni vengono prese dal comitato. Ciò significa che la decisione finale è raramente (se mai) ciò che qualcuno voleva davvero - è proprio quello che il minor numero di membri del comitato (specialmente quelli con la maggiore influenza) ha ritenuto particolarmente discutibile. È come scegliere un sapore di gelato. A uno piace davvero la fragola, ma un altro è allergico alle fragole. Un altro ama davvero il cioccolato, ma qualcun altro non lo sopporta. Ancora un altro pensa che l'uvetta al rum sia ottima, ma gli altri due temono che la menzione del "rum" sia interpretata come incoraggiante l'abuso di alcol - quindi finiscono con la vaniglia, anche se non è quello che qualcuno voleva davvero.
Infine, sebbene di solito vada direttamente in contrasto con la maggior parte di ciò che i due precedenti criteri avrebbero prodotto isolatamente, in genere hanno bisogno (o almeno vogliono) di essere visti come rispondenti alle esigenze dell'industria.
Java è l'intersezione di questi tre:
Si noti che non sto davvero dicendo (ad esempio) che non c'è niente di più da sapere su Java della nozione più elementare di ciò che è OOP - solo che è tutto ciò che è necessario per fare ciò che passa per un lavoro accettabile di insegnamento.
Ho studiato Informatica nei primi anni novanta proprio prima che uscisse Java. L'approccio seguito dai nostri professori è stato il seguente.
Primo anno: corso introduttivo sulla programmazione e algoritmi in Pascal. Perché Pascal Perché è un linguaggio pulito progettato per insegnare i concetti di programmazione senza strumenti per l'hacking. Ovviamente noi studenti sapevamo che la lingua più popolare all'epoca era il C e che c'era una nuova lingua con crescente popolarità: il C ++. Quindi stavamo leggendo e discutendo continuamente di queste lingue e facendo piccoli progetti usandoli da soli. Quindi l'idea era: in classe facciamo la teoria seria (Pascal) mentre a casa impariamo come hackerare (C). :-)
Durante il secondo anno abbiamo tenuto un corso sul sistema operativo in cui ci è stato chiesto di fare gli esercizi in C e assemblaggio. Il professore non ci ha dato un corso completo su C (solo alcune lezioni) perché (1) avevamo già tenuto un corso di programmazione durante il primo anno e (2) ha detto che ogni scienziato informatico che conosce i concetti di programmazione dovrebbe essere in grado di leggere un libro e imparare un nuovo linguaggio di programmazione. Il corso è andato abbastanza bene e tutti abbiamo trovato normale che C e assemblea fossero argomenti pratici che hai imparato da solo o che hai discusso nel corridoio con altri studenti ma che non valeva la pena fare su un corso.
Durante il terzo anno abbiamo tenuto un corso sui linguaggi di programmazione, in cui abbiamo studiato i diversi paradigmi dei linguaggi di programmazione (imperativo, funzionale, logico, orientato agli oggetti), abbiamo appreso concetti generali e tecniche di implementazione e rivisto i principali linguaggi di programmazione (Pascal, C, Modula2, Simula, Lisp, C ++, Prolog). Ciò che il nostro professore ci ha detto all'inizio del corso è stato: non dovresti valutare questo corso pensando a quanti linguaggi di programmazione conosci alla fine del corso, ma piuttosto a tutti i concetti generali che hai imparato, come sono in relazione tra loro, a cosa servono, come vengono utilizzati in quali lingue. Quindi, imparare una lingua specifica è solo una questione di leggere un libro, guardare il codice esistente, provare a usarlo su un progetto specifico e così via.
Ho trovato questo approccio molto appropriato ed efficace. Non penso che l'università debba mirare a preparare buoni programmatori, ma piuttosto a fornire una buona conoscenza che consenta di comprendere i linguaggi di programmazione e di programmazione. Diventare un buon programmatore arriverà come un effetto collaterale di ciò. Ora sto pensando di candidarmi per un lavoro in cui è richiesto Ada e non ne ho paura, anche se non ho mai fatto una programmazione seria in Ada prima.
Tornando alla questione dell'insegnamento di Java. Immagino che Java sia spesso usato per insegnare perché è abbastanza neutrale e permette di spiegare i principi della programmazione usando un linguaggio che è anche vicino al mondo dell'industria.
Personalmente userei ancora Pascal o un linguaggio simile per un primo corso, perché ciò mi consentirebbe di distinguere tra strutture di controllo e strutture di dati, che in Java / linguaggi orientati agli oggetti sono strettamente integrati. Quindi, secondo me, Pascal consentirebbe un'introduzione più graduale ai concetti di base della programmazione.
Inoltre, un informatico (e un buon programmatore) dovrebbe conoscere i meccanismi di base / le strutture di runtime come lo stack, l'heap, il passaggio dei parametri, l'allocazione della memoria, i puntatori o come implementare tipi di dati astratti senza utilizzare le funzionalità integrate del lingua (elenchi, set e così via). Java toglie gran parte di questo ai programmatori (va bene, ovviamente), ma un principiante dovrebbe conoscere queste cose. Forse dopo un primo corso di programmazione in Java uno dovrebbe anche seguire un corso più generale sui concetti dei linguaggi di programmazione.
Questa è solo la mia esperienza e opinioni.
Ero a scuola quando uscì Java. E la mia università è quasi cambiata dall'oggi al domani. La gente era fuori di testa a Java in università. Ero un Jr quando è uscito, e al momento del mio ultimo anno, quasi tutto il mondo accademico si stava rapidamente spostando per cambiare il loro curriculum. Non solo nella mia università ma ovunque. È stato davvero così veloce. Il nostro secondo corso introduttivo fu Pascal, che si convertì rapidamente in Java in meno di un anno. Perché si sono convertiti così in fretta? Due grandi motivi.
Un accademico vuole insegnare la teoria e gli algoritmi. Le lingue che ti facilitano l'apprendimento di quegli algoritmi che non richiedono molta esperienza per funzionare sono le migliori: Schema, Python, Java, Smalltalk, ecc. Più la lingua si intromette, più sei distratto dall'apprendimento degli algoritmi reali. All'epoca i linguaggi di scripting erano cittadini di seconda classe disapprovati dai datori di lavoro come economici, veloci e sporchi. Gli accademici li vedevano come un altro gatto esemplare, ma ciò che i datori di lavoro vogliono ha influenzato anche gli accademici.
Questo ci porta al prossimo motivo. I datori di lavoro desiderano una certa esperienza linguistica, e al momento era C / C ++. Ma, C / C ++ richiede molta esperienza per imparare e ha molti casi angolari e se e ma o ma che sono fonte di distrazione. Abbiamo imparato corsi in C / C ++ ma non ai livelli inferiori. All'epoca i datori di lavoro erano arrabbiati con i programmi CS perché gli studenti non uscivano come guru C / C ++.
Java stava attraversando il settore troppo velocemente quasi quanto il mondo accademico. Quindi finalmente il mondo accademico stava ottenendo ciò che volevano. Una lingua di alto livello che era più facile da imparare, e una lingua desiderata dai datori di lavoro. Era tutto troppo perfetto. Forse un amico è tornato al mondo accademico forse 3 anni dopo che me ne sono andato, e ha detto che potresti trovare un libro su Java in ogni argomento CS. Ecco quanto velocemente Java ha preso il controllo del mondo accademico.
Personalmente penso che Java non abbia stupito CS Penso che in realtà sia stata una buona cosa perché gli studenti possono studiare CS, partecipare a Open Source e trovare lavoro anche mentre sono a scuola. Credo ancora che dovresti studiare molte lingue come studente CS e che non dovrebbe essere solo Java. Ma, se tutti avessero usato il pitone, anche Joel avrebbe odiato il pitone.
Ci sono alcuni motivi per questo, tra cui:
Nota che ci sono un certo numero di scuole che insegnano C # per molte delle stesse ragioni. Ci sono molte altre ragioni, alcune delle quali più specifiche per la singola scuola. In sostanza, Java è diventato l'oggetto "BASIC" orientato agli oggetti di una volta.
*sintassi, ma sarebbe molto difficile da usare senza una conoscenza di base dei puntatori.
Mi piace il post di Joel Spolsky intitolato The Perils Of Java Schools . Penso che Berin Loristch abbia ragione nel semplificare il cirricolo e anche applicarlo al mondo reale.
Ho sentito molte volte dire quanto segue: "una laurea in Informatica non è una laurea per imparare la programmazione, è per imparare la teoria". La lingua non ha necessariamente bisogno di essere importante (anche se non dovrebbe interferire) finché la teoria viene appresa. Java è un linguaggio relativamente facile da imparare e che consente di dedicare più tempo all'apprendimento della teoria alla base di tutto. Questo è uno dei motivi per cui il MIT utilizza Scheme (quindi ho sentito).
Molte delle risposte fornite sopra sono buone, ma tralasciano qualcosa.
Java è un linguaggio multipiattaforma. Uno studente può usare il suo Mac, un altro il suo PC e un altro il suo account Unix da studente. Lo stesso codice farà la stessa cosa. Pensa a quanto sia più semplice supportare sia l'insegnante che il dipartimento IT della scuola.
Questa è stata la vera importanza di Java quando è uscito. Lo scherzo era "Codice una volta, debug dappertutto", ma toglie davvero l'hardware e i sistemi operativi dall'equazione.
Ho sentito professori dire che usano java per insegnare perché:
Personalmente sono contento di aver preso CS a Berkeley quando hanno usato Scheme per insegnare. Anche se non mi rendevo conto di quanto fosse elegante una lingua fino a pochi anni dopo.
Un piccolo sfondo
Ho preso l'unica lezione di Java offerta nella nostra scuola. Era tra la fine degli anni '90 e l'inizio del 2000. Java stava crescendo ma non era quasi decollato. Venendo da un sacco di sviluppo in C, ero un po 'frustrato da tutto il codice di caldaia necessario per far funzionare Java. Non riuscivo a concentrarmi sul mio compito. Non potevo semplicemente aprire un file con "apri". Ho dovuto definire la classe e quindi le importazioni, ecc. Ecc.
Mi occupavo di ingegneria informatica, quindi ho seguito prima la programmazione di assemblaggio e poi C e poi C ++, Scheme e quel corso Java. Era principalmente un programma scolastico orientato al C. La classe degli algoritmi è stata insegnata usando C.
Quando sono entrato nel settore, Java era chiaramente il giocatore dominante. Forse è stato l'unico giocatore durante la conversione dai sistemi COBOL back-end alle applicazioni business web Java. Java ha fatto passi da gigante nel mondo degli affari nei primi 2000 giorni.
Allo stesso tempo, non conoscevo tutti i framework Java ma sapevo come programmare e adattarmi all'ambiente Java. Se avessi seguito corsi di formazione su buoni standard di codifica Java, probabilmente avrei potuto iniziare con un migliore stile Java o conoscenza dell'ecosistema Java.
In retrospettiva, non penso che importi.
Per rispondere alla tua domanda: perché studiamo Java all'università?
Java dovrebbe essere insegnato ma non utilizzato in tutti i corsi:
Dovresti imparare Java ad un certo punto al college se stai imparando l'informatica. È popolare nel mondo degli affari. Dovresti imparare Java e forse C #. Non ASSOLUTAMENTE non insegnerei Java come corso introduttivo di programmazione. E Java non dovrebbe certamente essere la lingua principale utilizzata in tutti i corsi.
Sulla critica di Java:
Java riceve molte critiche e lo ha sempre fatto. Ho letto le riviste Java che menzionano Java con un punto interrogativo, "Java è pronto per l'impresa?". La piattaforma Java è ancora una piattaforma ampiamente utilizzata. Ma, per la maggior parte delle attività di programmazione generali, Java funziona bene. E non ci sono problemi importanti con l'utilizzo di Java. Non farà male al tuo skillset. Potrebbe fare affidamento solo sulle librerie Java senza sapere cosa succede sotto. Ma Java non provoca alcun tipo di danno cerebrale (alcuni sviluppatori in realtà credono che ciò sia vero).
Inoltre, perché gli sviluppatori non attaccano C o C ++? O almeno C ++. I paradigmi di programmazione imperativa sono molto simili. E non prenderei mai in considerazione la possibilità di scrivere una webapp in C ++, ma potrei farlo con Java.
Ecco come impostare un curriculum:
Le lingue che ho elencato nel mio curriculum sono piuttosto comuni. Molte scuole insegnano più lingue senza problemi. Nell'industria utilizzerai molti linguaggi di programmazione diversi. Userai lingue di cui non hai nemmeno sentito parlare.
L'argomento di Java nelle scuole non è un problema se non vogliono completamente proteggerti da Java o non vogliono insegnare SOLO Java. In entrambi i casi, le scuole sono ingiustificate.
(Mi dispiace Ruby lang)
Siamo spiacenti, solo una lunga risposta noiosa:
(1) Intendevi forse:
"Perché studiamo Java all'università, come primo linguaggio di programmazione?"
(2) O vuoi dire:
"Perché studiamo Java all'università, comunque, anche se impariamo altri linguaggi di programmazione, prima di Java?"
Sembra che tu intenda davvero entrambe le domande.
In caso di (1):
Non credo che Java (o .NET C # e Visual Basic) debbano essere insegnati come primi linguaggi di programmazione. Il Pascal strutturato e modulare dovrebbe essere il primo, anche se sembra vecchio e obsoleto.
Molte persone pensano che dovremmo insegnare alle persone la programmazione orientata agli oggetti o la programmazione funzionale immediatamente, proprio perché il suo "hype" o "tendenza".
Imparo Pascal strutturato come una piccola versione di "Programmazione orientata agli oggetti", non come qualcosa di simile. Vedo un programma strutturato come un singolo piccolo oggetto.
Successivamente, suggerisco di continuare Linguaggi funzionali e Object Pascal.
E più tardi, C, C ++, C #, VB.Net, Java.
Le ragioni principali per cui non mi piacciono Java o C #, come primo linguaggio di programmazione, è che hanno concetti "puntatori", "puntatori su oggetti" e "oggetti" stessi ("riferimenti").
Credo che gli studenti dovrebbero avere in mente le differenze e le somiglianze tra questi concetti. Il confronto degli oggetti Strings in Java è un buon esempio di quella stranezza:
String A = "Mars";
String A = "Venus";
// pointer comparison or object comparison ???
if (A == B)
{
DoSomething();
}
In caso di (2):
Penso che Java o C # debbano insegnare a scuola, perché hanno diverse buone funzionalità aggiornate e, allo stesso tempo, hanno un uso reale.
Dovresti imparare Java ad un certo punto al college se stai imparando l'informatica. È popolare nel mondo degli affari. Dovresti imparare Java e forse C #. Non ASSOLUTAMENTE non insegnerei Java come corso introduttivo di programmazione. E Java non dovrebbe certamente essere la lingua principale utilizzata in tutti i corsi.
Non posso essere più in disaccordo. Java era una lingua del mio college che dovevi prendere per entrare nel programma CS&E nella mia scuola. Java è estremamente facile da insegnare. Perché puoi limitarti a determinati concetti che i "non programmatori" possono imparare.
Inoltre non so dire se insegneresti ASSOLUTAMENTE a Java come corso introduttivo di programmazione. Fondamentalmente hai detto che NON ASSOLUTAMENTE NON LO INSERIRESTI ?
Il semplice motivo è già stato spiegato. Java non ha costi di licenza. Puoi insegnarlo usando un editor di test di base. È usato per le ragioni sbagliate certamente.
Non sono d'accordo con una risposta precedente, secondo cui Java non ha reso gli studenti superandoli "più stupidi", mostra davvero quando hanno problemi con concetti realisticamente semplici come array e liste in C ++.
Il passaggio da C a Java è avvenuto nel momento sbagliato .
Intorno al 2000. Ero nell'ultima classe C della mia università.
Il C ++ aveva troppe funzionalità per non confondere un principiante. (E lo fa ancora. E prevede di aggiungerne alcuni.)
.NET non era abbastanza maturo ed era persino più costoso di oggi.
L'obiettivo C era vecchio e l'utilizzo di Apple stava volando sotto il radar (non c'era iPhone in giro)
Mi sento obbligato ad aggiungere le risposte qui perché non vedo davvero nessuna di queste risposte che copra effettivamente la mia prospettiva.
Sono un programmatore hobbista. Ero molto avanti rispetto alla curva quando si trattava di "computer" e "programmazione". Ho completato i miei studi universitari - Bachelor - nel 2007 e Master circa due anni dopo - 2009. Ho lavorato con una pletora di lingue tra cui Assembly, QuickBASIC, C, C ++, Java, PHP, Perl, Python, BASH Scripts, Javascript, COBOL etc .
IMHO, la lingua usata per insegnare la programmazione agli studenti è un indicatore dei tempi in cui viviamo attualmente. Ad esempio, durante gli anni '80, Assembly era la lingua di basso livello mentre C era considerata una lingua di alto livello.
Durante gli anni '90, C ++, Java, Perl e tali linguaggi acquisirono importanza principalmente perché di livello molto più elevato di C e incorporarono principi di sviluppo rapido. Quindi hanno smesso di insegnare Assembly agli studenti CS e hanno insegnato C come un modo di esprimere algoritmi. Lentamente è cambiato nell'ultimo decennio in cui C è considerato un linguaggio di livello troppo basso per catturare l'essenza degli algoritmi in modo efficace e senza troppo know-how dei "sistemi". Questo è in realtà estremamente importante in quanto il focus di un curriculum CS dovrebbe essere più "teorico" che pratico e ogni volta che qualcuno vuole scrivere un algoritmo, se si impantana con allocazioni di memoria e aritmetica del puntatore, non otterrai in qualunque posto.
Anche oggi se partecipi a un programma Masters CS, dovresti completare alcuni requisiti di "Sistemi" (almeno negli Stati Uniti e questo non dovrebbe essere molto diverso per le università statunitensi) che ha bisogno che gli studenti siano in grado di programmare applicazioni a livello di sistemi e in alcuni casi profondo come l'hacking a livello di kernel per passare effettivamente i requisiti. Quindi, sebbene C non sia il linguaggio defacto che viene insegnato nelle scuole, è rilevante se desideri specializzarti in sistemi o Informatica ad alte prestazioni o in tali nicchie.
Vorrei anche menzionare un altro punto: la C richiede molta disciplina per ottenere le cose giuste mentre lingue come Java sono un po 'rilassate riguardo a tali vincoli. Ciò semplifica lo svolgimento di corsi senza richiedere agli RA / TA di avviare GDB per eseguire il debug del programma di uno studente :)
Penso che gran parte di ciò sia ciò che viene utilizzato nel settore.
Il mio programma CS aveva un comitato consultivo industriale, composto da personale senior di aziende tecnologiche e aerospaziali locali e avevano un sacco di input nel curriculum. Le lezioni di introduzione al CS lasciarono cadere Pascal a favore di C l'anno in cui iniziai (1986), in gran parte per volere dello IAB. Allo stesso modo, c'è stata una spinta per insegnare Ada in alcuni dei corsi di livello superiore poiché le compagnie aerospaziali locali dovevano usarlo per il lavoro del Dipartimento della Difesa.
Java è abbastanza onnipresente ora, soprattutto ora che i dispositivi Android stanno decollando. Fa schifo dal punto di vista didattico, ma poi anche C.
Perché sperano che meno studenti falliranno il corso, che è un FAIL in sé, IMHO. Forse uno dei motivi per cui quasi nessuno prende più sul serio i titoli di studio, almeno qui.
Java è un linguaggio troppo semplice e non insegna che il PC abbia un paradigma delle risorse limitato. Mentre allo stesso tempo costringe a "non c'è nulla che non possa essere risolto con un altro strato di astrazione" linea di pensiero.
Sì, fa bene ai concetti di OOP e ai problemi dei giocattoli, ma insegna ad affrontare i problemi da un'angolazione sbagliata. Usa un costrutto pulito qui, avvita il resto.
Ma il mondo accademico è noto per essere sognatore di AI, OWL e altre tecnologie giocattolo. Mentre continuano a ricercare queste cose, a volte qualcuno inventa qualcosa di straordinario anche lì, ma se vuoi essere un buon sviluppatore devi impararlo in modo indipendente.