EXJOBBSOPPOSITION Rapportförfattare Yuuki Jonsson & Andreas Starrsjö Rapportens titel Parallellprogrammering i Go och Erlang Opponent Adam Sam 890323-7470
Var det lätt att förstå vad exjobbet gick ut på? Kommentarer. Relativt enkelt att förstå både syfte och metod, intresset var att jämföra go och erlang och metoden var att göra detta via omkodning av java-kod. Referatet förklarade hela konceptet tydligt och bra. Lite förvirrande blev det först i början när titeln gav intryck om någon form av parallellprogrammering vilket inte fanns stöd för i referatet. Den engelska översättningen av referatet(abstract) kan behöva lite översyn gällande språkets kvalité och grammatik. Utdrag ur abstract där engelskan fallerar. Our results where that Erlang is more situated[sic!] for back-end code for[sic!] server applications, while Go can be used for almost anything, but[sic!] is especially used for client-side applications. Hur tycker du att titeln avspeglar rapportens innehåll? Både bra och dåligt, Ja, det stämmer att rapporten handlar om att jämföra Go och Erlang, men i referatet sägs det Projektet gick ut på att jämföra Go och Erlang inget nämns gällande parallellprogrammering i referatet. Kanske ska referatet fixas. Sen borde kanske Titeln avspegla den rätt så intressanta metoden att skriva om java-kod, java verkar vara återkommande, ska den då inte med i titeln? allt som allt är titeln godtycklig för ändamålet. Dessvärre, om man läser vidare så är själva implementation en form av server/klient mjukvara, är då inte parallellprogramering & nätverk lika relevanta? varför är inte detta med i titeln? Hur beskrev författaren bakgrunden till exjobbet? Finns det en introduktion till och översikt av området? Inledningen börjar bra, här får vi veta att språken har bra stöd för parallellprogrammering, vid återkommande tillfällen används dock vi för att poängtera att det är deras undersökning och deras subjektiva resultat, detta är inte så värst lämpligt då vi redan vet detta, ord som vi och vår används ofta[referat & Inledning. s1]. Är detta verkligen nödvändigt? vi vet redan att det är deras rapport och inte någon annans, i en akademisk avhandling är vi inte heller intresserade av vad just dom har gjort utan mer vad ett subjekt kan göra eller hur något ter sig, redogörelse av deras metod är viktigt för att återskapa men vi vill veta den objektiva funktionen hos ett ting. Används vi ofta kan man tro att inget objektivt är nådd, att det bara är spekulationer. Rapporten ter sig också i kronologisk ordning vilket är både bra och dåligt, i inledningen skriv det detta kommer vi att utnyttja i våra program., vilka är dessa program ni tillskriver er själva? har ni gjort dom eller är dom som ni skriver ännu inte kodade? Det kan tolkas som om dessa är hypotetiska. Kanske vore det bättre att skriva detta har utnyttjats i implementationen I bakgrund nämns att datorer kommer att få mer kärnor
i framtiden, därav är det viktigt med parallellprogrammering. man skriver Med dagens teknikutveckling går processorer mot att ha ett ökat antal kärnor., detta är en viktigt premiss för hela rapporten, var är källan? En källa ges till en intel s gäst-bloggare, Patrick Leonard, Vice President, Product Development. Men artikeln är tillskriven Steve Pitzel. Vem är den riktiga författaren? Tyvärr tar länken en till intel s blogg inlägg från mars 2007, verkar som om deras pdf strular till det. Artikeln handlar om hur parallellprogrammering är nödvändig för flerkärniga system, inget om dessa systems utveckling på marknaden, ingen statistik, inga grafer. En källa i blogg-inlägget leder en till webservices.org, där behövs inloggning för att få tillgång till dokumentet. Allt som allt, är bakgrunden egentligen bra skriven och förklarar ändamålet. I syfte förklaras det återigen att man ska jämföra Go och Erlang med varandra och med Java, projektet känns stort. Hur väl har författaren motiverat sitt val av metod att angripa problemet? Fast än det inte skrivs explicit så nämner man i Syfte att man kan varken Go eller Erlang och därför ska använde Java som ett intermediate language(som jag antar att dom kan). Ingen riktig motivering av angreppsättet utöver att det förenklar arbetet(antg: dom kan java). Känns fortfarande omständigt, kunde dom inte ha valt ett av dessa språk? Tillexempel Erlang? Om man inte kan två språk och ska jämföra dom med hjälp av ett tredje så framstår projektet rätt konstigt, som att översätta från arabiska till rysska med svenska som omvandlingsspråk. Och sedan jämföra paradigm och förmågor känns som vatten över huvudet, dom verkar dock ha gjort ett bra jobb. Jag är imponerad och mer intresserad av hur dom kom fram till denna metod, det kanske hade varit trevligt med att mer utförligt beskriva angreppsmetodens motivering. Stycket är för kort, mer på syfte och bakgrund hade uppskattats. Har liknande avhandlingar behandlat ämnet på samma sätt? Dom nämner teknisk bakgrund hos dom olika språken längre fram, för att få en överblick över Go och Erlang, mindre stavfel finns de olika språken[sic!] attribut [2.1 Egenskapsjämförelse, s.3], kanske hade det varit bra att låta en tredjeperson korrekturläsa texten? Engelska och Svenska beblandas fritt i text och tabell, jag har av erfarenhet märkt att dom flesta tekniska orden kan översättas utan att mening förloras. Tillexempel kunde dom ha översatt Garbage Collector till Skräphantering vilket är en accepterad svensk översättning. Diskuterar författaren huruvida de förutsättningar som gäller för att metoden ska kunna användas är uppfyllda? Förutsättningen är väl att man ska kunna skriva om Go och Erlang till java och vice versa. Inget om detta nämns. Erlang tillskrivs som funktionellt, kan en sådan paradigm enkelt skrivas om till Java? Språken beskrivs istället, och på ett konstigt sätt, tillexempel rättfärdigas enkelheten hos Go med citat från Petar Maymounko, vem denna man är nämns inte. En källan[4] ges istället till en presentation av Rob Pike, men ingen sida
ges i denna mycket långa pdf fil. Istället för att skriva att Rob pike är grundaren av Go så ger man en källa[3] till wikipedia där det helt enkelt står att han är grundaren. varför gör man det? och vem är författaren till denna källa? får man ge anonyma källor så som wikipedia? Ännu inget nämnt om förutsättningar, bara en beskrivning som implicit ska antas vara en förutsättning för parallellprogrammering. Jag är frustrerad av att det aldrig kommer en riktig definition på vad parallellprogrammering är för något, hela tiden ska man antaga. Kärnor och trådar nämns, och är man kunnig kan man förstå, men definitioner hade hjälpt. ord så som Generics och Hot Swapping används men förklaras inte, återigen på engelska. Först senare får man reda på vad dessa är, men tabellen presenteras mycket tidigt. Dessa kanske är förutsättningar för att möjligöra implementation, men eftersom vi inte vet vad dom är så försvårar det läsningen. Ibland diskutterar författarna språket innan dom ens redogör alla funktioner i språket, saker på sida 4 borde egentligen ha hamntar på diskussionsdelen så som Ibland känns det som om språket är gjort för att kunna programmera på så få rader som möjligt, så vad innebär detta? är en implementation möjlig? är detta bra? vad menas med att det känns? Texten fortsätter med att beskriva GO och jämföra med Java och C++ men utan några tydliga exempel. Nätverksprogrammerig diskuteras i två stycken, men detta var ju inte uppgiften, uppgiften var att undersöka parallellprogrammering. För många funktioner hos språken tas upp utan relevans till arbetet. Först när man kommer till stycket om java tas interneprogrammeringens relevans upp, det visade sig att java-labben handlade om detta. Varför finns inte detta med i början? Dom skriver Eftersom syftet var att skriva kod som använder sig av språkens styrkor så valde vi snabbt att modifiera kraven på programmet beroende på hurvida språket stödjer specifika funktioner eller inte. är parallellprogrammering dessa språks styrkor eller talar vi om andra egenskaper så som funktionalistisk paradigm eller intuitiva syntax? Mer definitioner hade behövts. Är metoden väl beskriven? Nej, det är väldigt förvirrande, först tror man av titeln att det handlar om att jämföra Go med Erlang för att kolla hur parallellprogrammering ter sig i dessa språk. Sen i abstract förklaras det att man ska jämföra Go och Erlang med Java och att ingen parallellprogrammering nämns gör det mer jobbigt för läsaren att förstå metoden av det hela, hur ska vad utföras? Senare visar det sig att java-labben är en internetlabb och därmed förstår man varför dom nämner internetprogrammering när dom redogör språkens egenskaper. Vid det laget har inget om metoden nämnts utöver att dom ska jämföra. Hur ter sig deras implementation ut? Det är vid 2.4 Laborationen som implementationen av ett program beskrivs, men varför denna kryptiska titel? ja vi förstår att det är en Programmeringsparadigm(DD1361)-labb men varför är detta så viktigt? kunde dom inte ha kallat det Implementation eller Utförande eller Test eller som de tidigare namngavs Våra program (vilket egentligen inte är ett passande namn). Hela
tiden i metod-beskrivandet så förklaras ett program där man i princip beskriver labbet från kursen än själva programmet, man skriver Uppgiften innebar att man skulle laga och förbättra att[sic!] mycket simpelt banksystem, är detta relevant, bryr vi oss vad just progp-labben handlade om? varför inte bara skriva En implementation av ett simpelt banksystem i java implementeras i GO och Erlang, sedan förs analys av prestationen hos dom tre språken. Beskrivningen av uppgiften är på 5 rader[2.4 Laborationen, s.15], men jag minns att just denna labb hade mycket mer krav på programmets beteende, där det i detalj stod det exakta beteendet av banksystemet, hade dom inte kunnat ha detta i punktlista? Uppgiften hade helt enkelt skalats av, här görs dock ett positiv rättfärdigande av metod, fast än jag skulle stämpa Vi valde denna labb för att den var rolig att programmera som ett tvivelaktigt rättfärdigande, vårt huvudintresse är att kolla hur Go och Erlang ter sig i parallellprogrammering. Nätverks API kanske är långsam i vissa språk, varför inte ta en uppgift som inte förlitar sig på något annat än parallellprogrammering, tillexempel rendering eller sortering? Inte mycket självkritik finns i val av metod. När man kommer till själva Metod kapitlet så förklaras det att man helt enkelt programmerar i Go och Erglang och lär sig språken så. Dom nämner att deras program fokuserar på parallellprogrammering, En bra kommentar är att dom säger sig ha börjat med Go och sedan gått över till Erlang, på så sätt skulle dom slippa syntax-förvirring. Detta är en positiv beskrivning av metod, synd att inget om dessa program nämns eller helt enkelt mer om metod. jämförelsen sker med fokus på programmen vi skrev. skriver dom i metod, vilka program? Är det bankprogrammet eller dessa små test program dom talar om i början av stycket? I 3.1 Metod skriv sedan i 3.2.1 Go - Som Java-kunnig programmerare så var det inte svårt att sätta sig in i Go, vem är Java-kunnig?, menar dom som en Java-kunnig eller är just dom java-kunniga? det antog jag i början av texten o fortsätter att tro så. Liknande uttryck finns i hela rapporten, kanske är jag för noga, eller för kritisk, men i min avhandling var jag väldigt försiktig med att inte vara så informell, kanske har jag missförstått, i sådana fall är texten inte informell alls. Har författaren presenterat sina resultat tydligt? Nej, resultatet är på en halv sida och där får man förklarat att programmens funktion skiljer sig beroende på språk, för att det var enklare. Vad säger det oss om språkens kapacitet? jag tror att det inte säger oss något annat än att dom är olika svåra att lära sig, i själva verket har rapporten behandlat hur enkelt eller svårt det är att lära sig Go och Erlang, man måste vara mycket påläst i språken för att jämföra kapacitet. Kanske hade en pseudo-kod kunnat presenteras tillsammans med appendix där koden är, så att man kan se den generella funktionen. Finner du författarens slutsatser trovärdiga? Det är väldigt vanligt att folk som testar på Prolog, Haskell eller Erlang kommer till slutsatsen som dom skriver Däremot så lämpar sig inte språket till programmering av användarnära program så som grafiska gränssnitt. Jag har
personligen programmerat i funktionella språk i samband med java och kan säga att dessa språk gär ett mycket bra jobb då dom kombineras med ett annat språk. Speciellt när det står användarnära, som jag inte fullt ut förstår men antar betyder program som är i förgrunden så tycker jag att dom gör ett sensationellt jobb. Ericsson har länge använt Erlang för många olika ändamål, GUI går att koda med tillexempel Yaws(http:// yaws.hyber.org/appmods.yaws) som fungerar som en webserver. Jag har ingen större erfarenhet av Erlang eller Go men jag tror det vore för drastiskt att dra dom slutsatser som tas i rapporten, av allt att döma är inte författarna heller experter på språken. Slutsatsen nämner inte vilket av dom två språken som var mer lämpad för just deras experiment Vad tycker du om litteraturlistan? Vilken typ av litteratur finns med? Förefaller litteraturen relevant? Först och främst måste jag nämna att litteraturlistan används som noter i denna rapport och därav finns upprepningar. Sedan så är den inte i bokstavsordning eller någon ordning alls för den delen(till min bästa förmåga har jag ej funnit ett mönster). Kvalitén är inte heller särskilt bra, wikipedia och bloggar används som källor, där den första kan tolkas som en anonym källa. man är heller inte kritisk till sina källor(finns ett avsnitt för det sist i rapporten, men inte särskilt övertäckande), ska man använda Intel(ett processor-företag som de facto har monopol på den komerciella marknaden av persondatorn) så måste man nämna vilken agenda Intel kan ha till att uppmana folk till fler-trådig programmering, tillexempel. I sista stycket i rapporten(felkällor) nämns det att bloggar och hemsidor kanske inte är de bästa källorna, det är ett exempel på självkritik som uppskattas. Vilka avsnitt i rapporten var svåra att förstå? Referatet var förvirrande då det inte stämde med titeln helt, samt att utförande talar om att dom lärt sig språken genom att göra program, dessa presenteras inte. allt innan avsnitten metod och laboration är på sätt o vis jobbiga då man ännu inte fått en tydlig bild av vad som ska göras. Övriga kommentarer om rapporten och dess struktur. Vilka är arbetets/rapportens starka sidor? Strukturens starka sidor är väl att den är gjord i latex och att den är i kronologisk ordning. svaga sidorna är att vissa saker beskrivs sent i texten och för mycket skrivs om dom två språkens egenskaper, vissa lite irrelevanta för parallellprogrammering. Vilka är arbetets/rapportens svaga sidor? Vissa frågor återstår obesvarade, Under 3.2.2 Erlang står det Kravändrigen för programmet bidrog med andra ord till att vi kunde använda oss av Erlang på ett mer
naturligt sätt. [s.19] Innebär detta att Erlang är dålig? att man gjort det enklare för sig? Rapporten är återkommande informell och i vissa stycken presenteras känslor och åsikter som egentligen hör hemma i diskussion-delen. Den svagaste punkten är att dom valt att implementera ett klient/server program när man egentligen vill undersöka parallellprogrammering, finns det inga andra mer passande exempel? Mycket uteblivs och nämns flyktigt. Det är inte först långt in på texten som metod och utförande presenteras. Hur bedömer du arbetets nyhetsvärde? Go är ett nytt språk och alla undersökningar om den har väl nyhetvärde, Erlang är gammalt och undersökningar om parallellprogrammering har vid det här laget gjorts, tillexempel av Ericsson själv. Mer fokus på Go hade gjort rapporten ny-teknik material, kanske... förmodligen inte dock. Sammanfatta arbetet på ett par rader. En intressant läsning om två inte så värst vanliga språk. En genomgång av språkens egenskaper och ett tydligt jämförande mellan Go och Erlang. En trevlig läsning för studenter med intresse av parallellprogrammering. En bra redogörelse av två relativt okända språk för den större Frågor till författaren: 1. Vilket språk rekomenderar ni en programmerare som vill koda ett riktigt banksystem, Go, Erlang eller Java? 2. Tror ni resultatet skulle ändras med mer erfarenhet av dessa språk? 3. Har ni funnit liknande avhandlingar som behandlar detta ämne? 4. Vilket språk av dessa tre är bäst för parallellprogrammering? Vilket är ditt sammanfattande omdöme om exjobbet? Jag tycker att den är välgjord och intressant. jag hade upskattat mer av själva implementationen och hur banksystemet såg ut i sin avskalade version. Dom kanske borde ha fokuserat på ett språk, helst det nya språket Go. Jag gillar avhandlingen och önskar dom lycka till.