Hur man tänker som en programmerare och problemlösare

By . Latest revision .

Jag hittade en intressant artikel om hur man tänker som en programmerar och hur man blir bättre problemlösare. En av programmerares viktigaste kunskaper är problemlösning, att kunna bryta ner stora komplexa problem. Det räcker inte med att kunna syntaxen för ett programmeringsspråk. Utan man behöver vara duktig på problemlösning för att bli en bra utvecklare.

Artikeln föreslår att man ska ha ett ramverk för problemlösning och inte göra den klassiska:

  1. Testa en lösning.

  2. Om det inte funkar, testa en annan.

  3. Om det inte funkar, upprepa steg 2.

Artikeln utgår från boken “The 4-hour chef” av Tim Ferris och intervjuer med två erfarna programmerare. De hade olika tillväga gångar men de kom fram till fyra gemensamma principer.

#1. Förstå

Att verkligen förstå vad det är som efterfrågas eller vad man har för fel/problem. Detta är något ni kommer kämpa mycket med under er skoltid. Varje vecka får ni nya uppgifter och frågeställningar som ni ska lösa med kod. Varje vecka kommer ni stöta på nya problem i er kod, saker som inte funkar som ni tänkt och program som kraschar.

Det finns några saker man kan göra för att öka sin förståelse, läs igenom uppgiften igen (långsamt), rita upp ett diagram och förklara högt för dig själv (eller någon annan) vad ni ska göra/försöker göra eller vad som inte funkar som ni tänkt.

Man har inte en alltid en kompis bredvid sig man kan prata med, när så är fallet kan man istället prata med sin plastanka från badkaret. Det finns en populär felsökningsteknik som kallas rubber duck debugging.

Mikael pratar om rubber duck debugging

#2. Planera

Innan ni börjar koda, planera er lösning. Ge er hjärna tid att processera problemet.

I en senare kurs kommer vi gå igenom något som heter UML diagram. Det är ett sätt att planera sin kod genom att rita upp olika typer av diagram.

Ett sekvensdiagram.

Ett sekvensdiagram.

Vi är dock inte så avancerade att vi använder det än, men det är ett alternativ ni kommer ha i framtiden.

En bra tanke att ställa er själva är, “Givet input X, vilka är de nödvändiga stegen för att returnera Y”.

#3. Dela upp

Försök inte att lösa ett stort problem.

Bryt upp det i delproblem. Delproblemen är lättare att lösa. Börja med problemet som verkar lättast att lösa. Gå sen vidare till nästa problem.

När du har löst alla delproblem koppla ihop dem för att lösa det stora problemet.

Divide and conquer. Källa www.educative.io

Divide and conquer. Källa www.educative.io

Detta är en av de viktigaste kunskaperna ni behöver lära er.

De har följande exempel i artikeln:

Till exempel, anta att du är en ny programmerare och du får i uppgift att skriva ett program som läser tio siffror och ska räkna ut vilket nummer som är högst. För en ny programmerare kan det vara en svår uppgift. Även om det bara kräver grundkunskap inom programmering.

Om du fastnar, bryt ner problemet till något lättare. Istället för det tredje högsta numret, börja med det högsta numret. Om det är för svårt börja med att hitta det högsta av tre eller två tal.

#4. Vad gör vi när vi fastnar?

Saker kommer alltid gå fel, ni kommer inte på lösningen till ett delproblem eller ni hittar inte er bugg.

Det är händer alla. En viktigt egenskap bra utvecklare har är att bli intresserad av fel och buggar istället att bli irriterad av dem.

Här kommer tre saker ni kan göra när ni stöter på patrull.

Debugga

Gå igenom koden steg för steg och försök ta reda på var koden slutar fungerar korrekt.

Paus

Ta en paus från koden, tänk på något annat. Gå och hämta ett glas vatten, ta en promenad eller gå hem och sov och kom tillbaka utvilad imorgon istället.

Ibland är det allt som behövs, man snöar lätt in sig på ett spår och då kan en paus vara det som behövs för att hjärnan ska klara av att hitta en ny lösning.

Om ni kör fast ordentligt kan det också funka att börja om på nytt. Radera koden och försök med en ny lösning. Använd kunskapen du fick när du försökte första lösningen.

Sök

En gammal hederlig Googling. 99% av gångerna är det någon annan som har haft samma problem och skrivit om det på internet. Sök efter deras lösning.

Obs! Börja inte din problemlösning med att hitta andras lösningar. Om du inte behöver tänka och kämpa själv först, lär du dig inget. Försök inte heller hitta lösningen på det stora problemet, sök på delproblemet.

#Avslutningsvis

Det är en väldigt givande artikel som sammanfattar programmering och problemlösning väldigt bra.

Denna kunskapen är inget man lär sig på en vecka, det är inte ens säkert att ni kommer ha lärt er det eller i alla fall blivit bra på det efter denna kursen.

Ni har en lång väg framför er. Vissa har lätt för problemlösning medans andra behöver jobba hårt för att bli bra på det. Försök att inte jämföra er allt för mycket med era studiekamrater. Ni alla har olika lätt att lära er programmering och problemlösning.

Men för att ni ska bli bra på det behöver ni öva mycket, och öva lite till!

#Revision history

  • 2020-08-28: (A, aar) Första versionen.

Document source.