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:
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.