Programmering

Java vs Googles Go: En episk kamp for utviklerens tankedel

Go vs Java er ikke en godt matchet kamp mellom likeverdige. Den ene er en uhyrlig tungvekt som har dominert bransjen i årevis. Den andre er en skrap, lett nykommer som viser masse ungdom og løfter, men som bare har noen få slag.

Java og Go takler også forskjellige nisjer. Den ene er rettet mot web-apper på serversiden, et område der den andre en gang var en stor aktør. Den andre har vokst ut av livet i stativene og er nå et populært valg for enheter.

Men ikke alle har beveget seg vekk fra Java på serversiden av webapplikasjoner, territorium Go angriper og spiser på Java-basen. Og bryteren er ikke et veldig bra sprang, da de to er like i mange aspekter. Begge er kjærlige hyllest til C, om ikke under, i det minste på overflaten der mange utviklere tilbringer livet sitt med å ta seg til syntaksen. De er begge enkle og tvingende nødvendige med nok strukturelle likheter til at det ikke er vanskelig å konvertere kode mellom de to. (TardisGo-prosjektet er for eksempel ett verktøy som gjør Go til Java, C # eller JavaScript.)

Betrakt dette som et burkamp som setter to fettere fra forskjellige sider av programmeringssporene som konkurrerer om din neste applikasjonsstabel.

Java's lange historie gir nettverkseffekter som hjelper alle

Java har eksistert siden 1995, og tiltrekker seg mer tankeandel hvert år. Alt fra små innebygde prosessorer til massive serverchips kjører Java raskt og effektivt takket være den smidige nettopp virtuelle maskinen. Android har blitt en velsignelse for Java, som den mest populære plattformen i mobilverdenen. Derfor er Java fortsatt den beste hunden på rangeringer som Tiobe-indeksen og PyPL. Denne brede adopsjonen betyr at det er rikelig med kode for gjenbruk, og mye av det er åpen kildekode for å forenkle livet ditt. Du vil stå på skuldrene til gigantene når du begynner å sy sammen bazillionlinjene med fritt tilgjengelig Java-kode.

Go's korte historie gjør det øyeblikkelig relevant

Visst, det er kult å fange gratis Java-kode fra nettet. Men vent, det er skrevet for Java 1.3, og sjefen din vil at du skal bruke Java 1.8. Ikke bekymre deg, du kan sannsynligvis få det til å fungere igjen med litt omskriving. La oss flytte fristen igjen ... og igjen. Gammel kode kan virke som en gave, men det er ikke alltid en slam dunk, og noen ganger er det mer problemer enn det er verdt.

Go's korte historie betyr derimot at den er skrevet for dagens nettstandarder. Det er ingen rester igjen fra de dagene da applets skulle dominere verden. Det er ingen lenge glemte ideer som Java Beans eller J2EE som sitter som fristende plager. Det er ganske enkelt nytt og konstruert for hvordan folk bygger nettet i dag.

Java lar deg trykke på andre språk

JVM er grunnlaget for dusinvis av interessante språk som er avhengige av Java ved kjøretid. Hver kan enkelt kobles til koden din, slik at du kan skrive en del i Kotlin, en annen i Scala, og kanskje lim det hele sammen med Clojure. Hvis du vil bruke språk som Python, JavaScript eller Ruby, kan alle tre kjøre direkte i Java-land ved hjelp av emulatorer som ofte er førstevalget. Java gir deg friheten til å la hvert undergruppe og underprosjekt velge riktig språk for jobben mens du fortsatt kjører i samme JVM. Du trenger ikke å bruke den, men muligheten er alltid der.

Go fremmer harmoni

Ja, du kan strikke sammen en superclever-applikasjon som blander det beste av det nye og det trendy, og velger det absolutt beste språket for hver del av din fantastiske magnum opus på JVM. Du kan til og med blande inn oldies som Rexx og Common Lisp for å hedre sin plass i datahistorikken fra 70-tallet. Lykke til med å finne noen med samme smak og talenter som vil opprettholde dette Babels tårn. Bortsett fra å blande inn noen velutformede biblioteker, er det ikke alltid en god plan å etterligne Rube Goldberg når du designer god kode. Noen ganger er det hensiktsmessig og nødvendig, men det betyr ikke at det er en god plan. Harmoni og konsistens gjør livet lettere for alle. Go-verdenen leverer det.

Java’s JVM er magert og kraftig

Java-klassefiler måles ofte i hundrevis av byte. JAR-filene som knytter dem sammen, er vanligvis bare noen få megabyte. Selve Java-koden er liten fordi den virtuelle maskinen har så mye strøm for minnestyring og sikkerhet. Hvis du planlegger å flytte rundt mye kode, er det fornuftig å legge funksjonaliteten i et vanlig kjøretidsverktøy. Det er andre fordeler med sentralisering. Hvis det oppstår et sikkerhetsproblem på de laveste nivåene av Java, er det ikke nødvendig å kompilere og koble til all koden din på nytt. Mange problemer løses ved å oppgradere JVM alene.

Go lager hele pakken

JVM er fantastisk til du finner ut at du har installert feil versjon. Hvis du vil kjøre en JAR fullpakket med Java 1.8, men bare har 1.6-versjonen av JVM, kommer du ikke noe sted før du finner den. Go-kompilatoren produserer binærfiler som er klare til å kjøres. Ja, de er litt store, men det er fordi Go legger til all ekstra kode i binæren for deg. Det hele er der i en enkel pakke.

Java gjør trådene enkle

Å få forskjellige deler av et program til å kjøre uavhengig er ingen enkel oppgave. Java vant tidlige fans fordi modellen for tråder var enkel nok til å forstå, men kraftig nok til å være nyttig. JVM gjør en god jobb med å kartlegge tråder til forskjellige kjerner på maskinen. Det er ikke lett å gjøre, men det er på grunn av problemets kompleksitet, ikke Java. Go-brukere kan elske sine goroutines og kanaler, men de legger til et annet knust lag av kompleksitet på et allerede knust rot. Du vil spørre deg om det er en grønn tråd eller en OS-tråd. Da vil du lure på kompleksiteten til synkroniseringskanalene. Java er enklere.

Go letter trådbelastningen, intelligent

Java's tråder og synkroniseringsprimitive kan gjøre jobben, men til en høy pris. Å lage og ødelegge tråder er så arbeidskrevende og hukommelseskrevende at Java-programmerere alltid resirkulerer dem med trådbassenger. Java har mistet trekkraften på serveren fordi hvert treff på nettstedet trenger sin egen tråd. Go har lettere og mer fleksible gjenstander kalt goroutines som er knyttet til intelligente synkroniseringskøer som kalles kanaler. Mens de fleste servere ser ut til å være topp på 1000 eller kanskje 10.000 Java-tråder, rapporterer folk regelmessig å kjøre hundretusenvis av goroutines på samme maskinvare.

Go's modell er mer sofistikert og moderne fordi den er yngre. Feltet har lært mye om å levere sofistikerte multiprosessoralgoritmer, og du kan like godt dra nytte av det.

Java-verktøy er velprøvde og sanne

Java's modenhet betyr at du har mange flotte alternativer for verktøy: Eclipse, IntelliJ og mer. Det er sofistikerte byggeverktøy som Ant og Maven, og de store arkivene er optimalisert for å håndtere Java-kode. Det finnes også metakodeanalyser for alt fra å håndheve koderegler til å lete etter løpsforhold. De fungerer kanskje ikke med din versjon av koden, men de gjør det ofte. Dette er grunnen til at Java er en slik juggernaut.

Go-verktøy er moderne og nye

Go ble bygget for den moderne flertrådede verden, og kodeverktøyene er optimalisert for dagens utfordringer. Det er en race-tilstandsdetektor innebygd i feilsøkingsprogrammet og kjøretiden, så det er mye enklere å håndtere stygge problemer. Kildekoden kan revideres av golint og en statisk analysator kalt "go vet" som har en rekke heuristikker for å fange dårlig eller til og med dårlig skrevet Go-kode. Alle disse og mer er optimalisert for å holde koden din raskt i gang i en multicore-maskin.

Java har de konstruksjonene du vil ha

Gjennom årene har Java-samfunnet ønsket seg mange funksjoner; en del av tiden har de blitt innvilget. Stengninger, generiske legemidler, lambdas og mer er lagt til. Hvis det er en ny ide innen programmeringsspråk, er det en god sjanse for at noen har skutt den i Java-verdenen. Det er kanskje ikke ideelt, men alternativene er der. Du kan skrive den strålende koden hjernen din forestiller seg takket være Java's pågående utvikling.

Go unngår å konstruere forvirring

Friheten til å bruke dusinvis av smarte kodestrukturer høres bra ut til alle på laget begynner å gjøre det. Da blir det vanskeligere å lese andres kode fordi de bruker en smart funksjon A mens hjernen din er vant til en smart funksjon B. Den kombinatoriske forvirringen blandes med hver utvikler som kaster inn sin favorittkonstruksjon i blandingen.

Go var derimot designet for å være enkelt. Det ble eksplisitt bygget slik at en god programmerer kunne lære Go om noen få timer. Det er ikke dusinvis av smarte ideer som fyller hundrevis av sider med dokumentasjon. Det kan være begrensende når du skriver kode, men det er avslappende når du leser kode fra andre på teamet. Alle bruker de samme uttrykkene fordi alle bruker de samme kjernefunksjonene. Det er ikke bare en teambuilding-opplevelse, som Outward Bound. Det handler om effektivitet.

Java er moden

Alder gir visdom, modenhet og stabilitet - alle grunnene til å velge en bred, velutviklet kodebase som er mer enn to tiår dyp. Barna i dag fortsetter å lære Java på begynnelsen av reisen med datavitenskap, og den mest dominerende plattformen, Android, er bygget på den. Med mindre det er en god grunn til å endre, bør du holde deg til det beste.

Go er et rent skifer

Noen ganger er det best å legge fortiden bak. Tross alt betyr fremgang ofte å starte fersk. Go gir deg muligheten til å jobbe med et rent, skarpt, moderne verktøy som er optimalisert for det vi gjør i dag. Det lar deg nyte enkelheten og friheten til å legge fortiden bak.

Og rett og slett fordi Google startet Go for å gi litt enkel koding for deres endeløse serverfarm, betyr det ikke at det ikke kan vokse ut av det. Noen bruker den allerede til å kjøre droner, roboter og andre enheter. Kan smarttelefoner være langt etter?

Relaterte artikler

  • Trykk på kraften til Googles Go-språk
  • De beste Go-språket IDEer og redaktører
  • Anmeldelse: De fire store Java IDEene sammenlignet
  • Angular vs. React: En episk kamp om utviklerens tankedel
  • Java vs. Node.js: En episk kamp for utviklerens tankedel
  • PHP vs. Node.js: En episk kamp for utviklerens tankedel
  • Python vs. R: Kampen om datavitenskapsmenn
  • 21 varme programmeringstrender - og 21 blir kalde
  • 9 løgner som programmerere forteller seg selv
  • Karrierehacks: Profesjonelle gjør og ikke-ting for utviklere
$config[zx-auto] not found$config[zx-overlay] not found