20-års fødselsdag for sproget, der indvarslede en stille revolution

Programmeringssproget Java blev på få år det mest populære sprog på it- uddannelserne, og i dag har sproget også indflydelse på mange af de nye programmeringssprog.

Det er nu 20 år siden, at programmører kunne stifte bekendtskab med et nyt programmeringssprog, opkaldt efter en kaffesort – Java. Siden er Java blevet de facto-standarden for programmering på så forskellige platforme som Android- mobiltelefoner og Oracle ERP- systemer. Men selvom Java har haft enorm indflydelse, var det ikke en decideret revolution, da det blev lanceret i 1995.

»Java var ikke teknologisk avanceret, da det kom frem. Den virtuelle maskine var på ingen måde nyt, men det var en god idé. Java gjorde det så på et tidspunkt, hvor hardwaren var blevet hurtig nok til, at det overhead, der fulgte med, ikke betød særlig meget,« forklarer professor Peter Sestoft fra IT-Universitetet.

Den ‘virtuelle maskine’, som var noget af det, der gjorde Java lidt anderledes end mange af de samtidige sprog, betød, at man i princippet kunne skrive den samme Java-kode og køre den på alle de hardwareplatforme, som den virtuelle maskine var oversat til. I de første år havde Java dog svært ved at overbevise programmører, der var vant til C eller C++, om, at den virtuelle maskine ikke gjorde Java for langsomt til eksempelvis realtidsfunktioner.

Et tilgivende sprog

Selv efter 20 år kan Java til tider have svært ved at blive taget alvorligt, når det gælder eksempelvis robotter eller selvkørende biler, fordi den virtuelle maskine fjerner programmørens mulighed for at tage direkte kontrol med hardwaren. Omvendt lyder argumentet fra Java-tilhængerne, at automatikken i den virtuelle maskine ofte vil gøre et bedre stykke arbejde end de fleste programmører, hvis de skulle gøre det manuelt.

Til gengæld var Java meget tilgivende for programmører, som for første gang skulle give sig i kast med objektorienteret programmering. Og så blev det distribueret gratis og til både Windows, Mac og Unix, hvilket igen var med til at gøre det lettilgængeligt for især studerende – og det skulle vise sig at give pote, for Java slog efter blot et par år efter lanceringen igennem på uddannelses­institutionerne:

»Det er nok det mest brugte sprog på uddannelserne. Det er på mange måder måske ikke et vanvittigt elegant sprog, men det er en god pragmatisk kombination af andre ting, og det er langt mindre usikkert end C++,« siger Peter Ses­toft.

En af grundene til, at Java slog igennem på uddannelserne, var brugen af automatisk ‘garbage collection’. Det vil sige, at Javas virtuelle maskine selv sørgede for at rydde op i hukommelsen og fjernede variable og pointere, som ikke længere skulle bruges. Det gjorde det enklere at præsentere kodeeksempler, fordi man kunne udelade alt, der havde med oprydning at gøre. Samtidig eliminerede det også en udbredt fejlkilde, som findes ved programmering i C og C++.

Før lanceringen af Java var automatisk garbage collection mest en akademisk øvelse inden for datalogien, men i dag findes det også i flere andre programmeringssprog.

Godt med konkurrence

Mange af de nyere programmeringssprog, som er dukket op de seneste 10 år, skylder også Java en del. Selvom de konkurrerer med Java som programmeringssprog, bygger mange af dem på den virtuelle maskine fra Java.

Der er også mange lighedstegn mellem Java og Microsofts .Net-platform, som kom til nogle år efter Java. Tilsammen udgør de to i dag en stor del af programmeringsverdenen, især hvis man medregner de programmeringssprog, som bygger oven på de virtuelle maskiner i de to platforme.

»Microsofts .Net-platform kan klart ses som et svar på Java, og de to har ligget og konkurreret. Det tror jeg har været udmærket, for det er godt, at der er en konkurrence mellem Microsoft-verdenen og IBM, Google og Oracle-verdenen,« siger Peter Sestoft.

Microsofts forhold til Java begyndte ellers med noget nær en krigserklæring. Microsoft lavede nemlig sin egen virtuelle maskine til Java-applikationer og inkluderede den i Internet Explorer. Det udløste en retssag, der var ét af de første skud i den browser-krig, som Microsoft endte med at vinde i slutningen af 1990’erne.

Java blev oprindeligt lanceret af Sun Microsystems og blev i 2006 gjort til open source. I dag har Oracle overtaget styringen med udviklingen af Java-platformen, og efter lidt stilstand i en årrække er der med version 8 kommet en lang række nye funktioner til.

Mere end et browser-plugin

Java er uden for it-verdenen nok bedst kendt for det browser-plugin, som indtil udgangen af 2014 var nødvendigt for at logge på digitale selvbetjeningsløsninger med NemID. I Javas første år var det netop muligheden for at skrive såkaldte Java-appletter, som kunne give udvidede funktioner på websteder, der var ét af de store argumenter for Java.

Den tilgang er sidenhen blevet overhalet af udviklingen inden for browsere, som i dag gør det muligt at løse mange af de opgaver, som appletterne løste, ved hjælp af især Javascript – et selvstændigt programmeringssprog, som trods navnet ikke har meget til fælles med Java.

En række sikkerhedshuller i browser-plugin’et til Java har de seneste fire-fem år gjort appletterne meget udskældte, men i dag udgør de kun en forsvindende lille del af dét, Java bliver anvendt til. Ifølge Oracle bruges Java på syv milliarder computerenheder. Det dækker over både forbrugerelektronik, vaske­maskiner, industrisystemer, pc’er og store datacentre.

Introduktionen af Java som sprog på it-uddannelserne betød, at mange i dag ikke er uddannet ved at studere nogle af de gamle, specielle sprog, som ellers var pensum i mange år. I stedet er de uddannet i Java på godt og ondt. På den ene side kan de konkrete programmeringserfaringer direkte overføres til et job efter uddannelsen, fordi Java er udbredt i rigtig mange organisationer.

På den anden side er uddannelsernes fokus på Java også blevet kritiseret, fordi det netop ikke har givet de studerende erfaringer med programmering i eksempelvis sprog uden garbage collection. Java har de senere år dog rettet op på en del af manglerne ved at tilføje funktioner. Noget af det, Java har fået tilføjet for nylig, er muligheden for at programmere i Java på samme måde som i de funktionsorienterede programmeringssprog.

I det hele taget er Java vokset med en lang række nye funktioner siden de første år for at give platformen mulighed for at kunne håndtere problemer som eksempelvis processorer med mange kerner. For at udnytte mange processorkerner skal man kunne programmere parallelt i tråde. Det er stadig en stor udfordring i mange programmeringssprog, men det er en af de problemstillinger, som der er forsøgt rettet op på i de nyere ver­sioner af Java.

Tips og korrekturforslag til denne historie sendes til tip@version2.dk
Kommentarer (15)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Ivan Skytte Jørgensen

Sproget java er ok. Ikke fantastisk, men heller ikke forfærdeligt. Gennem årene er de værste vorter blevet smukkeseret (auto-boxing/unboxing, generics, ..), så nu er det ganske acceptabelt.

Problemerne, som jeg ser, er i 3rd-party frameworks, toolchains, og den gennemsnitlige javaprogrammørs mentalitet. Java begyndte at blive udbredt i perioden hvor computeres regnekraft steg kraftigt gennem flere år, og der samtidigt var et IT-boom, så det var vigtigst at få noget kode ud af døren. Evt. performanceproblemer løste sig selv, fordi computere blev hele tiden hurtigere. Det betød at de fleste javaprogrammører aldrig har fået den lærerige oplevelse at gå tilbage til noget kode, som man har skrevet for et par år siden, og optimere det uden at bruge flere resourcer.

Det ser ud til at være ved at gentage sig. Denne gang med "throughput", som løst oversat betyder "jeg kan ikke finde ud af at optimere min kode, så jeg bruger blot flere CPUer". Hvor den korrekte fremgangsmåde (imho) ville være at først optimere (og dermed hæve throughput eller sænke driftomkostninger), og først derefter kigge på skalering.

Ovenstående kan være en smule farvet af, at jeg i de 2 seneste dage har bokset med et javaprogram, som brugte for meget ram og fik dermed andre programmer til at flække. Det er skrevet på den "helt rigtige java måde", bruger 54 3rd-party frameworks/libraries, bruger 650MB memory minimum, og tager 24 CPU-sekunder at starte op. Sammenholdt med et andet javaprogram med tilsvarende kompleksitet og workload (men ikke skrevet på den "rigtige java måde"), som bruger 112MB memory, to 3rd-party libraries, og starter på omkring 1 sekund.

  • 9
  • 0
#2 Christian Lynbech

"Før lanceringen af Java var automatisk garbage collection mest en akademisk øvelse inden for datalogien, men i dag findes det også i flere andre programmeringssprog."

Jeg slåes til bestandighed af forundring over teknologers historieløshed når det kommer til programmerings-sprog.

Automatisk lager forvaltning (AKA Garbage Collection) har været kendt og brugt siden computerens barndom, opfundet som det var til Lisp (verdens næst-ældste familie af programmerings-sporg). Hverken Lisp, Smalltalk eller Erlang (for nu at nævne 3 hurtige eksempler) er noget man kan kalde akademiske øvelser men sprog der har haft en bred anvendelse i industri, militær og telekom.

  • 9
  • 0
#3 Baldur Norddahl

Rent faktisk har de fleste programmeringssprog både før og efter Java automatisk spildopsamling. C style malloc og free et undtagelsen og ikke reglen.

10 for i = 1 to 10 20 a$ = a$ + "abc" 30 next I

Ser du en masse allokering og deallokering af plads til streng variablen a$ i ovenstående basic program? Nej vel og basic kom vist lige et par årtier inden Java.

  • 7
  • 0
#5 Esben Nielsen

I de første år havde Java dog svært ved at overbevise programmører, der var vant til C eller C++, om, at den virtuelle maskine ikke gjorde Java for langsomt til eksempelvis realtidsfunktioner.

Java er langt efter C/C++, når det gælder beregningsmæssigt throughput. Jo, men man kan lave nogle fine algoritmer, hvor hotspot-kompileren kan optimere koden næsten 1-1 med C++, men så skal man lige lade være med at bruge new i Java. Og Java uden memory allokering minder vel egentligt mest om Fortran....

Java bruger også meget mere memory: Skal man f.eks. parse data pænt op i objekter i Java, fylder de langt, langt mere end structs/classes i C/C++, da hvert lille element bliver sit eget Object, med alt det overhead der følger med. I C/C++ kan man blot ligger structs og objekter direkte ind hinanden - uden koden bliver grim, så data i hukommelsen sjældent fylder meget mere end den tilsvarende (ikke-komprimerede) binære fil.

Og til realtidsprogrammering er det håbløst. Godt nok er der RTSJ (Real-Time Specification for Java), men man må ikke lave memory allokering i realtidstråde og man skal følge en håbløs kompliceret memory-model. Endvidere kan JVM'en ikke rigtigt køre hotspot-kompilering, når latencies er vigtige, så koden bliver ret langsom.

Men når vi snakker om alt det kode vi skriver, hvor krav til hverken performance, memory eller realtime er særligt skrappe - og det gælder vel mindst 95% af den kode, der bliver skrevet rundt omkring - er Java udemærket. Men man skal bare bruge noget andet til de sidste par %.

  • 5
  • 2
#6 Palle Simonsen

Jeg giver @ivan ret i at Java mere end de fleste sprog har været plaget af frameworks og framework evangelister - har selv mødt min del af begge!

Jeg giver også @christian, @baldur og @frithjof ret i, at Java bestemt ikke er først med de nævnte egenskaber og givetvis har @esben ret i, at man skal bryde med de dynamiske aspekter, for at opnå C/C++ lignende performance i Java.

Når regnebrættet er gjort op vinder Java alligevel bl.a. på kritisk masse. Der er så mange Java programmører derude og så mange Java baserede løsninger, at en Java løsning baseret på mainstream frameworks og mainstream middleware Open eller Closed Source simpelthen er et meget sikkert valg. Bl.a. derfor ser man ganske mange Enterprise løsninger med Java som kerne. Der kan godt være enkelt-services, der er implementeret i C/C++, JRules osv., men den overvejende er Java Baseret (og service baseret).

Af den grund kan man godt ønske tillykke med de 0x14, 20, 024 år til Java

  • 2
  • 0
#7 Esben Nielsen

Java har den kæmpe fordel frem for C og især C++, at det er nemmere at bruge andres kode i egne projekter. I C++ bruger forskellige stumper software forskellige dele af sproget og laver forskellige antagelser om f.eks. hukommelsesstyring og fejlhåndtering. Det gør det rigtigt svært at tage kode fra andre projekter ind. I java er det lykkedes at gøre det meget mere ensartet.

Men fordi den megen kode der så er til rådighed i java hverken er skrevet med henblik på rigtig god performance eller realtid, kan det ikke bruges i de tilfælde, og så er det bedre at skrive separate programmer i f.eks. C++ til disse specielle opgaver.

  • 0
  • 0
#8 Frithiof Andreas Jensen

det er nemmere at bruge andres kode i egne projekter

hehe - Efter min mening så er det ikke så meget Java som sådan der er et dårligt sprog. Java blev desvärre hårdt ramt af "Code-Reuse"-religionen. Det har gjort implementeringen af JVM langt mere kompliceret end den burde väre.

Man burde göre en "JVM ala Python"; en Java som er strippet for "security", management af 3-parts moduler samt AL support for Applets. Jeg tror at man kunne forbedre Java's rygte for at väre slövt og tungt hvis man gjorde det.

  • 0
  • 0
#9 Martin Dahl

Desværre har Oracle valgt at kapre almindelige menneskers browsere med malwaren Ask Toolbar når Java installeres eller opdates.

Således vil man for altid vil forbinde Java med kompromittering af sikkerhed og overgreb på privatlivets fred.

Java bliver brugt til meget andet end desktop plugins og applikationer, men denne skamplet på (distribution af) teknologien er utilgiveligt. Alle leverandører som har baseret deres produkter på Java til afvikling under Windows og Mac OS må se deres kunder blive kompromitteret af malware uden at kunne gøre noget.

Største nationale eksempel er NemId som i adskillige år krævede installation af Java og dermed Ask Toolbaren, medmindre brugeren var yderst opmærksom på at fravælge dette under installation og opdatering.

Man kunne håbe at Oracle blev fravalgt som leverandør på globalt plan, -og også til det offentlige, så længe de åbenlyst deltager i hijacking af almindelige borgeres browsere. Hvor er vores politikeres holdning til dette?

Oracles adfærd svarer til, at manden der installerer dit køleskab sætter et kamera op i dit soveværelse. Og Oracle ønsker ikke at udtale sig om deres lyssky adfærd.

Der er adskillige internationale tiltag til at få Oracle til at stoppe dette, men desværre stadig uden held. Hvad skal der til?

  • 14
  • 4
#12 Bent Jensen

Er vi enige om, at du stadig bliver spurgt og kan aktivt fravælge Ask? Lidt mindre drama, takker...

Nogen version gemmer sin installation, så den først startet 10 minutter efter installation af Java, så man ikke så nemt opdager dette. Hvis det er det som du mener er helt normalt og korrekt etisk adfærd, så får du nok også nem arbejde i NSA. Desuden kan de fleste her inde, nok i de fleste tilfælde huske at vinkle af, selv om Oracle og Ask, prøver at gemme sig mest muligt, du skal scrole, eller noget andet. Eller hvis det bliver installeret, finde ud af at fjerne det. Men da alle i Danmark skulle bruge det til Nemid, er det mange som ikke har haft evnen gardere sig mod denne helt uvedkommende malware. Min 82 årrige mor er en af dem, så hvis du synes det er så ment, så giv mig dit morbilnummer så ringer hun nok 10-15 gange og beder om din hjælp til at fjerne det. Afsæt lige en time eller to, og nogen noget mavesårs og beroligende medicin.

Men nu Java med Nemid snart er Historie, så er Java, flash og ligende heldigvis også snart det ved mig. Hvis butikker kræver java, flash eller andet for at fungere, så finder jeg andre steder at handle. Der er standarter som er sikker. Og et fravalg ved kasse et hjælper normalt meget med at få indført mere sikker standarter.

  • 6
  • 1
#13 Simon Mikkelsen

Java har sine fordele og ulemper. At man ikke altid får tiden til at optimere synes jeg næppe man kan klandre Java for ligesom jeg nu har set masser af programmer i C og C++ der også mangler optimering.

Der er dog nogle kulturer, som bl.a. er associereret med Java, jeg ikke bryder mig om. Der er igen altomfattende frameworks, der gør nogle ting lettere men gør endnu flere ting sværer samt overdreven brug af XML og webservices.

Efter vi fik generics med tom <> samt annoteringer har sproget i sig selv det meste jeg gerne vil have. Autoboxing giver sine egene skjulte problemer, så det synes jeg ikke om.

Det er en stor fejl at Oracle sniger Ask Toolbar ind med installeren. Det er noget svineri overfor folk og gør det let at svine sproget til.

Et godt værktøj til at lave GUI fra Oracles side ville også være godt. Man kan lave rigtig meget i Swing og få kontrol over det meste, men indlæringskurven er for stejl for mange helt almindelige scenarier.

Jeg synes selv, at Java er rigtig godt på en server. På klienten kan man have sin browser til at fortolke indholdet. Det gælder om at spare på de store biblioteker, frameworks og appservere. Så kan man sagtens lave noget fornuftigt.

  • 0
  • 0
#14 Torben Mogensen Blogger

Erlang blev tydeligvis designet af nogen som havde forstand på de embeddede systemer man byggede det til.

Ja, Erlang blev designet af folk hos L.M. Ericsson, og var lavet til at programmere telefoncentraler med. Det startet som et "skunkworks" projekt hos Ericsson samtidigt med, at Ericsson satsede på et kæmpestort nyt telefoncentralsystem skrevet i C++. Men det system kom aldrig til at fungere ordentligt, blandt andet på grund af lagerfragmentering og space leaks -- ikke kæmpestore, men fordi et telefoncentralsystem helst skal køre uafbrudt i årevis, så hober selv små lagerproblemer sig op, indtil systemet sander til.

Blandt andet derfor har Erlang garbage collection. Endvidere er Erlangs "Hot Swap" egenskab specielt designet til at opdatere moduler i systemer, uden at de skal lukkes ned. Også noget, der er smart for telefoncentraler og lignende systemer.

  • 1
  • 0
#15 Torben Mogensen Blogger

Automatisk lager forvaltning (AKA Garbage Collection) har været kendt og brugt siden computerens barndom, opfundet som det var til Lisp (verdens næst-ældste familie af programmerings-sprog). Hverken Lisp, Smalltalk eller Erlang (for nu at nævne 3 hurtige eksempler) er noget man kan kalde akademiske øvelser men sprog der har haft en bred anvendelse i industri, militær og telekom.

Jeps, LISP var fra 1958, og GC var som sagt opfundet til formålet. Siden da har stort set alle funktionsprogrammeringssprog og relaterede sprog haft GC, og som Baldur siger, har mange udgaver af BASIC brugt GC til håndtering af strings siden i hvert fald Microsoft BASIC på 8-bit computere.

I de tidlige dage kunne garbage collection give sekundlange pauser i udførslen af et program, og det er derfor, at GC har et rygte for ikke at være velegnet til realtids og næsten-realtidsprogrammering. Men der er siden udviklet GC-metoder, der ikke laver disse pauser, så i dag kan man ikke sige, at GC er uforenelig med realtidsprogrammering -- man skal blot vælge sin GC-metode til opgaven.

  • 2
  • 0
Log ind eller Opret konto for at kommentere