Analys av programmeringsspråket Go



Relevanta dokument
Analys av programspråket Go

Introduktion till programmering, hösten 2011

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Grundkurs i programmering - intro

Inledande programmering med C# (1DV402) Introduktion till C#

SKOLFS. beslutade den -- maj 2015.

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Analys av programspråket Go. CAJ HOFBERG och JOEL SMEDBERG

Programmering i C++ Kompilering från kommandoraden

Föreläsning 1: Intro till kursen och programmering

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

Föreläsning 1: Intro till kursen och programmering

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Introduktion till programmering och Python Grundkurs i programmering med Python

Datavetenskapligt program, 180 högskolepoäng

Program & programmering

SKOLFS. beslutade den XXX 2017.

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Välkomna till DIT012 IPGO

Programmeringsteknik I

TDIU01 (725G67) - Programmering i C++, grundkurs

Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Li#eratur och empiriska studier kap 12, Rienecker & Jørgensson kap 8-9, 11-12, Robson STEFAN HRASTINSKI STEFANHR@KTH.SE

Kursplanering för EE3D i kursen Programmering 1, 100p.

Föreläsning 2. Operativsystem och programmering

Att skriva examensarbete på avancerad nivå. Antti Salonen

Objektorienterad programmering i Java I

TDP003 Projekt: Egna datormiljön

Innehålls förteckning

Perspektiv på kunskap

Individuellt PM3 Metod del I

Programmering för alla!

Hållbar utveckling A, Ht. 2014

Bakgrund. Frågeställning

Kursupplägg. Examination. Föreläsning 1: Intro till kursen och. Kursmaterial. programmering. Kursboken: Programmera med a multimedia approach

Fakulteten för ekonomi, kommunikation och IT. Utbildningsplan SGITD. IT-Designprogrammet. Study programme in IT-Design

Introduktion till programmering. Programspråk och paradigmer

Julia Modig Tjärnström, Anna Marklund, Patrik Ljungqvist 723G04

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

Webbserverprogrammering

Operativsystem och användargränssnitt

25. Hämta Adobe Reader

Undervisningen i ämnet programmering ska ge eleverna förutsättningar att utveckla följande:

Realtidssystem HT03. Vad är realtidssystem? Inbyggda system. Att programmera, Tasks (Uppgifter) Realtidssystem kräver analys

Programmering B PHP. Specialiseringen mot PHP medför att kursens kod i betygshanteringen heter PPHP1408.

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

för att komma fram till resultat och slutsatser

Bedömningsprotokoll för examensarbete inom socialt arbete på grundnivå

Preliminär specifikation av projekt

Programmering för alla!

Skydda din Dropbox med säker kryptering!

Föreläsning 1: Introduktion till kursen

1:5 SLUTRAPPORT - POST MORTEN LARS EHRMAN WP

Imperativ programmering

PROGRAMMERING I NXC. Sammanfattning KUNGLIGA TEKNISKA HÖGSKOLAN

Mjukstart i programmering

Laboration i datateknik

Introduktion till programmering D0009E. Föreläsning 1: Programmets väg

TDP001/TDP002. Introduktionsföreläsning. Eric Elfving Institutionen för Datavetenskap (IDA)

Examensarbete Kandidatnivå (kurs: 2DV50E)

Kom igång med TIS-Office

Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling

Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015

Anhållan om ändrad ersättning för vissa HST

Användning av handdatorer och trådlösa nät på föreläsningar och i labsalar. Preliminär specifikation

TDDD92 Artificiell intelligens -- projekt

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Mattias Enervall (Övningsassistent) Examination. 1 Skriftlig tentamen (betyg)

Föreläsning 3. Programmering, C och programmeringsmiljö

WEBBSERVERPROGRAMMERING

Installationsanvisning för LUQSUS version 2.0

1 Språket C Valet av språket C++ för kompendiet. 1.2 Språket. 1.3 Att programmera. 1.4 Hello World Börja programmera

Administrivia. hh.se/db Verónica Gaspes (Kursansvarig) 2 Daniel Petersson (Labassistent) Examination. 1 Skriftlig tentamen (betyg)

Språkteknologi och Open Source

[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P

Handbok Simond. Peter H. Grasch

Boken?!?! Vad är ett program? Kompilerande-Interpreterande Programmeringsmiljö Hello World! Att programmera och ett enkelt program Variabler printf

Protokoll fo r examination av examensarbeten vid juridiska institutionen

10 tips. för dig som skapar internetbaserade stödprogram för vården. psykologpartners

APA för nybörjare. Innan du börjar. Översikt

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.

BaraTrav Prenumeration och Installation Version 1.3.4

LAJKA-GUIDE. Så kör du. Windows på din Mac. 7 Fler spel och program 7 Enklare än Bootcamp 7 Körs direkt i OSX 7 Helt gratis

Programmering. Den första datorn hette ENIAC.

Objektorienterad programmeringsmetodik(5dv081)

Föreläsning 1: Introduktion till kursen

Utbildningsplan för Datavetenskapligt program, 180 högskolepoäng

Nadia Bednarek Politices Kandidat programmet LIU. Metod PM

Vaka Användarmanual. Användarmanual. VAKA Passersystem

Säker programmering - Java

Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson

Föreläsning 5 5DV086 - Programspråk

Exempel på gymnasiearbete inom ekonomiprogrammet juridik

Källkritik. - om att kritiskt granska och värdera information. Ted Gunnarsson

Elevernas uppfattningar om alltmer digitaliserad undervisning

Litteraturstudie. Utarbetat av Johan Korhonen, Kajsa Lindström, Tanja Östman och Anna Widlund

Transkript:

Analys av programmeringsspråket Go Caj Hofberg, 890621-0813, caj.hofberg@gmail.com Torsgatan 54 11337 Stockholm Joel Smedberg, 870407-0476, joelsm@kth.se Sälgstigen 13 12553 Älvsjö Kurs: Examensarbete inom datalogi, grundnivå, DD143X Handledare: Alexander Baltatzis Skolan för Datavetenskap och Kommunikation Kungliga Tekniska skolan Datum: 2011

Abstract Go is a programming language Sammanfattning Go är ett programmeringsspråk Definitioner Go - med Go avses programmeringsspråket Go, utvecklat av Google i uppsatsen. Innehållsförteckning Inledning Sammanhang Go är ett programmeringsspråk som ämnar hjälpa programmerarna bli mer produktiva. Meningen är att förbättra för parallellprogrammering och nätverkskommunikation. Modulär programkonstruktion uppmuntras.# Som språk var syftet med språket att förbättra populära programspråk med ändringar som har varit svåra att implementera i andra språk. En ren stil har varit ett centralt mål för utvecklarna. Ett problem som löstes med en kompromiss var att äldre språk var svåra att lägga till funktioner i utan att ta bort eller väsentligt ändra layouten för koden. Man bestämde sig från språkutvecklarsidan att skapa ett nytt språk som hade annorlunda upplägg fast som ändå gick att känna igen sig i för erfarna programmerare som vara vana vid det äldre upplägget. 1 Flera trender gav upphov till idén att designa ett nytt språk från grunden. Man la märke till att datorerer i ökad omfattning har börjat levereras med stöd för samtidigt körning i en processor. Trots att datorerna har blivit mycket snabbare har inte utvecklingsarbetet blivit 1 http://en.wikipedia.org/wiki/go_%28programming_language%29

snabbare. Garbage collection och samtidig körning lyfts också fram som viktiga faktorer för ett framtida språk. Betydelsen av hierarkier har minskat även om man vill göra objektorienterad programmering möjlig. Typerna är mindre strikta än i mer populära språk. 2 Bakgrund Många rykten om Go finns men det är i nuläget svårt få en god uppfattning om språkets kvalité utan att testa språket personligen. Denna undersökning syftar till att räta ut några av de frågetecken som finns samt att ge en objektiv bild av språket som helhet. Bara att visa att språket har en hög kvalité behöver inte vara det enda intressanta att studera. Det skulle kunna visa sig att språket är effektivt men svårt att lära sig att använda eller svårt att koda i. Utöver det saknas information om hur lång tid olika typer av uppgifter tar att utföra med hjälp av programmet och inom de projekt som involverar mjukvaruutvecklning som på något vis är beroende av eller underlättas av att utnyttja det aktuella språket som verktyg. Möjligen skulle vissa typer av sysslor gå snabbt med språket och andra mindre snabbt. Med hjälp av en kartläggning av skillnader i tidsåtgång skulle planeringen underlättas liksom valet av programspråk till olika utvecklingsprojekt. Dessutom finns det ett intresse av att utvärdera hur väl språket fungerar för praktiska sammanhang såsom utveckling av enkla servrar. Även om Go skulle visa sig vara bättre anpassat för teoretiska sammanhang är det värdefull information för de institutioner som kan tänkas behöva utveckla annorlunda mjukvara. I så fall behövs kartläggning av vad språket främst kan ha för framtida användning inom sådana miljöer. För att veta om språket i realiteten är värt att lära sig krävs även en analys av dess framtidsutsikter. Även om Go har många tekniska finesser avgör detta tyvärr en förhållandevis liten del av språkets framgång. Andra avgörande faktorer inkluderar inte minst fortsatt utveckling av språket, budget för marknadsföring, hur många större projekt som byggs i det, inlärningströskel, samt om språket lyckas skapa någon typ av hajp faktor kring sig. Även om befintliga programmeringsspråk utvecklats en hel del under senaste tio åren har inget större nytt språk trädit fram. Mycket intressant är även påverkan från andra företag, skulle dessa bestämma sig för att utveckla språket själva för ett mer specifikt användningsområde. Det givna exemplet är Google Androids implementation av java vars utveckling onekligen breddar språket men det juridiska skalv som uppstått pågrund av detta gör det tveksamt om detta egentligen gynnar språkets långsiktiga utveckling. Go har även kopplingar till Google, som är ett företag med stora möjligheter att spendera resurser på diverse projekt i reklamsyfte. För en värderare alternativt marknadsförare vid Google skulle en noggrann utomståendes utvärdering av språkets framtid vara ytterst väsentlig. Om det skulle visa sig att det i stort är lönsamt att utveckla eller stödja 2 http://golang.org/doc/go_faq.html

programspråk för marknadsföringsföretag eller sökmotorföretag skulle det kunna förändra bilden av hur resurserna för marknadskommunikation ska fördelas. Idag finns redan större mjukvaruutvecklingsföretag såsom Microsoft som satsar på utvecklingsspråk och tillhörande miljöer, till exempel.net 3, men då säljs programmen för utveckling av programmen och mjukvaran som behövs för att kunna köra programmen, till exempel Windows, av samma företag. Problemformulering Hur står sig Go gentemot andra programmeringsspråk i självdokumentation, produktivitet och framtidsutsikter? Mål Vissa språk går att förstå utan vana. Hur väl nykomlingar accepterar språket och förstår vad som sägs med språket är nödvändigt att få veta. Vissa programspråk kan behöva vägledning eller separat dokumentation för att vara av värde. Hur väl kod skriven i Go går att förstå utan ytterligare dokument eller information ska därför tas reda på. Målet är dels att undersöka hur lång tid utvecklingen tar och dels att ta reda på hur snabbt mjukvaran fungerar. Tiden det tar för en utvecklare att skriva webbapplikationer i Go önskas få fram. Att utvärdera Go som kommande programmeringsspråk, förstå dess grunder samt jämföra dess styrkor respektive svagheter mot andra programmeringsspråk vore mycket värdefullt för att avgöra om språket är mödan värt att behandla. Avgränsningar Avancerade funktioner i Go, annat än vad som behövs för att programmera en wiki, använda flera trådar eller andra för en utvärdering kritiska funktioner kommer inte analyseras. De för utvärdering skrivna programmen kommer hållas små och antalet utvecklare per projekt kommer inte att överstiga två. En bättre uppfattning om språkets skalbarhet till större projekt kommer utebli, utöver de delar som krävs för att testa komponentbaserad programmering. Resultatet av denna studie kommer i första hand vara en fingervisning om språkets tekniska potential att lyckas. Någon analys av politik, ekonomisk satsning eller dylika faktorer som med all sannolikhet spelar stor roll kommer inte alls behandlas. Teori a. heuristisk utvärdering 3 http://sv.wikipedia.org/wiki/dotnet_framework

Materiel Teknisk utrustning Stöd för Windows saknas i nuläget. Datormiljöer som stödjer Linux eller Mac OS X kommer därför krävas. Hårdvarumässigt behövs en dator med flera kärnor för att kunna dra nytta av den effektiva trådhantering som utlovats. I dagsläget är mjukvaran körbar på vanliga, standardutrustade datorer med Linux då kraven på miljön mest rör vanligt förekommande program. Självdokumentation Får vi tillgång till försökspersoner med låg erfarenhet av programmering kan vi testa hur lätt koden från Go och ett annat programmeringsspråk är att förstå. Sådana skulle relativt enkelt kunna finnas på föreläsningar eller via Internet. Intervjupersoner I skrivande stund ges inte ens några relevanta träffar vid sökning på Go-programmering i Sverige. Någon aktiv svensk utveckling ser inte ut att pågå för tillfället. Vi gör därför bedömningen att en erfaren Go-programmerare kommer bli för svår att få tag på. Den skara som har stor erfarenhet om Go uppskattas också vara för liten för att det ska vara värt att leta upp någon Go-utvecklare utomlands. Istället kommer enkäten omfatta de intervjuades bild av framtidsutsikterna. Metod För att testa enkel programmering och förmågan att utveckla enkla program som använder körs flertrådat och nätverkskommunikation kommer vi att bygga en enkel wiki i Go. Vår wiki med tillhörande kod kan relativt enkelt jämföras med motsvarande i andra programmeringspråk, till exempel Java eller Python. För att lyckas med ovanstående krävs en grundläggande förståelse för Go som programmeringsspråk. En noggran bokföring över under utveckling nedlagd tid på manualer och

guider skall syfta till att få en uppfattning om hur svårt språket är att lära sig i praktiken. Våra kunskaper i Go var obefintliga vid projektets inledning, så vid tog tillfället i akt och bokförde vår egen lärandeprocess. I studien ska typning, kompilering, parallellkörning, säkerhet och utvecklingsverktyg utvärderas och tid bokföras separat. Källkoden och dess begriplighet ska utvärderas genom att enkäter delas ut där kod i Go respektive annat lämpligt programspråk ställs mot varandra. För att utvärdera folks tilltro till språket ska vi i enkäterna fråga hur stor potential språket kan ha och om de anser att det verkar vara ett bra språk. Thurén beskriver att värderingar kan påverka slutsatser. Det finns så kallade värdepremisser som måste isoleras och utväreras. 4 Eftersom våra enkäter bedöms behandla enkätsvararens värdering av språket kommer en sådan premiss förekomma. Utöver det kan undersökningen av språket leda till att undersökaren får värderingar om språket. Därför måste även sådana värderingar hänföras till värdepremisser som kan sorteras ut från ren fakta. Reliabilitet/Validitet Vidare talar Thurén om reliabilitet och validitet. Realibilitet innebär att siffror som tagits fram är korrekta och inte är missvisande. Till exempel om försöksgruppen är för liten blir realibiliteten för låg. 5 Det är viktigt att enkäterna utformas så att enkäterna har en hög nivå av reliabilitet. Många personer som är vara slumpmässigt utvalda och representerar rätt målgrupp är att önska. Att få hög validitet kan vara svårare. Med validitet menas att de framtagna måtten är relevanta för undersökningen. 6 Man ska inte låta yttre faktorer störa i ett formulär såsom att före utlämningen av formulären berätta om vad man anser om språket. Induktion/deduktion Thurén... Vi använder oss explicit av induktion eftersom information endast insamlas utan möjlighet att säkerställa att all information är korrekt och utan att informationen utesluter alla andra alternativ. Positivism/hermeneutik 4 s.52 Thurén, Vetenskapsteori för nybörjare, 2 upplagan,2007, Liber, Malmö 5 s. 34 Thurén 6 s.26 Thurén

Det finns två huvudinriktningar inom vetenskapen. Positivismen är traditionellt av naturvetenskaplig härkomst. Hermeneutiken är traditionellt frambringad av humanister. Positivismen går mer ut på att använda säker kunskap och uppmuntrar till att kvantifiera fakta. Kvantifiering innebär att fakta ska analyseras statistiskt och göras om till värden som går att mäta. Målet är att få en säker kunskap. 7 Ofta används mätvärden av positivister. Hermeneutiken går däremot ut på att förstå varför skeenden är som de är. Målet är ofta att förklara människor och varför de beter sig som de gör. Det är svårt att avgöra om vetenskapsmannen har rätt eller fel i sina resonemang. Det blir viktigt att det man tolkar sätt in i rätt kontext (sammanhang). 8 Djupintervjuer är vanligare i hermeneutisk forskning. Formulären ska ha en positivistisk karaktär och analysen av programspråket i och mer Wikiutvecklningen en mer hermeneutisk. I och med att positivismen inte är ämnad för att analysera människors handlingar bör allt utanför svarsformulären som inte följer mallen beaktas med låg prioritet. Wiki-utvecklingen ska analyseras på ett sätt som inte känns luddigt men som ändå kan ta hänsyn till mänskliga faktorer. Hur mycket tid som läggs ner är en kvantifierad fakta men analysen av den faktan kan vara hermeneutisk trots faktans natur i och med att kännedom finns om vad siffrorna representerar i verkligheten. Med andra ord: ingen djupanalys av text skriven utanför kryssrutor och liknande svarselement ska utföras. Kodandet ska analyseras i detalj snarare än att bara studera samband mellan siffror. Empiri Empiri är vanligt inom positivismen och går ut på att istället för att granska tidigare kunskap skapa en egen uppfattning från grunden utifrån verkligheten. 9 Samtliga genomförda undersökningar i detta dokument är empiriska då ingen nämnvärd tidigare kunskap finns att tillgå. Kvalitativ/kvantitativ Kartläggning av tidsåtgång Eftersom forskningsgruppen består av två medlemmar har en person ansvarat för tidtagning och en annan utfört uppgifterna. Samtliga tider är angivna i tabellen och intenstitet och lärandekrav är angivna för varje dokument. Kartläggning av fördelar/nackdelar 7 s.16-17 Thurén 8 s. 94-103 Thurén 9 s.18-21 Thurén

SWOT-modellen valdes för att analysera hur mjukvaruutvecklingen fortskred. Normalt används modellen för utvärdering av marknadsföring och inom många olika typer av projekt. Strengths (interna fördelar) tolkar vi som fördelar relaterade till teknik och opportunities (externa fördelar) som fördelar relaterade till att attrahera och behålla programmerare. Motsvarande gäller för weaknesses (interna nackdelar) som vi tolkar som nackdelar relaterade till teknik och threats (externa nackdelar) som nackdelar relaterade till att attrahera och behålla programmerare. Tabellen används för att samla in alla åsikter och tankar som uppkom i och med kodningen. Den fyller också funktionen att det är lättare att täcka alla områden och se arbetet ur flera olika synvinklar samtidigt som utvecklaren uppmuntras ta på sig en växelvis positiv och negativ roll under kritiken. Utöver det används det interna perspektivet för att studera tekniska kvaliteter och det externa för att analysera för- och nackdelar i tillämpningar. Nuvarande status I dagsläget ger inget annonseras ingen efterfrågan på jobb för Go-programmerare på någon av de större svenska jobbhemsidorna, dock anger golang på sin hemsida att Google använder Go för ett flertal interna projekt. De två av de flesta erkänt största sidorna för rankning Utförande Troligtvis samma som Metod, Materiel, Tidsplan, Källor osv. Resultat Tabell för tidsåtgång Pass Starttid Sluttid Produktivitet Krav på lärande 1.Fixa kompilator 18.10 18.30 Låg 2.Kompilera HelloWorld 3.Wiki:Datastrukt urer 4.Wiki:HTTPserver

SWOT-tabell Pass Strengths Weaknesses Opportunities Threats 1.Fixa kompilator Snabb installation, utförlig testkod Mycket diskutrymme krävdes Inget krångel Inga binära filer, ingår inte i OS 2.Kompilera HelloWorld Kompilatorn kändes lik gcc Konstiga kommandon 3.Wiki:Datastrukt urer Smart med input/output för funktioner 4.Wiki:HTTPserver Analys Det uppskattades att det gick snabbt och relativt smärtfritt att kompilera och installera Go. Även om det inte fanns binära filer så är det inte helt otänkbart att flera programmerare är rutinerade i sådant. Vi bedömer också att många programmerare har en kunskapsnivå och erfarenhet som generellt överstiger vår. Däremot kan det vara ett hinder att programmet inte finns inlagt i operativsystemen när de levereras, som till exempel gcc gör i vissa Linux-distibutioner. Det fanns inte heller något enkelt sätt att automatiskt ladda ner Go-kompilatorn på de testdatorer vi använde oss av. Troligtvis påverkar det hur stor andel av de potentiellt intresserade som lyckas få igång en kompilator givet den lilla tid som vi tror att professionella programmerare har attt lägga ner på att testa den uppsjö av programspråk som finns tillgängliga. Diskussion Allmänna förhållanden felkällor slutsatser, rek. Referenser/Källförteckning http://en.wikipedia.org/wiki/go_%28programming_language%29 http://golang.org/doc/go_faq.html

http://sv.wikipedia.org/wiki/dotnet_framework Thurén, Vetenskapsteori för nybörjare, 2 upplagan, 2007, Liber, MalmöThurén, Vetenskapsteori för nybörjare, 2 upplagan, 2007, Liber, MalmöThurén, Vetenskapsteori för nybörjare, 2 upplagan, 2007, Liber, Malmö Dahmström,Från datainsamling till rapport, 3 upplagan, 2000, Studentlitteratur AB, Lund.