Java a 20 anni: come ha cambiato per sempre la programmazione

Ricordare com'era il mondo della programmazione nel 1995 non è un compito facile. La programmazione orientata agli oggetti, per esempio, era un paradigma accettato ma raramente praticato, con gran parte di ciò che è passato per i cosiddetti programmi orientati agli oggetti che erano poco più che codice C rinominato che utilizzava >>invece di printfe classinvece di struct. I programmi che abbiamo scritto in quei giorni scaricavano regolarmente il core a causa di errori aritmetici del puntatore o esaurivano la memoria a causa di perdite. Il codice sorgente poteva a malapena essere portato tra le diverse versioni di Unix. L'esecuzione dello stesso file binario su processori e sistemi operativi diversi era un discorso folle.

Java ha cambiato tutto questo. Sebbene il codice C procedurale dipendente dalla piattaforma e allocato manualmente continuerà ad essere con noi almeno per i prossimi 20 anni, Java ha dimostrato che si trattava di una scelta, non di un requisito. Per la prima volta, abbiamo iniziato a scrivere codice di produzione reale in un linguaggio multipiattaforma, raccolto dai rifiuti e orientato agli oggetti; e ci è piaciuto ... milioni di noi. I linguaggi successivi a Java, in particolare C #, hanno dovuto cancellare la nuova barra più alta per la produttività degli sviluppatori stabilita da Java.

James Gosling, Mike Sheridan, Patrick Naughton e gli altri programmatori di Sun's Green Project non hanno inventato la maggior parte delle importanti tecnologie che Java ha portato a un uso diffuso. La maggior parte delle caratteristiche chiave che includevano in quella che allora era conosciuta come Oak trovava le sue origini altrove:

  • Una classe Object di base da cui discendono tutte le classi? Smalltalk.
  • Forte controllo statico del tipo in fase di compilazione? Ada.
  • Interfaccia multipla, eredità di implementazione singola? Obiettivo-C.
  • Documentazione in linea? CWeb.
  • Macchina virtuale multipiattaforma e codice byte con compilazione just-in-time? Di nuovo Smalltalk, specialmente il dialetto di Sun's Self.
  • Raccolta dei rifiuti? Lisp.
  • Tipi primitivi e strutture di controllo? C.
  • Sistema a doppio tipo con tipi primitivi non oggetto per le prestazioni? C ++.

Java, tuttavia, ha aperto la strada a un nuovo territorio. Niente come le eccezioni controllate è presente in qualsiasi altra lingua prima o dopo. Java è stato anche il primo linguaggio a utilizzare Unicode nel tipo di stringa nativa e nel codice sorgente stesso.

Ma il punto di forza di Java era che era stato creato per essere uno strumento pratico per portare a termine il lavoro. Ha reso popolari le buone idee dei linguaggi precedenti riconfezionandole in un formato familiare al programmatore C medio, sebbene (a differenza di C ++ e Objective-C) Java non fosse un superset rigoroso di C.In effetti era proprio questa volontà non solo di aggiungere ma rimuove anche le funzionalità che hanno reso Java molto più semplice e facile da imparare rispetto ad altri discendenti del C orientati agli oggetti.

Java non ha fatto (e ancora non) hanno structs, unions, typedefs, e headerfile. Un linguaggio orientato agli oggetti non vincolato dall'esigenza di eseguire codice legacy non ne aveva bisogno. Allo stesso modo Java ha saggiamente omesso le idee che erano state provate e trovate carenti in altri linguaggi: ereditarietà di implementazioni multiple, aritmetica dei puntatori e sovraccarico degli operatori in modo più evidente. Questo buon gusto all'inizio significa che anche 20 anni dopo, Java è ancora relativamente libero dagli avvertimenti "here be dragons" che sporcano le guide di stile dei suoi predecessori.

Ma il resto del mondo della programmazione non si è fermato. Migliaia di linguaggi di programmazione sono sorti da quando abbiamo iniziato a programmare Java, ma la maggior parte non ha mai ottenuto più di una minuscola frazione di attenzione collettiva prima di scomparire. Ciò che ci ha venduto su Java erano applet, piccoli programmi in esecuzione all'interno di pagine Web che potevano interagire con l'utente e fare di più che visualizzare testo statico, immagini e moduli. Oggi non sembra molto, ma ricorda: nel 1995 JavaScript e DOM non esistevano e un modulo HTML che parlava con uno script CGI lato server scritto in Perl era lo stato dell'arte.

L'ironia è che le applet non hanno mai funzionato molto bene. Erano completamente isolati dal contenuto della pagina, incapaci di leggere o scrivere HTML come avrebbe fatto JavaScript. I vincoli di sicurezza impedivano alle applet di interagire con il file system locale e i server di rete di terze parti. Queste restrizioni rendevano le applet adatte a poco più che semplici giochi e animazioni. Anche queste banali prove di concetto erano ostacolate dalle scarse prestazioni delle prime macchine virtuali del browser. E quando le carenze delle applet furono corrette, i browser e gli sviluppatori front-end avevano da tempo superato Java. Flash, JavaScript e, più recentemente, HTML5 hanno attirato la nostra attenzione in quanto piattaforme molto più efficaci per fornire il contenuto Web dinamico che Java ci aveva promesso ma non è riuscito a fornire.

Tuttavia, le applet sono state ciò che ci ha ispirato a lavorare con Java, e quello che abbiamo scoperto è stato un linguaggio pulito che ha appianato molti dei bordi irregolari e dei punti deboli con cui stavamo lottando in alternative come C ++. La raccolta automatica dei rifiuti da sola valeva il prezzo dell'ammissione. Le applet potrebbero essere state sovrascritte e sottoposte a pubblicazione insufficiente, ma ciò non significava che Java non fosse un linguaggio dannatamente buono per altri problemi.

Originariamente concepito come una libreria client multipiattaforma, Java ha trovato un vero successo nello spazio server. Servlet, Java Server Pages e una serie di librerie focalizzate sull'azienda che venivano periodicamente raggruppate e rinominate in un acronimo o un altro confuso risolvevano problemi reali per noi e per le aziende. A parte gli errori di marketing, Java ha raggiunto uno status quasi standard nei reparti IT di tutto il mondo. (Veloce: qual è la differenza tra Java 2 Enterprise Edition e Java Platform Enterprise Edition? Se hai indovinato che J2EE è il successore di JEE, l'hai capito esattamente all'indietro.) Alcuni di questi prodotti incentrati sull'azienda erano dal lato dei pesi massimi e ispirati aperti fonti alternative e integratori come Spring, Hibernate e Tomcat, ma questi sono tutti costruiti sulla base del tramonto.

Probabilmente il contributo più importante dell'open source a Java e al più ampio mestiere di programmazione è JUnit. Lo sviluppo basato su test (TDD) era stato provato in precedenza con Smalltalk. Tuttavia, come molte altre innovazioni di quel linguaggio, TDD non ha ottenuto un diffuso avviso e adozione fino a quando non è diventato disponibile in Java. Quando Kent Beck ed Erich Gamma hanno rilasciato JUnit nel 2000, TDD è rapidamente passato da una pratica sperimentale di pochi programmatori al modo standard di sviluppare software nel 21 ° secolo. Come ha detto Martin Fowler, "Mai nel campo dello sviluppo del software è stato così tanto dovuto da così tante righe di codice" e quelle poche righe di codice sono state scritte in Java.

A vent'anni dal suo inizio, Java non è più il capriccioso nuovo arrivato. È diventato il trincerato incumbent contro cui altre lingue si ribellano. Linguaggi più leggeri come Ruby e Python si sono fatti strada in modo significativo nel territorio di Java, specialmente nella comunità delle startup dove la velocità di sviluppo conta più della robustezza e della scalabilità, un compromesso di cui Java stesso ha approfittato nei primi giorni in cui le prestazioni delle macchine virtuali ha registrato un grave ritardo nel codice compilato.

Java, ovviamente, non si ferma. Oracle continua a incorporare tecnologie collaudate di altri linguaggi come generici, autoboxing, enumerazioni e, più recentemente, espressioni lambda. Molti programmatori hanno incontrato per la prima volta queste idee in Java. Non tutti i programmatori conoscono Java, ma che lo sappiano o no, ogni programmatore oggi ne è stato influenzato.

Articoli Correlati

  • Recensione: i 4 grandi IDE Java a confronto
  • Java per sempre! 12 chiavi per il dominio duraturo di Java
  • Java vs Node.js: una battaglia epica per la condivisione della mente degli sviluppatori