Analys av programspråket Go. CAJ HOFBERG och JOEL SMEDBERG
|
|
- Sara Nilsson
- för 8 år sedan
- Visningar:
Transkript
1 Analys av programspråket Go CAJ HOFBERG och JOEL SMEDBERG Examensarbete Stockholm, Sverige 2011
2 Analys av programspråket Go CAJ HOFBERG och JOEL SMEDBERG Examensarbete i datalogi om 15 högskolepoäng vid Programmet för datateknik Kungliga Tekniska Högskolan år 2011 Handledare på CSC var Alexander Baltatzis Examinator var Mads Dam URL: hofberg_caj_och_smedberg_joel_k11083.pdf Kungliga tekniska högskolan Skolan för datavetenskap och kommunikation KTH CSC Stockholm URL:
3 Abstract Go is a programming language developed by Google. The language is new and aims to replace the more established languages. Parallel programming, computer networking and componentbased programming has been improved, according to the developers. The language s quality, agility, suitability for small projects and future prospects are treated in this paper. Go is compared to other languages in terms of self-documentation, productivity and future prospects. The authors, with no previous experience of Go, has acted as test subjects and implemented a wiki in Go. The time spent has been documented and the programming has been analyzed from the four perspectives of a SWOT analysis. A quantitative questionnaire to evaluate the view of Go has been conducted. Go did not appear to be the revolutionary new language we expected.
4 Referat Go är ett programmeringsspråk utvecklat av Google. Språket är nytt och ämnar ersätta etablerade språk. Parallellprogrammering, nätverkskommunikation och komponentbaserad programmering har bäddats in. Språkets kvalité, smidighet, lämplighet för små projekt och framtidsutsikter behandlas i uppsatsen. Go jämförs mot andra språk i fråga om självdokumentation, produktivitet och framtidsutsikter. Författarna, utan tidigare erfarenheter av Go, har agerat som försökspersoner, försöksprogrammerare, och implementerat en wiki i Go. Nedlagd tid har dokumenterats och utvecklandet analyserats ur de fyra perspektiven i en SWOT-analys. En kvantitativ enkät med kryssfrågor som utvärderat synpunkter om Go har genomförts. Go gav inte intryck av att vara det banbrytande språk vi hade hoppats på.
5 Statement of collaboration Sammanfattningarna på svenska och engelska, definitioner, teorikapitlet och utformningen av SWOT-tabellen skrevs av Hofberg, C. Enkäten med tillhörande diagram, större delen av analysen och diskussionskapitlet utformades i huvudsak av Smedberg, J. Inledningen, slutsatsen och metodkapitlet skrevs gemensamt av båda författarna. Båda författarna har agerat som växelvis observatörer och försökspersoner i SWOT-analysen. Observatören mätte tiden och matade in information i tabellen och försökspersonen installerade, körde, programmerade och studerade. Flera uppgifter har gjorts om; i de fallen har de mest rättvissande resultaten tagits med.
6
7 Innehåll 1 Inledning Definitioner Sammanhang Bakgrund Problemformulering Mål Avgränsningar Teori Reliabilitet/Validitet Induktion/deduktion Positivism/hermeneutik Empiri Kvalitativ utvärdering Metod Materiel Teknisk utrustning Intervjupersoner Kartläggning av tidsåtgång Modell för analys av fördelar/nackdelar Kartläggning av fördelar/nackdelar Utformning av enkäten Kvantitativ utvärdering Resultat Tabell för tidsåtgång SWOT-tabell Enkätundersökning Analys Tidsåtgång Fördelar/nackdelar Installation
8 5.2.2 Kompilering Funktionsanrop Paket Datastrukturer Go som http-server Enkätsvar Diskussion 21 7 Slutsats 23 8 Rekommendationer för fortsatta studier 25 9 Felkällor Enkätundersökningen Wikipedia Källförteckning Insamlad data Bilaga A - Enkät Bilaga B - Programkod i Go wikiserver.go edit.txt view.txt
9 Kapitel 1 Inledning 1.1 Definitioner Go - Med Go avses programmeringsspråket Go, utvecklat av Google Komponentbaserad programmering - En form av mjukvaruutveckling som delar upp programkod i komponenter 1 IDE - Integrerad utvecklingsmiljö; en kombination av textredigerare, kompilator och debugger Sammanhang Go är ett programmeringsspråk som ämnar hjälpa programmerarna att bli mer produktiva. Meningen är att förenkla för parallellprogrammering och kommunikation i nätverk. Modulär programkonstruktion uppmuntras. Syftet med språket är att förbättra populära programspråk med ändringar som har varit svåra att implementera i andra språk. En ren stil är ett centralt mål för utvecklarna. Ett problem som löstes med kompromisser var att det var svårt att förbättra gamla språk som till exempel C++ eller ändra layouten för koden. Man har bestämt sig från språkutvecklarsidan att skapa ett nytt språk som ämnas ha ett annorlunda upplägg fast som ändå går att känna igen sig i för erfarna programmerare som är vana vid det äldre upplägget. 3 Flera trender gav upphov till idén att designa ett nytt språk från grunden. Man la märke till att datorer i ökad omfattning har börjat levereras med stöd för samtidig körning i en processor. Trots att datorerna har blivit mycket snabbare har inte utvecklingsarbetet för kod blivit snabbare. Garbage collection och samtidig körning lyfts också fram som viktiga faktorer för ett framtida språk. Betydelsen av hierar
10 kier har minskat även om man vill göra objektorienterad programmering möjlig. Typerna i Go är mindre strikta än i mer använda språk 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 är lätt att utveckla i för en erfaren Goprogrammerare behöver inte vara det enda intressanta att studera. Det skulle kunna visa sig att språket är tidsmässigt effektivt att arbeta med men svårt att lära sig att använda eller svårt att programmera i även för den som är van. Information saknas om hur lång tid olika typer av uppgifter tar att utföra med hjälp av programspråket inom de projekt som involverar mjukvaruutveckling 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 kan det finnas 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 endast skulle visa sig vara väl anpassat för specialiserade forskningssammanhang ä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, och om språket lyckas skapa ett gott rykte kring sig. Även om befintliga programmeringsspråk utvecklats en hel del under de senaste tio åren har inget större nytt språk trädit fram. 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 väsentlig. Om det skulle visa sig att det i stort är lönsamt att utveckla eller stödja 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 5, men då säljs programmen för utveckling av programmen och mjukvaran som behövs för att kunna köra programmen,
11 till exempel Windows, av samma företag. I dagsläget annonseras ingen efterfrågan på jobb för programmerare i Go på någon av de större svenska jobbsidorna. Dock anger Golang.org, kompilatorns officiella hemsida, att Google använder Go för ett flertal interna projekt Problemformulering Hur står sig Go gentemot andra programmeringsspråk vad gäller självdokumentation, produktivitet och framtidsutsikter? 1.5 Mål Vissa språk går att förstå utan vana. Vissa programspråk kan behöva extra mycket 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 typiska program kör. 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. 1.6 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
12
13 Kapitel 2 Teori 2.1 Reliabilitet/Validitet Thurén talar om reliabilitet och validitet. Reliabilitet innebär att siffror som tagits fram är korrekta och inte är missvisande. Till exempel om försöksgruppen är för liten blir reliabiliteten för låg. 7 Det är viktigt att enkäter i undersökningar utformas så att de har en hög nivå av reliabilitet. Många personer som är 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. 8 För att få högre reliabilitet bör man 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. För att få högre validitet bör man fråga om det aktuella programspråket (i vårt fall Go) och inte fråga om programmering i allmänhet. SWOT-analysen bör inte behandla områden utanför de fyra områdena som ska ingå i en standardiserad SWOT-analys. Annars riskerar validiteten att bli låg. För att erhålla en hög reliabilitet i SWOTanalysen bör försöksprogrammeraren intervjuas direkt efter programmeringen så att försöksprogrammeraren inte hinner glömma bort viktiga detaljer. Enkäten och analysen har skett i enlighet med ovanstående. 2.2 Induktion/deduktion 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. 2.3 Positivism/hermeneutik Det finns två huvudinriktningar inom vetenskapen. Positivismen är traditionellt av naturvetenskaplig härkomst. Hermeneutiken är traditionellt frambringad av huma- 7 Thurén, Vetenskapsteori för nybörjare, 2 upplagan, 2007, Liber, Malmö, s ibid s. 26 5
14 nister. 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. 9 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 hermeneutikern har rätt eller fel i sina resonemang. Det blir viktigt att det man tolkar sätt in i rätt kontext (sammanhang). 10 Djupintervjuer är vanligare i hermeneutisk forskning. Enkäterna har studerats positivistiskt. Kryss räknades varefter antalet kryss analyserades snarare än att utseendet på svaren analyserades. SWOT-analysen var hermeneutiskt upplagd. Försöksprogrammeraren intervjuades och ombads ge kritik på utvecklandet ur olika perspektiv. 2.4 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. 11 Samtliga genomförda undersökningar i detta dokument är empiriska då ingen nämnvärd tidigare kunskap finns att tillgå. 2.5 Kvalitativ utvärdering Då värdesättning av kod riskerar att bli svår att kvantifiera i rena siffror, behövs en kvalitativt orienterad undersökning av de bitar som inte kan kvantifieras. Därför valdes en standardiserad analysmodell för den kvalitativa analysen. Den standardiserade analysmodell vi använde var SWOT-modellen. I och med att enkäten kan utformas så att den har kryssfrågor som svarsalternativ kan kryssen räknas. På så vis blev enkätsvaren kvantifierbara och utvärderingen av enkäten var kvantitativ. 9 Thurén, Vetenskapsteori för nybörjare, 2 upplagan, 2007, Liber, Malmö, s ibid s ibid s
15 Kapitel 3 Metod För att testa enkel programmering och förmågan att utveckla enkla program som körs flertrådat samtnätverkskommunikation har vi byggt en enkel wiki i Go. För att lyckas med ovanstående krävs en grundläggande förståelse för Go som programmeringsspråk. En noggrann bokföring över nedlagd tid under utvecklingen, även tid lagd på manualer och guider, ger 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. För att utvärdera folks tilltro till språket ska vi i enkäterna utvärdera 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ärderas. 12 Eftersom våra enkäter bedöms behandla enkätsvararnas värderingar 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 sedan kan sorteras ut från ren fakta. Formulären ska ha en positivistisk karaktär och analysen av programspråket under wikiutvecklingen 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 har genomförts. Inte bara studier i samband mellan siffror har ingått. Programmerandet har analyserats i detalj. 12 Thurén, Vetenskapsteori för nybörjare, 2 upplagan, 2007, Liber, Malmö, s. 52 7
16 3.1 Materiel Teknisk utrustning Stöd för Windows saknas i nuläget för Go-kompilatorn. Datormiljöer som stödjer Linux eller Mac OS X behövdes. Hårdvarumässigt behövdes 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 Intervjupersoner I skrivande stund ges inte ens några relevanta träffar vid sökning på programmering i Go i Sverige. Någon aktiv svensk utveckling ser inte ut att pågå för tillfället. Vi gjorde därför bedömningen att en erfaren Go-programmerare visade sig för svår att få tag på. Istället kommer enkäten att omfatta de i enkäten intervjuades bild av framtidsutsikterna för språket. 3.2 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 för varje uppgift. 3.3 Modell för analys av fördelar/nackdelar 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. 3.4 Kartläggning av fördelar/nackdelar SWOT-modellen valdes för att analysera hur mjukvaruutvecklingen fortskred. För utvärdering av språkets olika för- och nackdelar har för denna bit valts en mer kvalitativ, ingående analys av språkets respektive delar. 8
17 3.5 Utformning av enkäten På samtliga frågor ges svarsalternativet annat ; detta ger enkätsvararen en chans ge ett eget svar om inget av de listade passar. Avsaknad av en sådan fråga riskerar att tvinga fram ett svar från användaren som denne annars inte hade givit. Utformningen av frågorna bygger i grund och botten på skaparnas antagande av vad folk kommer att svara. Ett valfritt alternativ syftar därmed till att fånga in eventuella misstag vid utformningen av enkäten. Skulle undersökningen utökas till att omfatta även andra studieinriktningar och andra årskurser, är det inte otänkbart att de olika grupperna överlag skulle svara olika på frågorna. Att fånga upp sådana trender bland respektive program och årskurs skulle ge en mer rättvisande bild. En djupare analys av hur samt varför olika grupper tror olika ligger utanför denna undersökning; vi nöjer oss med att ta höjd för att fenomenet kan förekomma. Att finna en lämplig målgrupp för enkätundersökningen är långt ifrån trivialt. Det skulle till exempel kunna vara sannolikt att om alla tillfrågade hade iphone-programmering som sitt främsta intresse, skulle intresset för Go skilja sig markant från det av programmerare i allmänhet. För att få en mer nyanserad uppfattning om läget för programspråket valde vi en dataklass, en grupp kan antas vara intresserade av programspråk. Av dataklasserna valdes första årskursen eftersom många i den kategorin ännu inte har specialiserat sig på specifika språk eller inriktningar. För få svarsalternativ skulle ha riskerat att bli ett väldigt trubbigt sätt att undersöka på, samtidigt som alltför många alternativ tenderar att få undersökta personer att tröttna på undersökning. 13 En balans däremellan är således på sin plats, efter övervägande valdes fem kryssfrågor per fråga. För att få ett mer objektivt urval av vilka programmeringsspråk att ta med för jämförelse användes Tiobe.com:s index över mest använda programmeringsspråk. Ordningen på listan har sedan slumpats innan den placerades i enkäten. För enkätundersökningen valdes att inte använda några kodexempel. Detta hade kanske kunnat vara intressant för att mäta hur intuitivt ett språk är jämfört med ett annat, men hade medfört en del komplikationer. Förståelse för kodsnuttar beror helt på hur mycket tid man lägger ned på att sätta sig in dem, samt tidigare erfarenhet av liknande språk. Skulle en sådan undersökning göras väl, krävs att deltagarna i undersökningen verkligen lägger ned ungefär lika mycket tid på varje fråga för att det överhuvudtaget skall gå att jämföra. Ett annat problem är att vissa kodsnuttar blir klart mer lättlästa i vissa än i andra språk, mycket beroende på hur kompakt programmeraren valt att uttrycka sig. i = i + 1 är till exempel mer intuitivt än i++. En jämförelse mellan två kodstycken fordrar alltså att koderna är ungefär på samma nivå. Programmeringsspråket Java ingick inte i enkäten eftersom enkäten ämnades delas ut under en Java-föreläsning. 13 Dahmström, Från datainsamling till rapport, 3 upplagan, 2000, Studentlitteratur AB, Lund 9
18 3.5.1 Kvantitativ utvärdering För utformningen av enkätundersökningen har det valts ett fokus på kvantitativ analys. Frågorna har försökts att utformas på sådant sätt att de relativt enkelt kan översättas till ett siffervärde, där andra människors svar summeras och jämförs. Enkäten är primärt uppbyggd av kryssfrågor; detta för att minimera den tid som krävs för att fylla i enkäten. Fritextsfrågor tenderar att bli överhoppade medan ett kryss i en ruta går betydligt snabbare och lägger mindre krav på att personen i fråga skall tänka ut någon bra formulering. Frågor där man ombeds ordna en lista från bäst till sämst blir problematisk då personen ofta har en bestämd åsikt om vad som är bäst men inte direkt kan uttala sig om övriga alternativ. Den nedre delen av listan hamnar då i mer eller mindre godtycklig ordning eller uteblir helt. 14 Det blir då svårt att jämföra en enkät med andra enkäter. 14 Dahmström, Från datainsamling till rapport, 3 upplagan, 2000, Studentlitteratur AB, Lund 10
19 Kapitel 4 Resultat 4.1 Tabell för tidsåtgång Observatören mätte tiden och matade in information i tabellen och försökspersonen installerade, körde, programmerade och studerade. Pass Tidsåtgång Starttid Sluttid Försöksperson Fixa kompilator 20 min C. Hofberg Kompilera HelloWorld 3 min J.Smedberg Wiki: Datastrukturer & Filhantering 27 min J.Smedberg Wiki: HTTP-server 10 min J.Smedberg Wiki: Integrera (3) och (4) 41 min J.Smedberg Wiki: Kunna ändra & spara sidor 33 min(2 st) J.Smedberg Wiki: Mallar i Go 33 min(2 st) J.Smedberg Wiki: Felhantering 9 min J.Smedberg Wiki: Cachning 12 min J.Smedberg Wiki: Säkerhetsluckor 4 min J.Smedberg Wiki: Återanvändning av kod 10 min J.Smedberg 4.2 SWOT-tabell Observatören la märke till kommentarer som försökspersonen yttrade under försöken och sammanställde sedan information. Luckor som var tomma försökte fyllas i genom intervjuer parterna emellan. 11
20 Pass Strengths Weaknesses Opportunities Threats Fixa kompilatolation, Snabb instal- Mycket diskutrymme Inget krångel Inga binära filer, utförlig testkod krävdes; kompilatorn ingår inte i OS rymdes inte på KTH:s 200 MB per användare Kompilera HelloWorld HTTP- Wiki: server HTTP- Wiki: server Konstiga kommandon Känns svårt vid en första blick. Fick fel i kompilatorn, även om de rättades till. Svårt att hitta felet i koden trots att den skrevs av. Typdeklarationen []Byte, byte slices, kändes inte naturlig Kompilerade hela vägen och ger körbar fil, skönt att slippa virtuell maskin Smart med input/output för funktioner. Rätt så elegant när man väl har satt sig in. Många egenskaper man längtat efter ingår i språket Användbart att det går så fort att fixa en simpel server Konstiga programnamn som inte känns genomtänkta Kompilatorn kändes lik gcc. Går också att göra via hemsidan Svårt att se Man förstår skillnad på hur de har måsvingar och tänkt med vanliga parenteser. språket. Det Inte gick bra och bra att man känns naturligt ska deklarera att funktioner utveckla i, utan att strukturera intuitivt för upp. programme- Pekardeklarationen rare. Gick med förvånansvärt receivers kändes fort att lära inte logisk. sig. Inte lätt att komma ihåg när man ska använda rätt pekartecken (& och ) - Syntaxen känns igen från Perl/Matlab (r.url.path[1:]) HandleFunc känns underlig Svårt att förstå hur paket fungerar och om de motsvaras av klasser och hur deras funktioner ska användas
21 Pass Strengths Weaknesses Opportunities Threats Wiki: Integrera Enkelt att Programmet Inga nämnvär- Koden som (3) och (4) integrera kraschade da svårigheter Golang lagt komponenter under körning utöver krasch upp fungerade och gav svårtolkad inte. Kominformation debugpilatorn som användes tycks bara för att ha uppdaterats en pekare så att användes fel vår kod inte fungerade Wiki: Mallar i Bra att templates Kunde varit - Ser inte en- Go finns mer trivialt. kel ut, svårt inbyggt. Bra Lätt att skriva att motivera att slippa fel på parsersträngar att varje hårdkodning. rad behövs. Vansinne att inte ha mallar och få fel som upptäcks först Body html parsades på under körning ett sätt som inte var uppenbart Wiki: Felhantering Bra att fel- Modellen för Lätt att lägga - och profunktioner felhantering in felhantering blem finns inbyggda kommer inte i http-paketet passa inte alla sorters tillämpningar Wiki: Cachning Snygg och Varför man - Svår syntax koncis dekla- ska skriva som vi inte ration. Bra att make() är inte hade kommit cachad information uppenbart på själva. läggs Syntax som in i arrays liknar haskell, språk inte alla är vana vid Wiki: Säkerhetsluckor Elegant att - Lätt att lägga - man för- in regex- kompilera uttryck i regex-uttryck vanliga variabler. redan i början Regex- uttrycken används som i andra språk Wiki: Återanvändning Bra att man Koden kan bli Kan vara ett Funktionspekare av slipper re- mer svårläst enklare alter- i C är svårt att kod flektion som snabbt grötig nativ till funk- använda, sam- man har i i statisk tionspekare ma tros gälla java. Praktiskt typning då för returnering med anonyma funktioner hela funktionssignaturen skickas med. av funktioner
22 4.3 Enkätundersökning Figur 4.1. Svarsfrekvens för respektive språk, fråga 1: Vilket eller vilka av följande programmeringsspråk har du stött på? Antalet kryss per språk delat med totalt antal deltagare (50 personer) Figur 4.2. Svarsfrekvens för respektive språk, fråga 2: Vilket eller vilka av följande programmeringsspråk skulle du kunna tänka dig att lära dig inom en 5 års peroid? Antalet kryss per språk delat med totalt antal deltagare (50 personer) 14
23 Figur 4.3. Svarsfrekvens för respektive språk, Fråga 3: Vilket programmeringsspråk tror du kommer dominera för utveckling av hemsidor om 5 år? Antalet kryss per språk, totalt 50 deltagare, fler än ett kryss kunde ges. Figur 4.4. Svarsfrekvens för respektive språk, Fråga 4: Vilket programmeringsspråk tror du kommer dominera för utveckling mindre applikationer om 5 år? Antalet kryss per språk, totalt 50 deltagare, fler än ett kryss kunde ges. 15
24 Figur 4.5. Svarsfrekvens för respektive språk, Fråga 5: Vilket programmeringsspråk tror du kommer dominera inom undervisning på universitet och högskolor om 5 år? Antalet kryss per språk, totalt 50 deltagare, fler än ett kryss kunde ges. Figur 4.6. Svarsfrekvens för respektive språk, Fråga 6: Vilka tre programmeringsspråk anser du vara mest värda att lära sig inom en 5 år? Cirkeldiagrammet visar den procentuella fördelningen av givna röster. Blanksvar utelämnade. 16
25 Kapitel 5 Analys 5.1 Tidsåtgång De flesta uppgifterna gick snabbt att utföra men det måste hållas i åtanke att de flesta var mycket små och enkla. Mycket tid gick åt att arbeta med krascher och felsökning efter att fel uppstått. Hade Go haft en bra IDE och en mer stabil kompilator hade förmodligen färre problem uppstått. 5.2 Fördelar/nackdelar Installation 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 att lägga ner på att testa den uppsjö av programspråk som finns tillgängliga Kompilering Go har mycket speciella kommandon för att kompilera och länka koden. Typiskt kör förmodligen de flesta programmen i en terminal eftersom ingen IDE finns tillgänglig för Go. Av den anledningen blir det viktigt att kommandona känns enkla och självklara. För att kompilera skriver man till exempel 8g code.go, 8l code.8 och./8.out för vanliga 32 bitars pc-datorer, och där åttan ersätts av sexor för 64-bitars datorer. Varför just de kommandona valts som standard motiveras inte tydligt av de hemsi- 17
26 dor som rapporten innefattar. Programmet kraschade under körning vid ett tillfälle. Kompilatorn gav också felmeddelanden som var svårtolkade efter att enstaka bokstäver saknades. Dessa brister tyder på att kompilatorn är i ett utvecklingsstadium. Värre är att felen som uppkom var svåra att hitta i koden. Försöksprogrammerarnas fel var svåra att upptäcka eftersom koden såg normal ut Funktionsanrop Funktionerna som beskrivs i wiki-projektet har deklarationen INDATA funktionsnamn UTDATA. Syftet med detta tros vara att visa hur flödet passerar genom en maskin med in- och utmatning. En annan intressant detalj som är påtagligt använd i Go är pekare som i allmänhet dyker upp på flera olika sammanhang. Språket påminner om C:s pekare. Det hade varit önskvärt med en enklare notation än och & som C använder för att teckna värdet av en pekare (det pekaren pekar på) respektive adressen av en variabel. Vidare kan funktioner returnera funktioner. Möjligen är den möjligheten tänkt att ersätta funktionspekare i C, som av uppsatsförfattarna bedöms ha förbättringspotential Paket Avsaknaden av klasser började märkas i takt med att koden växte. Att funktioner deklareras globalt, som i till exempel C, kan vara en potentiell nackdel då detta är en positiv egenskap som lagts till i mer moderna språk såsom C++. Å andra sidan var paketen, någonting som liknar vanliga importerade bibliotek som finns i de flesta programmeringsspråken, en möjlighet att strukturera upp koden. Komponentbaserad programmering borde vara en lämpligare paradigm för Go än att dela upp arbetet i klasser som man traditionellt skulle göra. Om Go är ett bra språk för komponentbaserad programmering eller inte går inte att ge ett säkert svar på med hänsyn till arbetets omfattning. Däremot gav försöksprogrammeraren många positiva kommentarer om att de funktioner som importerades med paketen var användbara. Det som gör Go bra för komponentbaserad programmering är förmodligen att paketen är skrivna för att användas som komponenter. Till exempel var http-paketet användbart. En smart detalj var att uttryck som användes med paketet var anpassade så att internetprogrammerare kan känna igen sig Datastrukturer Pekarna som finns i koden uppfattades stundvis som svåra och omotiverade. Förväntningarna på detta område var stora men de kodstycken som gavs som exempel var inte alltid lätta att förstå utan förklarande text. Ett alternativ till att använda pekare i vanlig, löpande kod kunde ha varit att anpassa språket så att pekare bara måste användas i tillämpade sammanhang som till exempel minneshantering och filhantering, områden som pekare är skapta för. 18
27 5.2.6 Go som http-server Det ansågs vara enkelt att bygga en HTTP-server med hjälp av Go:s inbyggda http-paket. De handlers som används för att visa olika typer av sidor var lätta att använda samtidigt. Förmodligen är det också bra ur parallellprogrammeringssynpunkt att skapa flera olika handlers för att skapa separat kod för varje funktion som servern är tänkt att ha. Däremot uppfattades det exempel som Golang gav som rörigt i och med att man måste gå in på en subadress för att kunna använda en viss handler. Att ladda in paketet och skapa en HTTP-server uppfattades inte som svårt tack vare att paketet i egenskap av komponent redan hade de självklara funktionerna färdiga. 5.3 Enkätsvar Enkäten talar för att Go inte kommer att vara ett dominerande språk i framtiden. Däremot bedömer enkätsvararna att Go kommer att vara större än flera andra mindre vanliga språk såsom Lisp, Objective C och Pascal. Värt att notera är att Go inte ofta tros vara dominerande för utveckling för hemsidor, vilket språkmakarna avsedde. Desto fler tror att Go är relativt lämpligt för utveckling av mindre applikationer och undervisning på universitet och högskolor. 19
28
29 Kapitel 6 Diskussion Oavsett om ett språk ligger har tekniska fördelar i form av produktivitet, prestanda eller dylikt verkar onekligen en förvånansvärt stor del av framgångarna stå och falla med faktorer som ligger utanför det tekniska området. Någon djupare analys av det marknadsföringsvärde en tillämpning inom ett större kommersiellt projekt har för ett språk går det inte att blunda för att detta är av betydande karaktär. Man kan fråga sig vad som är mest värdefullt att satsa på, marknadsföring eller teknologisk kvalité. Troligtvis hade inte författarna kommit i kontakt med språket om det inte vore för det fokus på marknadsföring som upplevts under projektet. Golang.org lyckades inte heller motivera varför ett nytt språk skulle behövas. Till exempel så kan C++, som är ett mycket senare språk och är mer av ett högnivåspråk än C, användas tillsammans med C. Det av försökspersonerna uppskattade http-paketet som var lätt att använda skulle kanske kunna integreras i andra språk. Vidare är det viktigt att ifrågasätta vem som har intresse av att forska om nytillkomna språk. Kanske är forskningen mer intressant för utvecklare än för framtida programmerare. Denna undersökning kartlagde fler faktorer som är till nytta för den tidigare kategorin än för den senare. Med ovanstående iakttagelser tagna i beaktning verkar det till de närmaste omöjligt att dra några konkreta slutsatser ifrån en förhållandevis mindre undersökning av ämnet. Även inom mer rigorösa undersökningar, kommer slutsatser på allt utom väldigt kortsikt riskera att bli rent spekulativa. 21
30
31 Kapitel 7 Slutsats Go visade sig vara ett ojämnt språk som delvis misslyckats med sin ambition att vara enkelt. Det var inte enkelt att sätta sig in i kod och de nya sätt att programmera på som introducerades. Språket uppfattades inte som lätt att vänja sig vid. Språket gav ofta intryck av att ha härmat efter andra kända språk men det fick inte försöksprogrammerarna att känna igen sig i Go. Även om språket i sig ligger tekniskt i framkant, saknas fortfarande stöd för Windows och någon IDE är i nuläget inte heller tillgänglig. Trots detta pekar enkäterna på att det finns ett stort intresse för Go relativt språkets tidiga stadium i utvecklingen. Men för att språket skall komma igång krävs sannolikt ett större kommersiellt intresse uppstår. Några konkreta slutsatser gällande språkets framtid är i nuläget svårt att säkert uttala sig om. 23
32
33 Kapitel 8 Rekommendationer för fortsatta studier För att få en mer realistisk uppfattning om ett språks framtidspotential krävs studier som undersöker inte bara de tekniska aspekterna av ett språk, utan även de effekter som uppkommer av ett politiskt och juridiskt spel mellan de större företagen på världsmarknaden. Språkets prestanda kräver mer omfattande studier. Om prestandavinsten skulle visa sig vara låg är inte Go ett intressant språk för prestandakrävande program. 25
34
35 Kapitel 9 Felkällor 9.1 Enkätundersökningen I enkätundersökningen ingick endast studeranden vid datateknik på KTH. Samtliga gick sitt första år. Eftersom undersökningen genomfördes i pausen på en föreläsning föll de som inte valde att närvara på den specifika föreläsningen bort. Även homogeniteten bland de undersökta är problematisk. Alla programmerare är inte studerande på datateknikprogrammet, så den uppmätta datan måste inte exakt motsvara den verkliga uppfattningen bland programmerare generellt. De undersökta kan vidare sakna praktisk erfarenhet av programmering och har sannolikt i låg utsträckning varit med i något större mjukvaruutvecklingsprojekt. Det är svårare att dra några generella slutsatser av en undersökning baserad på enbart oerfarna studenter. Speciellt då många av dem uppger att de aldrig stött på eller hört talas om större programspråk som PHP eller Ruby, måste deras spekulationer om Go:s framtidsutsikter betraktas som opålitliga och säger inte mycket om hur vana programmerare uppfattar framtidsutsikterna. Detta problem kvarstår dock oavsett vilken årskurs enkäten vänder sig till, i och med att alla är studenter och därmed inte kan förväntas ha någon större praktisk erfarenhet. Bland de sista årskurserna har studenter redan valt inriktning och är då troligen fokuserade på en viss typ av programspråk. För ett mer pålitligt resultat hade en mer omfattande undersökning behövts göras. Förslagsvis genom att undersöka ett bredare urval. 9.2 Wikipedia Wikipedia är en tveksam källa för information om en kommersiell produkt som utvecklas av ett stort företag, som Go är. Därför har vi valt att begränsa källanvändningen till trivial information som ingen sannolikt har intresse av att vinkla eller information som återfunnits även på andra källor. 27
36
37 Kapitel 10 Källförteckning Hämtad Hämtad Hämtad Hämtad Hämtad Hämtad Dahmström, Från datainsamling till rapport, 3:e upplagan, 2000, Studentlitteratur AB, Lund Thurén, Vetenskapsteori för nybörjare, 2:a upplagan, 2007, Liber, Malmö 10.1 Insamlad data Hämtad
38
39 Kapitel 11 Bilaga A - Enkät 31
40 Framtidens Programmeringsspråk Denna enkät undersöker graden av kännedom och tilltro för olika programmeringsspråk. Program/årskurs (t ex D-10) Vilket eller vilka av följande programmeringsspråk har du stött på? C++ Perl Lua Visual Basic.Net Python Ruby Go Fortran PHP Delphi RPG (OS/400) Pascal C# Lisp Scheme ADA Visual Basic Orange Objective-C JavaScript Vilket eller vilka av följande programmeringsspråk skulle du kunna tänka dig att lära dig inom en 5 års peroid? C++ Perl Lua Visual Basic.Net Python Ruby Go Fortran PHP Delphi RPG (OS/400) Pascal C# Lisp Scheme ADA Visual Basic Orange Objective-C JavaScript Vilket programmeringsspråk tror du kommer dominera för utveckling av hemsidor om 5 år? (Nej, html är inget programmeringsspråk.).net Orange PHP Java Go Ruby Annat Vilket programmeringsspråk tror du kommer dominera för utveckling mindre applikationer om 5 år?.net Orange PHP Java Go Ruby Annat Vilket programmeringsspråk tror du kommer dominera inom undervisning på universitet och högskolor om 5 år?.net Orange PHP Java Go Ruby Annat Vilka tre programmeringsspråk anser du vara mest värda att lära sig inom 5 år? (Kan inkludera ej listade språk eller språk du redan kan) 1 (Mest värdefullt)
41 Kapitel 12 Bilaga B - Programkod i Go Koden på denna bilaga är släppt under Creative Commons Attribution 3.0 License. Mer information finns på hemsidan: Koden är skapad av samt tillhör Golang.org och användes som pedagogisk bas för försökspersonerna. Golang.org gav också en steg-för-steg guide som tillhörde koden. Filer och information finns på: wikiserver.go package main import ( http io/ioutil os regexp template ) type Page struct { Title string Body []byte } func (p *Page) save() os.error { filename := p.title + ".txt" return ioutil.writefile(filename, p.body, 0600) } func loadpage(title string) (*Page, os.error) { filename := title + ".txt" body, err := ioutil.readfile(filename) if err!= nil { return nil, err } 33
42 return &Page{Title: title, Body: body}, nil } func viewhandler(w http.responsewriter, r *http.request, title string) { p, err := loadpage(title) if err!= nil { http.redirect(w, r, "/edit/"+title, http.statusfound) return } rendertemplate(w, "view", p) } func edithandler(w http.responsewriter, r *http.request, title string) { p, err := loadpage(title) if err!= nil { p = &Page{Title: title} } rendertemplate(w, "edit", p) } func savehandler(w http.responsewriter, r *http.request, title string) { body := r.formvalue("body") p := &Page{Title: title, Body: []byte(body)} err := p.save() if err!= nil { http.error(w, err.string(), http.statusinternalservererror) return } http.redirect(w, r, "/view/"+title, http.statusfound) } var templates = make(map[string]*template.template) func init() { for _, tmpl := range []string{"edit", "view"} { templates[tmpl] = template.mustparsefile(tmpl+".html", nil) } } func rendertemplate(w http.responsewriter, tmpl string, p *Page) { err := templates[tmpl].execute(w, p) if err!= nil { http.error(w, err.string(), http.statusinternalservererror) } } const lenpath = len("/view/") var titlevalidator = regexp.mustcompile("^[a-za-z0-9]+$") func makehandler(fn func(http.responsewriter, *http.request, string)) http.handlerfunc { return func(w http.responsewriter, r *http.request) { title := r.url.path[lenpath:] if!titlevalidator.matchstring(title) { http.notfound(w, r) return } fn(w, r, title) 34
43 } } func main() { http.handlefunc("/view/", makehandler(viewhandler)) http.handlefunc("/edit/", makehandler(edithandler)) http.handlefunc("/save/", makehandler(savehandler)) http.listenandserve(":8080", nil) } 12.2 edit.txt <h1>editing {Title}</h1> <form action="/save/{title}" method="post"> <div><textarea name="body" rows="20" cols="80">{body html}</textarea></div> <div><input type="submit" value="save"></div> </form> 12.3 view.txt <h1>{title}</h1> <p>[<a href="/edit/{title}">edit</a>]</p> <div>{body}</div> 35
44
Analys av programmeringsspråket Go
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
Analys av programspråket Go
Analys av programspråket Go Joel Smedberg 073-5921434 publikationer@joelsmedberg.com Sälgstigen 13 12553 Älvsjö Caj Hofberg 076-8919636 caj.hofberg@gmail.com Torsgatan 54 11337 Stockholm Examensarbete
Program & programmering
Program & programmering Vad är program? Satser och instruktioner, toggla igenom exempel Program på olika nivåer, för olika maskiner, för olika saker Tolka program; kompilator, intepretator, binärbytekod,
Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?
Jonas Kvarnström jonkv@ida.liu.se 2013 Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket? Rena OO-språk (allt är objekt) Scala, Smalltalk, Eiffel, Ruby,
Introduktion till programmering D0009E. Föreläsning 1: Programmets väg
Introduktion till programmering D0009E Föreläsning 1: Programmets väg 1 Vad är en dator? En maskin vars beteende styrs av de innehållet (bitmönster) som finns lagrade i datorns minne (inte helt olikt förra
Introduktion till programmering, hösten 2011
Föreläsning 1 Programmering är ett hantverk. Det betyder att man inte kan läsa sig till den förmågan, man måste träna och man tränar genom att skriva mer och mer avancerade program. Programmering förutsätter
Introduktion till programmering. Programspråk och paradigmer
Introduktion till programmering Programspråk och paradigmer Vad är ett programspråk? Aprogramming languageis a formal constructedlanguagedesigned to communicate instructions to a machine, particularly
Innehålls förteckning
Programmering Uppsats i skrivteknik Axxell Företagsekonomi i informationsteknik 19.3.2015 Respondent: Tomas Björklöf Opponent: Theo Wahlström Handledare: Katarina Wikström Innehålls förteckning 1. Inledning...3
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock
Inledning Vad är ett datorprogram, egentligen? Olika språk Problemlösning och algoritmer 1 (14) Varför använda en dator? Genom att variera de program som styr datorn kan den användas för olika uppgifter.
Inledande programmering med C# (1DV402) Introduktion till C#
Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i
TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad
Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.
Välkomna till DIT012 IPGO 1 Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1. Lärare och Handledare Kursansvariga, examinatorer, föreläsare och handledare
Föreläsning 2. Operativsystem och programmering
Föreläsning 2 Operativsystem och programmering Behov av operativsystem En dator så som beskriven i förra föreläsningen är nästan oanvändbar. Processorn kan bara ges enkla instruktioner såsom hämta data
Grundkurs i programmering - intro
Grundkurs i programmering - intro Linda Mannila 4.9.2007 Dagens föreläsning Allmän kursinformation: mål, syfte, upplägg, examination, litteratur, etc. Hur arbetar en dator? Hur vi får datorn att förstå
Programmering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Mina listor. En Android-applikation. Rickard Karlsson 2013-06-09. Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.
Mina listor En Android-applikation Rickard Karlsson 2013-06-09 Rickard Karlsson - rk222cu Linnéuniversitet rk222cu@student.lnu.se Innehållsförteckning 2. Innehållsförteckning 3. Abstrakt 4. Inledning/bakgrund
Programmering i C++ Kompilering från kommandoraden
Programmering i C++ Kompilering från kommandoraden Sven Gestegård Robertz Datavetenskap, LTH 9 november 2015 Sammanfattning Ibland vill man, av olika anledningar, inte använda en stor integrerad utvecklingsmiljö
Imperativ programmering
Imperativ programmering 1DL126 3p Imperativ programmering Jesper Wilhelmsson ICQ: 20328079 Yahoo: amigajoppe MSN / epost: jesperw@it.uu.se Rum: 1335 Tel: 471 1046 Imperativ programmering Vilka programmeringsspråk
Li#eratur och empiriska studier kap 12, Rienecker & Jørgensson kap 8-9, 11-12, Robson STEFAN HRASTINSKI STEFANHR@KTH.SE
Li#eratur och empiriska studier kap 12, Rienecker & Jørgensson kap 8-9, 11-12, Robson STEFAN HRASTINSKI STEFANHR@KTH.SE Innehåll Vad är en bra uppsats? Söka, använda och refera till litteratur Insamling
Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010. Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:
Föreläsning 1 OH: Övergripande information Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk: * maskinspråk = ettor och nollor, kan bara en maskin förstå. * programmeringsspråk
SKOLFS. beslutade den -- maj 2015.
SKOLFS Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan och inom kommunal vuxenutbildning på gymnasial nivå; beslutade den -- maj
TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad
Användarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1
Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut
Välkomna till DIT012 IPGO
Välkomna till DIT012 IPGO 1 Lärare och Handledare Kursansvariga, examinatorer, föreläsare och handledare Joachim von Hacht, hajo@chalmers.se, 772 1003 Handledare (se även kurssida) Alexander Sjösten, sjosten@chalmers.se
Kursplanering för EE3D i kursen Programmering 1, 100p.
Kursplanering för EE3D i kursen Programmering 1, 100p. Tidplan Kursstart 2013-08-22 - Kursslut 2014-06-03 Datum/Period Kursinnehåll/Moment Sidhänvisning Vecka 34 Kursintroduktion Vecka 35 Allmänt om Java,
Programmering A. Johan Eliasson johane@cs.umu.se
Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer
Introduktion till programmering och Python Grundkurs i programmering med Python
Introduktion till programmering och Python Hösten 2009 Dagens lektion Vad är programmering? Vad är en dator? Filer Att tala med datorer En första titt på Python 2 Vad är programmering? 3 VAD ÄR PROGRAMMERING?
Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson
Rapport grupp 4 Software Engineering Kristoffer Eriksson Christer Oscarsson Andreas Dahlberg Martin Bengtsson 2009-10-29 Processer Sprinter Scrum har varit till stor hjälp för oss för att nå våra mål,
TUTORIAL: KLASSER & OBJEKT
TUTORIAL: KLASSER & OBJEKT I denna tutorial lär vi oss att använda klasser och objekt samt hur vi bygger en enkel applikation kring dessa. I tutorialen kommer det finnas en mängd kod som du antingen kan
TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
Föreläsning 3. Programmering, C och programmeringsmiljö
Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
TDP003 Projekt: Egna datormiljön
. TDP003 Projekt: Egna datormiljön Egen utvecklingsmiljö Kursmaterial till kursen TDP003 Höstterminen 2017 Version 2.2 2017-06-30 2017-06-30 Egen utvecklingsmiljö INNEHÅLL Innehåll 1 Revisionshistorik
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
PROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.
Verktyg och Utvecklingsmiljö. Jochim von Hacht
Verktyg och Utvecklingsmiljö Jochim von Hacht Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg Editorer Kompilatorer Avlusare (debugger) Versionhantering (kommer i projektkurs)
Programmering B PHP. Specialiseringen mot PHP medför att kursens kod i betygshanteringen heter PPHP1408.
Programmering B PHP DTR1208 - Programmering B 50 poäng Specialiseringen mot PHP medför att kursens kod i betygshanteringen heter PPHP1408. Mål Mål för kursen (Skolverket) Kursen skall ge fördjupade teoretiska
Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator
Viktiga begrepp Den här ordlistan är till för dig som går kursen Om Programmering. Eftersom detta är en grundläggande kurs har vi i vissa fall gjort en del förenklingar. En del begrepp är svåra att förenkla,
Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php
Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är
Introduktion till Datalogi DD1339. Föreläsning 1 8 sept 2014
Introduktion till Datalogi DD1339 Föreläsning 1 8 sept 2014 Kontaktuppgifter & Info: Kurskod: DD1339, 19hp Kursomgång: inda14 Kursansvarig: Christian Smith, ccs@kth.se Michael Minock, minock@kth.se Dilian
Föreläsning 1: Intro till kursen och programmering
Föreläsning 1: Intro till kursen och programmering λ Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/mafykht11/ λ Studentportalen http://www.studentportalen.uu.se UNIX-konton (systemansvariga
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Rune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling
Rune Tennesmed Oskar Norling Individuellt Mjukvaruutvecklingsprojekt Webbprogrammerare H12 Oskar Norling 2012-05-30 Abstrakt Denna rapport handlar om mitt mjukvaruutecklingsprojekt som jag och en klasskompis
Datavetenskapligt program, 180 högskolepoäng
GÖTEBORGS UNIVERSITET UTBILDNINGSPLAN IT-fakultetsstyrelsen 2013-02-14 Datavetenskapligt program, 180 högskolepoäng (Computer Science, Bachelor s Programme, 180 credits) Grundnivå/First level 1. Fastställande
Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
SKOLFS. beslutade den XXX 2017.
1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning
Programspråket Go. Utvärdering genom utveckling. DAVID FALK och KLAUS NICOSIA
Programspråket Go Utvärdering genom utveckling DAVID FALK och KLAUS NICOSIA Examensarbete Stockholm, Sverige 2011 Programspråket Go Utvärdering genom utveckling DAVID FALK och KLAUS NICOSIA Examensarbete
SLUTRAPPORT RUNE TENNESMED WEBBSHOP
SLUTRAPPORT RUNE TENNESMED WEBBSHOP -05-30 Abstrakt Under 10 veckor har jag och Oskar Norling arbetat med att ta fram en webbshop-applikation till företaget Rune Tennesmed i Kalmar. I denna rapport tänker
Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA
Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande
Verktyg och Utvecklingsmiljö. Föreläsning 2 Eclipse
Verktyg och Utvecklingsmiljö Föreläsning 2 Eclipse Verktyg Modern programutveckling innebär att man måste behärska ett antal verktyg. Editorer Kompilatorer Avlusare(debugger) Versionshantering(kommer i
Föreläsning 1: Intro till kursen och programmering
Föreläsning 1: Intro till kursen och programmering Kursens hemsida http:www.it.uu.se/edu/course/homepage/prog1/vt11 Studentportalen http://www.studentportalen.uu.se Lärare: Tom Smedsaas, Tom.Smedsaas@it.uu.se
Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)
UMEÅ UNIVERSITET Institutionen för datavetenskap Thomas Johansson Oktober 1998 Programutveckling med Java Development Kit (JDK 1.1.x) och Programmers File Editor (PFE 7.02) Umeå universitet 901 87 Umeå.
IT OCH PROGRAMMERING I SKOLAN. Jan Erik Moström Peter Vinnervik
IT OCH PROGRAMMERING I SKOLAN Jan Erik Moström Peter Vinnervik VILKA ÄR VI OCH VAD KOMMER VI ATT PRATA OM? Jan Erik Moström - undervisar på institutionen för datavetenskap Peter Vinnervik - doktorand vid
Laboration i datateknik
KUNGLIGA TEKNISKA HÖGSKOLAN Laboration i datateknik Felsökning och programmering av LEGO NXT robot Daniel Willén 2012 09 06 dwill@kth.se Introduktionskurs i datateknik II1310 Sammanfattning Syftet med
Föreläsning 3. Programmering, C och programmeringsmiljö
Föreläsning 3 Programmering, C och programmeringsmiljö Vad är programmering? Ett väldigt kraftfullt, effektivt och roligt sätt att kommunicera med en dator Att skapa program / applikationer till en dator
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo
Objektorienterade språk Historik Simula 67 Smalltalk 80 Procedurorienterad programmering Subprogram Programbibliotek Dataorienterad programmering Abstrakta datatyper Objektbaserade språk, föregångare till
Programmering för alla!
Programmering för alla! Inspirationsseminarium för lärare i grundskola och gymnasium Björn Regnell Professor Datavetenskap, LTH, Lunds universitet lth.se/programmera Video http://www.svt.se/nyheter/sverige/krav-pa-att-elever-lar-sig-programmera
Säker programmering - Java
Säker programmering - Java Information är en värdefull tillgång i dagens värld och en effektiv hantering sätter höga säkerhetskrav på medarbetarna. Säker programmering - Java Nowsec säkerhetsgranskar dagligen
Individuellt PM3 Metod del I
Individuellt PM3 Metod del I Företagsekonomiska Institutionen Stefan Loå A. Utifrån kurslitteraturen diskutera de två grundläggande ontologiska synsätten och deras kopplingar till epistemologi och metod.
Platser för att skriva och testa kod online. Workshop om programmering i matematikkurser, version 0.7 senast sparat
Cheat sheets Nedan finns referensblad för fyra olika programmeringsspråk, som kan bli aktuella att använda i matematikundervisning. MATLAB är en välkänd programvara för att göra matematiska beräkningar,
Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!
Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering! Samlingar Vi kommer att behöva hantera samlingar av objekt - Har oftast använd Array (fält) - Bra om
Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.
Informationsinfrastruktur 7.5 hp Mattias Nordlindh Inledning Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer. Dokumentet består av
NetBeans 7. Avsikt. Projektfönster
NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till
Så här skriver du ditt första program i C++
Så här skriver du ditt första program i C++ Introduktion till att skapa Solution, Project och källkodsfil i Visual Studio 2013 Författare Anne Norling Kurs: Strukturerad programmering med C++ Kurskod:1DV433
725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack
725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den
Objektorienterad Programkonstruktion. Föreläsning 6 23 nov 2015
Objektorienterad Programkonstruktion Föreläsning 6 23 nov 2015 Designmönster Färdiga "recept" för att lösa (del-)problem i struktureringen av ens program Mönster kan beskriva små komponenter eller stora
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
1 Språket C++ 1.1 Valet av språket C++ för kompendiet Språket C++ är ett språk som utvecklats för storskalig objektorienterad utveckling av sofistikerade och komplexa system. Det ligger då i sakens natur
Simon Boström Introduktionskurs i Datateknik
KTH KISTA Linefollower Med parprogrammering i NXC Simon Boström 2014-09-04 simbos@kth.se Introduktionskurs i Datateknik Sammanfattning Laborationstillfället var till för att man som ny på KTH skulle lära
Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson
1 2 TDDC66 Datorsystem och programmering TDDC67 Funktionell programmering Programmering i Lisp, examinator TDDC67 föreläsare i Lisp Peter Dalenius examinator TDDC66 kursassistent i Lisp + ett stort antal
Tentamen i TDP004 Objektorienterad Programmering Praktisk del
Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär
32 Bitar Blir 64 Sammanfattning
32 Bitar Blir 64 Sammanfattning Syftet med rapporten är att ge en insyn i det tillvägagångssätt och problem som uppstod i utvecklingen från 32 bitars CPUs till 64 bitars CPUs samt inblick i skillnaden
Eclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.
Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod
Bakgrund. Frågeställning
Bakgrund Svenska kyrkan har under en längre tid förlorat fler och fler av sina medlemmar. Bara under förra året så gick 54 483 personer ur Svenska kyrkan. Samtidigt som antalet som aktivt väljer att gå
IT för personligt arbete F6
IT för personligt arbete F6 Datalogi del 2 DSV Peter Mozelius Datarepresentation Det som lagras i en dator representeras i grunden som 1:or och 0:or Dessa binära värden kan sedan tolkas på olika sätt i
NetBeans 5.5. Avsikt. Projektfönster
NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till
TDIU01 (725G67) - Programmering i C++, grundkurs
TDIU01 (725G67) - Programmering i C++, grundkurs Introduktion till kursen och programmering Eric Elfving Institutionen för datavetenskap 2 september 2014 Översikt Kursinformation Personal Kursmål Upplägg
Datorlaboration 0, Programmering i C++ (EDA623)
LUNDS TEKNISKA HÖGSKOLA Programmering i C++ Institutionen för datavetenskap HT 2013 Datorlaboration 0, Programmering i C++ (EDA623) Under den inledande datorlaborationen får du träna på de grundläggande
732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner
732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp
Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp Dataingenjörsprogrammet, elektroingenjörsprogrammet och medicinsk teknik KTH Skolan för Teknik och Hälsa Redovisning: Se Kurs-PM om hur redovisningen
Felhantering TDDD78, TDDE30, 729A
Felhantering TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Felhantering 2 Ofta antar vi att allt ska fungera Alla filer vi behöver finns går att öppna Tillräckligt mycket minne finns Servrar som
PROV. 12 Egenskaper (provavsnitt)
12 Egenskaper (provavsnitt) 12.1 Egenskaper 12.2 Deklaration av egenskaper 12.3 Åtkomsttjänster för egenskaper 12.4 Åtkomsttjänster med genererade instansvariabler 12.5 Åtkomsttjänster med egna instansvariabelnamn
Tentamen i TDP004 Objektorienterad Programmering Praktisk del
Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2010-04-07 Tid: 8-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna ungefär
Java: Utvecklingsverktyg, datatyper, kontrollstrukturer
Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se
Objektorienterad programmering i Java I
Laboration 0 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: ca 2 3 timmar Att läsa: sidan 45 52 Syfte: Att ladda hem och installera utvecklingsmiljön Att skriva ditt första Javaprogram
Handbok Simond. Peter H. Grasch
Peter H. Grasch 2 Innehåll 1 Inledning 6 2 Använda Simond 7 2.1 Användarinställning.................................... 7 2.2 Nätverksinställning..................................... 9 2.3 Inställning
Business research methods, Bryman & Bell 2007
Business research methods, Bryman & Bell 2007 Introduktion Kapitlet behandlar analys av kvalitativ data och analysen beskrivs som komplex då kvalitativ data ofta består av en stor mängd ostrukturerad data
Planering Programmering grundkurs HI1024 HT TIDAA
Planering Programmering grundkurs HI1024 HT 2016 - TIDAA Föreläsning V35 Föreläsning 1 Programmering Kurs-PM Programmeringsmiljö Hello World! Variabler printf scanf Föreläsning 2 Operatorer Tilldelning
Rapport av genomförd enkät till företag i Kronobergs och Kalmar län med anledning av konjunkturläget.
Rapport av genomförd enkät till företag i Kronobergs och Kalmar län med anledning av konjunkturläget. 1. Inledning Vid ett styrgruppsmöte i IEC den 15 november diskuterades IEC:s möjligheter att agera
Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek
De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
Snabbguide Visma Compact API Copyright 2006-2010 Visma Spcs AB
Snabbguide Visma Compact API Copyright 2006-2010 Visma Spcs AB Komma igång med Compact API Hur APIet fungerar Visma Compacts API läser och skriver direkt till databasen via ett antal färdiga metoder som
Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,
Programvaruteknik, hp
1 (6) Utbildningsplan för: Programvaruteknik, 120-180 hp Software Engineering, 120-180 Credits Allmänna data om programmet Programkod Tillträdesnivå Diarienummer TPVAG Grundnivå MIUN 2010/1734 Högskolepoäng
Testning av applikationer
Tentamen, (20 YH-poäng) Plats: Övningstenta Tid: Övningstenta Tillåtna hjälpmedel: Papper, penna, suddgummi, linjal. Ej tillåtna hjälpmedel: Datorer, mobiltelefoner, surfplattor, miniräknare, böcker, anteckningar,
Sätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Klassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar