En stor del av att lära sig programmering handlar om ens tankesätt och att bygga upp mentala modeller. I denna guide ska vi titta på hur vi kan använda Sherlock Holmes "Science of deduction" som ett arbetssätt för att lösa olika programmeringsproblem. Du kanske ställer dig frågan varför Sherlock Holmes har något med programmering att göra? Se detta som ett sätt att tänka och som en hjälp när du ska analysera och lösa olika programmeringsproblem.
Sherlock Holmes "Science of deduction" består av tre delar: Observe, Theorize, Test, som beskrivs mer i detalj nedanför. Bra att ha i åtanke är att även om dessa görs i ordning är de även individuellt bra att ha i åtanke konstant när man programmerar.
Låt oss börja med den första delen observe och detta citat:
"You see, but you do not observe." Sherlock said. "The distinction is clear."
"For example, you have frequently seen the steps which lead up from the hall to this room."
"Frequently."
"How often?"
"Well, some hundreds of times."
"Then how many are there?"
"How many? I don't know."
"Quite so! You have not observed. And yet you have seen. That is just my point."
"Now, I know that there are seventeen steps, because I have both seen and observed."
Denna konversation mellan Sherlock och Watson är ett bra exempel på hur det är lätt speciellt i början när man skriver sin kod att man enbart skriver utan att riktigt reflektera vad man gör och varför. En viktig del när man programmerar är att kontinuerligt reflektera varför skriver jag min kod såhär, vad är det den gör och vad vill jag uppnå? Som exempel du kan i Javascript sätta en eventlistener på en knapp 300 gånger men förstår du inte att det är det du gör spelar det ingen roll hur många gånger du gör det.
It is a capital mistake to theorize before one has data. Insensibly one begins to twist facts to suit theories, instead of theories to suit facts.
Kontentan av citatet ovan är att du behöver gå igenom den data vi har innan du kan börja fundera på en lösning på ditt programmeringsproblem. Risken annars är att du får en lösning som är bristfällig eller inte täcker in alla krav.
Vid ett nytt projekt börja med att gå igenom kraven och all funktionalitet som ska finnas, vilka delar finns det? Vad finns det för data och vad är det förväntade resultatet/målet?
Vid ett existerande projekt där du ska lägga till funktionalitet är det viktigt att förstå gå igenom den existerande koden och testa runt för att få en förståelse för hur programmet fungerar innan du börjar på en lösning.
Efter att du har gått igenom all data och fått en förståelse för vad du ska göra och vad du förväntar dig för resultat är det dags att fundera på hur. Två delar här som är viktiga, att filtrera ut all data som är onödig för det aktuella problemet och fokusera på ditt problem och undvika eventuella sidospår.
Börja med att ställa dig frågan, vad är det minsta jag behöver får att få detta fungera? Det är annars lätt att man börjar fundera på sidoproblem som tar fokus och riskerar att komplicera hela grundproblemet.
Efter att du gjort det kan du börja ta fram lite olika tänkbara lösningar. Ha i åtanke konstant vad det är du ska vill uppnå och den data du har när du jobbar med en lösning.
Nu har du fått fram en möjlig lösning så nu är det dags att testa den! Det viktiga här är att applicera ett analytiskt och kritiskt tankesätt när du testar och vara beredd på att lösningen inte säkert kommer fungera. Även Sherlock Holmes lyckades inte alltid på första försöket med sin teori utan han gick tillbaka, gick igenom all data och försökte se vad han missat och la till nya pusselbitar till pusslet. Samma tankesätt kan du applicera i programmering, gå igenom koden steg för steg och berätta för dig själv vad som händer, försök se om du missat något.
Detta citat av Sherlock stämmer mycket väl in på programmering med.
It has long been an axiom of mine that the little things are infinitely the most important.
Beväpnad med denna kunskap, testa på att applicera detta nästa gång du ska lösa ett programmeringsproblem.
The Game is Afoot!
Alla citat är från The Adventures of Sherlock Holmes av Sir Arthur Conan Doyle.