Kategoriarkiv: programmering

Programmering är roligt, programmering är svårt

Originaltanken för detta inlägg var att skriva om vad som gör programmering svårt för nybörjaren. För även om mycket av det arbete som exempelvis code.org gör handlar om att sänka tröskeln så att fler provar på programmering, så kommer de flesta någon gång att tycka att det är svårt. Vilket väl gäller det flesta saker som man inte kan, som man lär sig, frågan är om det i större utsträckning gäller för programmering? Och i vilket fall som helst så kommer även den vane programmeraren fastna och ge uttryck för frustration (och sannolikt sitta aningen för länge och försöka lösa det, bara för att efter en paus ganska snart upptäckta vad problemet var – det händer inte varje gång, men ofta). Jag blev nyfiken på vad andra sökt på, så jag gick till Google:

google-autocomplete-programmingis

Någonstans så hänger detta med det svåra och det roliga ihop, att det är roligt delvis för att man hitter den rätta mixen av utmaning och hanterbart, till den grad att man kan prata om flow för programmerare eller ”coder’s high” . Därför blir dagens inlägg både om varför programmering är roligt och varför det är svårt.

Varför programmering är roligt

För min egen del är programmering roligt (engelskans fun funkar nog lite bättre än svenskans roligt, men vi kör på det) av flera skäl. Dels handlar det om själva byggandet, att det blir något, vare sig det är något som kommer till användning eller något som man gör för något estetiskt värde eller för att man är sugen på det i stunden. En annan del, som kanske är viktigast för min egen del, är själva problemlösandet, både i det stora (identifiera vad problemen egentligen är, skapa strukturer för att lösa dem) och i det lilla (varför kompilerar inte skiten). Och så kan man kontinuerligt lära sig och utveckla sig, både vad gäller det praktiska (som bättre sätt att hantera utvecklingsprojekt) och det teoretiska (som nya modeller eller algoritmer).

Det finns en känd bok om utveckling av programvara och projektledning av projekt som syftar till att utveckla programvara som heter Mythical Man Month: Essays on Software Engineering. (När jag först hörde talas om den trodde jag den hette Mythical Man Moth, vilket jag tycket var en underlig titel på en bok om utveckling av programvara.) Trots att den kom ut för första gången 1975 anser många att den fortfarande är relevant idag (några nya kapitel kom med på 90-talet). Förutom lärdomar som att det inte hjälper att lägga till fler programmerare till ett försenat projekt, så finns även en lista med de belöningar som finns i att programmera:

  • Glädjen i att bygga saker, som barnet i sandlådan
  • Nöjet i att bygga saker som kommer till användning för andra
  • Fascinationen i att sätta samman pussel-liknande objekt med delar som rör sig tillsammans enligt det sätt som det designades från början, som en flipperspel
  • Glädjen i att lära sig nya saker, både praktiska och teoretiska
  • Förtjusningen i att arbeta med ett material som på en och samma gång ligger nära tanken och drömmarna och ändå kan ge så konkreta resultat – något som får många att dra paralleller till magins värld

Min snabba översättning är inte originalet rättvisa, gå till länken ovan listan och läs själv på engelska.

En sak jag tycker saknas i Brooks lista (och som jag inte själv kom att tänka på när jag började spåna) är nöjet att skapa saker med andra.

Varför programmering är svårt

Många som börjar med programmering tycker att det är svårt. Det som gör det svårt har delvis att göra med de sakerna som gör det roligt (och som är roliga för att man vet att man bemästrat liknande problem tidigare, eller i alla fall har anledning att tro att man ska bemästra det problem som man just nu står för). Men det är också svårt för att det finns praktiska hinder, nya tankesätt, ny teminologi. Några exempel:

  • Programmering är förhållandevis oförlåtande för små misstag. Och de felmeddelanden som man får är inte alltid begripliga för nybörjare.
  • Dokumentationen är skriven på ett sätt som är svår för nybörjare att ta till sig. Inte sällan finns felaktigheter, vilket är svårt för en nybörjare att förstå.
  • Förhoppningsvis skyddas många nybörjare från det, men att bara sätta upp själva utvecklingsmiljön (programmet där man bygger programmet) kan vara icke-trivialt. Något som kan hindra mig från att påbörja nya projekt i nya språk.
  • Det ställer förhållandevis höga krav på arbetsminnet, att man kan hålla flera saker i huvudet, eller att man skaffar sig en vana att skriva ner saker om man inte har den förmågan.

Listan på vad som gör programmering svårt för nybörjaren kan göras längre. Därför så tror jag att det finns en risk med initiativ som vill få programmering att framstå som något lätt, och det är att många kommer att dels bli frustrerade, men också ännu värre tro att de är dumma när de sedan stöter på problem som de inte reder ut.

Man kan också argumentera bredare om/hur/varför programmering är svårt, det finns en tråd på Quora som tar upp flera intressanta perspektiv.

Det är intressant hur #blogg24 ger en en ursäkt att publicera något halvfärdigt. Jag är trött , mitt sjuka barn håller på att vakna, det är lillejuleafton, så det blir inget skrivande i kväll. Jag har inte alls skrivit så utförligt om varför programmering är svårt eller hur detta faktum kan/ska framställas för en nykomling, eller vad man kan göra för att hantera det. I vanliga fall hade jag sparat utkastet och återkommit en annan dag, idag publicerar jag det. Bra eller dåligt? I mitt fall, i denna stund, mest bra tror jag.

Pepparkakor och programmering

Idag har det varit traditionsenligt pepparkaksbak med mamma. Vissa jag känner vill skära ut nya former och skapa nya alster varje gång. Jag är en pepparkaksbakare som gillar att använda pepparkaksformar (mamma och jag har en del…), återkomma till gamla favoriter och vara så effektiv så möjligt när jag stansar ut kakorna.

Pac man-pepparkakor

För några år sedan hittade jag dessa Pac Man-formade formar, som det det blir en plåt eller två av. Spökena blir bra kakor, medan själva Pac Man-formen inte riktigt funkar utan sin kontext. (När jag köpte formarna fick man tre spöken, vilket är en underlig syn på hur man använder formar, men det blir ju fina bilder.)

Mer pac-man pepparkakor

Vad har då pepparkakor och programmering med varandra att göra? Kakformar och kakor är faktiskt en vanlig liknelse när man lär ut objektorienterad programmering (när man lär ut Java och Python, till exempel). Grundläggande inom objektorienterad programmering är koncepten klass och objekt, där en klass är en mall utifrån vilken man skapar ett eller flera objekt med en viss typ av egenskaper.  Det vill säga, en klass kan ses som en kakform från vilken man skapar objekt. Detta är inte det första man lär sig när man programmera, vanligtvis har man stött på variabler och funktioner/metoder först.

Liknelsen har några nackdelar, som att det vanligtvis är ganska lite skillnad mellan kakorna man stansar ut, medan objekt av samma klass tar flera olika värden för en viss uppsättning variabler som beskriver dess egenskaper.

Grace Hopper

Anledningen till att det är denna vecka som är Code Week med Hour of Code är att Grace Hoppers födelsedag infaller denna vecka – nämligen den 9 december (så jag borde skrivit detta för någon dag sedan…).

Vad gjorde Grace Hopper?

Grace Hopper har varit viktig för datavetenskap på flera sätt, bland annat för att hon skrev den första kompilatorn (ett datorprogram som översätter från ett högnivåspråk som Java till ett mer hårdvarunära språk). Ett av de äldsta programmeringsspråken som fortfarande används, COBOL, bygger på ett programmeringsspråk som Hopper utvecklat, som var nyskapande genom att det använde engelska termer snarare än matematisk notation. Hon kopplas ofta samman med frasen ”debugging”, och även om hon inte var först med att använda ordet, så är den historien väldigt känd.

Ett av mina favoritklipp på YouTube

Förutom dessa meriter är hon en rolig och kvick dam, som man kan se på denna gamla intervju från Letterman.

Mer?

grace-hopper-google-doodle

Vill du veta mer om hennes liv så finns där flera biografier, men också en fin illustration av hennes liv i serieform. Google gjorde en Doodle förra året för att fira hennes 107-årsdag.

Hittade även en läraktivitet från CSEdWeek som utgår från Grace Hopper och fokuserar på debuggning i Scratch.

Jag lärde mig programmera…

Jag började denna blogg med att berätta hur jag lärde mig programmera. Jag tycker att det är intressant att höra hur olika personer lärt sig programmera och det är också något som folk är rätt benägna att dela med sig av. Denna typ av berättelser var också del av den första videon av de som jag skrev om igår. Man kan också hitta en hel del sådana historier på nätet.

Idag vill jag tipsa om ilearnedtoprogram.com. Där finns hundratals korta historier om hur folk lärde sig programmera – jag har valt ut fyra som tilltalade mig. Jag gillar bredden av perspektiv som lyfts fram när man tvingas att koka ner historien till en mening på ganska få tecken. De flesta jag har sett handlar om varför (ibland konkret, ibland med känsla av efterkonstruktion) och vad (här är det ofta mycket konkret, språk, hårdvara, etc.).

Däremot pratar vi sällan om hur vi lärde oss läsa. Jag tänker mig att detta beror på att vi alla lär oss läsa på ungefär samma sätt, men är inte säker på att det är hela svaret. Om programmering tar större plats i skolan, kommer då sådana här historier att bli ointressanta, irrelevanta? Eller är programmering mer mångfacetterat och något som många ändå inte kommer att ägna sig åt (även om värdet i att ha förståelse för det består), vilket gör att denna typ av historier kommer att berättas även av våra barn och barnbarn?

ilearnedtoprogram-pamelafox

ilearnedtoprogram-animeshagarwal

ilearnedtoprogram-eliafreedman

ilearnedtoprogram-joncotter

Kodtimmen – massor av aktiviteter att prova!

Måndagen 8 december till söndagen 14 december 2014 är det CSEdWeek, det vill säga datavetenskapsutbildningsveckan (säg det tre gånger snabbt…).

Kodtimmen är kopplad till denna vecka och riktar sig till grundskolan och gymnasiet. Det finns massor av olika programmeringsintroduktioner man kan prova, där tanken är att dessa ska kunna utföras på en timma, och att denna timma kan infalla när som helst under veckan. (De flesta av aktiviteterna är tillgängliga även innan och efter veckan.) Ett tänkt upplägg är att lärare ska avsätta klassrumstid för att alla elever ska prova på en av dessa aktiviteter – om man gör det uppmanas man att berätta det och det visas som en av många pluppar på världskartan.

Kodtimmen kördes för första gången förra året av code.org. Initiativet sponsras av flera stora teknikföretag, för dem handlar det om att säkra framtidens rekryteringar. Tycka vad man vill om detta, men det har skapat många ingångar till programmering och filmer med kända personer som berättar om varför programmering är intressant och viktigt.

Här kan du läsa om några exempel på kodtimmesaktiviteter. Jag får erkänna att jag hittade betydligt fler resurser än jag väntat mig när jag började leta material för detta inlägg. Code.org, Scratch och Codecademy var givna, men det finns en massa annat som ser roligt ut.

Code.org

code.org-hoc

Code.org, som lanserade kodtimmen förra året, har flera kodintroduktioner som är tänkta att funka för alla åldrar (givet att man kan läsa). Förra årets aktivitet är med bland annat Angry Birds. I våras lanserades Flappy Code, där man bygger sitt eget Flappy Bird-spel. I senaste tillskottet är temat Disneys Frozen. Övningarna görs i ett visuellt programmeringsspråk, Blockly, som är likt det som används i Scratch.

code.org-hoc-frozen

Fler övningar hittar du på studio.code.org. En hel del av materialet finns översatt till svenska, men inte allt. Du kan göra en insats och översätta mer!

Grok Learning

grok-hoc-diseaseoutbreak

Grok Learning har fyra Python-aktiviteter och en Blockly-aktivitet som en del av sin kodtimma. Man kan bland annat bygga en enkel chatbot (som heter Eliza, en fin vink till ett historiskt program :-)), skapa en modell för ett sjukdomsutbrott eller göra ett textbaserat spel. Det verkar vara bra övningar om man vill köra kodtimmen med lite äldre barn. Mitt första intryck av interfacet var att det inte var helt lätt att se vilket steg man var på, och att det inte var helt intuitivt att man behövde köra programmet innan man fick trycka på rätta-knappen (även om det är ett rimligt upplägg). Detta går nog bra att komma runt med hjälp av instruktioner. Allt innehåll är på engelska.

Processing

processing-hoc

Processings kodtimme har ett lite annat upplägg en flera av övriga aktiviteter. Dels för att den kör ett upplägg med små videoföreläsningar (med en mycket entusiastisk föreläsare), följt av övningar i webbläsarfönstret. Dels för att den har en något annan målgrupp: elever som är intresserade av konst och design (vilket inte är så konstigt, eftersom det är detta som språket Processing syftar till). Allt innehåll är på engelska.

Fler möjligheter

Detta var bara några av aktiviteterna jag hittat. Här är några fler kodtimme-övningar:

  • Scratch interaktiva julkort, som jag skrivit om tidigare och gjort mitt eget.
  • Hopscotch hour of code – Specialvariant av ipad-appen Hopscotch. Det finns youtube-filmer för att stödja aktiviteterna, där man bland annat bygger ett spökbollsspel där man kastar mat. På engelska.
  • Codecademy hour of code – Introduktion till JavaScript där man bygger ett program som gör en färgglad, interaktiv animation av sitt namn. På engelska.
  • App Inventor hour of code – Filmer och handledningar som bland annat visar hur man kan skapa en Android-app som omvandlar text till tal. MIT App Inventor är ett verktyg där man använder visuell programmering för att bygga Android-program. Mest givande om man har Android-telefoner att köra på. På engelska.

Programmering som julpyssel

julgran

Made with Code: Julgran och snöflinga

Google har ett projekt för att skapa intresse för programmering som heter Made w/ Code. Just nu får det en del uppmärksamhet, eftersom de har ett programmeringsprojekt där vem som helst kan koda (en del av) designen för hur julgransljusen på granarna utanför Vita huset ska lysa.

Skärmavbild 2014-12-05 kl. 20.17.09

Med hjälp av grafiska kodelement ställer man in bland annat färg och hastighet på ljusen. Man kan sedan välja ett träd där denna design ”spelas upp” vid ett tilldelat klockslag. Min design visas på Florida-trädet den 18 december runt kl 16:38 (EST). Frågan är hur stämningsfullt det blir när trädens ljusmönster skiftar hela tiden?

madewithcode-snowflake

Made w/ Code har ett annat projekt med jultema, där man skapar sin egen animerade snöflinga (den jag skapade ser ni ovan, minus animationen då, för den fick man visst inte med i delningen). Jag tyckte att denna var roligare och mer intuitiv än julgransbelysningen – vilket är lite märkligt med tanke på att julgransbelysningen stod som nybörjare och denna som mellansteg.

Scratch: interaktiva julkort eller julinspirerade spel

Scratch har en guide för att hjälpa en att bygga interaktiva julkort, som visar hur man väljer juliga sprites, flyttar och växlar klädsel på dem. Den visar även hur man kan välja en vintrig bakgrund och spela bakgrundsljud. När man är färdig kan man ladda upp dem till projektgalleriet, där man kan kika på andras kort.

Scratch-julkort

Förutom animerade julkort kan man även göra julinspirerade spel med Scratch. Vad sägs om en jultomte-racer eller en nisse som fångar klappar från jultomtens flygplan? Tomte-racerna kommer med detaljerade instruktioner (på engelska) för hur man kan skapa en egen. Man kan också ladda ner Scratch-filen för att göra en egen version, eller bara kolla hur koden ser ut för en viss del av spelet.

Några exempel på hur man kan använda programmering som julpyssel – kanske kommer det några fler under december. I vilket fall som helst så lovar jag att återkomma med mitt egna julkort i Scratch.