Programmering

Java vs Googles Go: En episk kamp for udviklerens mind share

Go vs Java er ikke en velafstemt kamp mellem ligemænd. Den ene er en uhyrlig tungvægt, der har domineret branchen i årevis. Den anden er en skrøbelig, letvægtig nykommer, der viser masser af ungdom og løfte, men kun har et par slag.

Java og Go tackler også forskellige nicher. Den ene er rettet mod webapps på serversiden, et område hvor den anden engang var en stor spiller. Den anden er vokset væk i stativerne og er nu et populært valg for enheder.

Men ikke alle er flyttet væk fra Java på serversiden af ​​webapplikationer, territorium Go angriber og spiser væk på Java's base. Og kontakten er ikke et frygteligt stort spring, da de to er ens i mange aspekter. Begge elsker kærlige hyldest til C, hvis ikke nedenunder, i det mindste på overfladen, hvor mange udviklere bruger deres liv med at kæmpe med syntaks. De er begge ligetil og bydende nødvendige med tilstrækkelige strukturelle ligheder til, at det ikke er svært at konvertere kode mellem de to. (TardisGo-projektet er for eksempel et værktøj, der gør Go til Java, C # eller JavaScript.)

Overvej dette som et burkamp, ​​der sætter to fætre fra forskellige sider af programmeringssporene, der konkurrerer om din næste applikationsstak.

Java's lange historie bringer netværkseffekter, der hjælper alle

Java har eksisteret siden 1995 og tiltrak mere mind share hvert år. Alt fra små indlejrede processorer til massive serverchips kører Java hurtigt og effektivt takket være sin smidige just-in-time virtuelle maskine. Android er blevet en velsignelse for Java, som langt den mest populære platform i mobilverdenen. Derfor er Java stadig den bedste hund på placeringer som Tiobe-indekset og PyPL. Denne brede vedtagelse betyder, at der er masser af kode til genbrug, og meget af det er open source for at forenkle dit liv. Du vil stå på giganternes skuldre, når du begynder at sy sammen bazillionlinjerne med frit tilgængelig Java-kode.

Go's korte historie gør det øjeblikkeligt relevant

Sikker på, det er sejt at snappe fri Java-kode fra internettet. Men vent, det er skrevet til Java 1.3, og din chef vil have dig til at bruge Java 1.8. Bare rolig, du kan sandsynligvis få det til at fungere igen med lidt omskrivning. Lad os flytte fristen igen ... og igen. Gammel kode kan virke som en gave, men det er ikke altid en slam dunk, og nogle gange er det mere besvær end det er værd.

Go's korte historie betyder derimod, at den er skrevet til nutidens webstandarder. Der er ingen krydder tilbage fra de dage, hvor applets skulle dominere verden. Der er ingen længe glemte ideer som Java Beans eller J2EE, der sidder som fristende gener. Det er simpelthen nyt og konstrueret til, hvordan folk bygger internettet i dag.

Java giver dig mulighed for at trykke på andre sprog

JVM er grundlaget for snesevis af interessante sprog, der afhænger af Java under kørsel. Hver kan let linkes til din kode, så du kan skrive en del i Kotlin, en anden i Scala, og måske lim det hele sammen med Clojure. Hvis du vil bruge sprog som Python, JavaScript eller Ruby, kan alle tre køre direkte i Java-land ved hjælp af emulatorer, der ofte er førstevalget. Java giver dig friheden til at lade hvert underteam og underprojekt vælge det rigtige sprog til jobbet, mens du stadig kører i samme JVM. Du behøver ikke bruge det, men muligheden er altid der.

Go fremmer harmoni

Ja, du kan strikke en superclever-applikation, der blander det bedste af det nye og det trendy sammen, og vælger det absolut bedste sprog til hver del af dit vidunderlige magnum opus på JVM. Du kan endda blande oldies som Rexx og Common Lisp for at ære deres plads i 70'ernes æra-computerhistorie. Held og lykke med at finde nogen med samme smag og talenter, som vil vedligeholde dette Babels tårn. Bortset fra at blande et par veludformede biblioteker er det ikke altid en god plan at efterligne Rube Goldberg, når man designer god kode. Nogle gange er det hensigtsmæssigt og nødvendigt, men det betyder ikke, at det er en god plan. Harmoni og konsistens gør livet lettere for alle. Go-verdenen leverer det.

Java's JVM er magert og kraftfuldt

Java-klassefiler måles ofte i hundredvis af byte. JAR-filerne, der forbinder dem sammen, er normalt kun få megabyte. Selve Java-koden er lille, fordi den virtuelle maskine har så meget strøm til hukommelsesstyring og sikkerhed. Hvis du planlægger at flytte rundt på masser af kode, er det fornuftigt at lade funktionaliteten være i et fælles runtime-værktøj. Der er andre fordele ved centralisering. Hvis der opstår et sikkerhedsproblem på de laveste niveauer af Java, er der ikke behov for at kompilere og linke al din kode igen. Mange problemer løses ved at opgradere JVM alene.

Go opretter den komplette pakke

JVM er vidunderlig, indtil du finder ud af, at du har den forkerte version installeret. Hvis du vil køre en JAR pakket med Java 1.8, men kun har 1.6-versionen af ​​JVM, går du ikke nogen steder, før du finder den. Go-kompilatoren producerer binære filer, der er klar til at køre. Ja, de er lidt store, men det er fordi Go tilføjer al den ekstra kode til binærprogrammet for dig. Det hele er der i en nem pakke.

Java gør tråde enkle

At få forskellige dele af et program til at køre uafhængigt er ingen nem opgave. Java vandt tidlige fans, fordi dens trådmodel var enkel nok til at forstå, mens den var stærk nok til at være nyttig. JVM udfører et godt stykke arbejde med at kortlægge tråde til forskellige kerner på maskinen. Det er ikke let at gøre, men det er på grund af problemets kompleksitet, ikke Java's. Go-brugere elsker måske deres goroutines og kanaler, men de tilføjer endnu et knudrede lag af kompleksitet på et allerede rodet rod. Du vil finde dig selv at spørge, om det er en grøn tråd eller en OS-tråd. Derefter vil du undre dig over kompleksiteten af ​​synkroniseringskanalerne. Java er mere ligetil.

Go letter trådbelastningen intelligent

Java's tråde og synkroniseringsprimitiver kan muligvis gøre jobbet, men til en stor pris. Oprettelse og ødelæggelse af tråde er så besværlig og hukommelsesintensiv, at Java-programmører altid genbruger dem med trådpuljer. Java har mistet trækkraft på serveren, fordi hvert hit på webstedet har brug for sin egen tråd. Go har lettere vægt og mere fleksible genstande kaldet goroutines, der er forbundet med intelligente synkroniseringskøer kaldet kanaler. Mens de fleste servere ser ud til at være på 1.000 eller måske 10.000 Java-tråde, rapporterer folk regelmæssigt at køre hundreder af tusinder af goroutines på den samme hardware.

Go's model er mere sofistikeret og moderne, fordi den er yngre. Feltet har lært meget om at levere sofistikerede multiprocessoralgoritmer, og du kan lige så godt udnytte det.

Java-værktøjer er afprøvede og sande

Java's modenhed betyder, at du har masser af gode muligheder for værktøjer: Eclipse, IntelliJ og mere. Der er sofistikerede byggeværktøjer som Ant og Maven, og de store arkiver er optimeret til at håndtere Java-kode. Der er også metakodeanalyser for alt fra håndhævelse af kodregler til søgning efter raceforhold. De fungerer muligvis ikke med din version af koden, men det gør de ofte. Dette er grunden til, at Java er sådan en juggernaut.

Go-værktøjer er moderne og nye

Go blev bygget til den moderne multitrådede verden, og kodeværktøjerne er optimeret til nutidens udfordringer. Der er en race-tilstandsdetektor indbygget i debugger og runtime, så det er meget enklere at håndtere grimme problemer. Kildekoden kan revideres af golint og en statisk analysator kaldet "go vet", der har en række heuristikker til at fange dårlig eller endda dårligt skrevet Go-kode. Alle disse og mere er optimeret til at holde din kode kørende hurtigt i en multicore-maskine.

Java har de konstruktioner, du ønsker

I årenes løb har Java-samfundet ønsket sig mange funktioner; noget af tiden er de blevet tildelt. Lukninger, generiske lægemidler, lambdas og mere er tilføjet. Hvis der er en ny idé i programmeringssprog, er der en god chance for, at nogen har skoret den i Java-verdenen. Det er måske ikke ideelt, men mulighederne er der. Du kan skrive den strålende kode, som din hjerne forestiller sig takket være Java's igangværende udvikling.

Go undgår konstruktionsforvirring

Friheden til at bruge snesevis af smarte kodningsstrukturer lyder godt, indtil alle på holdet begynder at gøre det. Derefter bliver læsning af andres kode sværere, fordi de bruger en smart funktion A, mens din hjerne er akklimatiseret til en smart funktion B. Den kombinatoriske forvirring forbinder med hver udvikler, der smider sin favoritkonstruktion ind i blandingen.

Go var på den anden side designet til at være enkel. Det blev eksplicit bygget, så en god programmør kunne lære at gå om et par timer. Der er ikke snesevis af smarte ideer, der fylder hundredvis af sider med dokumentation. Det kan være begrænsende, når du skriver kode, men det er afslappende, når du læser kode fra andre på holdet. Alle bruger de samme udtryk, fordi alle bruger de samme kernefunktioner. Det er ikke kun en teambuilding-oplevelse som Outward Bound. Det handler om effektivitet.

Java er moden

Alder bringer visdom, modenhed og stabilitet - alle grundene til at vælge en bred, veludviklet kodebase, der er mere end to årtier dybt. Børnene i dag fortsætter med at lære Java i begyndelsen af ​​deres rejse med datalogi, og den mest dominerende platform, Android, er bygget på den. Medmindre der er en god grund til at ændre, skal du holde fast ved de bedste.

Go er et rent skifer

Nogle gange er det bedst at efterlade fortiden. Når alt kommer til alt betyder fremskridt ofte at starte frisk. Go giver dig muligheden for at arbejde med et rent, skarpt, moderne værktøj, der er optimeret til det, vi gør i dag. Det giver dig mulighed for at nyde enkelheden og friheden ved at efterlade fortiden.

Og simpelthen fordi Google startede Go for at give kodning til deres endeløse serverfarmes enkelhed, betyder det ikke, at det ikke kan vokse ud af det. Nogle bruger det allerede til at køre droner, robotter og andre enheder. Kan smartphones være langt bagefter?

Relaterede artikler

  • Tryk på kraften i Googles Go-sprog
  • De bedste Go-sprog IDE'er og redaktører
  • Anmeldelse: De fire store Java IDE'er sammenlignet
  • Angular vs. React: En episk kamp om udviklerens mind share
  • Java vs. Node.js: En episk kamp for udviklerens mind share
  • PHP vs. Node.js: En episk kamp om udviklerens mind share
  • Python vs R: Kampen om datavidenskabers mind share
  • 21 hotte programmeringstendenser - og 21 bliver koldt
  • 9 løgne programmører fortæller sig selv
  • Karrierehacks: Professionelle gør og ikke-gør for udviklere