Varför är kodning så svårt? | Del 1

Detta är ett inlägg om ett tekniskt ämne: kodning. Men för att klargöra att jag inte har någon teknisk bakgrund.

Jag är stolt son till en konstnär som lärde mig att använda mina känslor som en vägledande kompass för att navigera i livet, snarare än logik. Lera, grafit, bläck, färg, duk, papper och lim rinner genom mina ådror.

Jag kämpade i skolan av många anledningar – bland dem fanns två inlärningssvårigheter: en nervskada i hjärnan som orsakades av komplikationer vid födseln och dyslexi, som skulle förbli odiagnostiserad fram till slutet av 20-årsåldern. Mina bästa provresultat var så dåliga att jag nästan inte kom in på college.

Jag studerade statsvetenskap i skolan och mina första misslyckade försök att göra karriär var inom film och grafisk design.

Jag lärde mig själv att koda – det är en av de svåraste saker jag någonsin har gjort. Jag har också undervisat i kod vid ett bootcamp här i DC i ungefär fem år och varit mentor för vänner till och från.

Men även om det är svårt är det inte omöjligt. När man är självlärd lär man sig bitar och bitar. Ibland är något vettigt omedelbart, medan andra kommer att klicka flera år senare. Förklaringens väg är väl upptrampad, men jag har funnit att dina livserfarenheter, dina läggningar och din utbildning innebär att halva din kamp är att hitta rätt inlärningsresurser.

Två saker innan vi börjar:

  1. Om jag kan göra det, kan du också göra det.
  2. Du är inte ensam.

Nytt ordförråd, nya begrepp, nytt… allt

Ett av de svåra hindren för att lära sig koda är att de termer som används för att beskriva något på ”kodspråk” ofta kan betyda något helt annat på vanlig engelska. Mitt exempel är ordet ”Class”.

Under de akademiska eller sociologiska konnotationer som vi är vana vid är en Class i programmeringsspråk olika beroende på vilket programmeringsspråk du använder. Ännu mer förvirrande i dessa olika programmeringsspråk är en Class både tillräckligt besläktad begreppsmässigt för att man ska kunna dra paralleller till varför dess ursprungliga författare valde att kalla den för Class, men den faktiska användningen är tillräckligt annorlunda för att verkligen vara något helt annat. (Särskilt CSS-klasser jämfört med objektorienterade klasser)

Att tala kod liknar nästan slang, vilket som alla föräldrar vet är frustrerande. Det kan vara svårt i början att märka vad som är ett normalt engelskt ord och vad som är en ”kod”-term.

För övrigt hör man dem ofta i snabb följd, så en hel kodspråkssats kommer att vara grammatiskt korrekt och man kommer att känna till vart och ett av orden var för sig, men inte när de är ordnade på det här sättet.

”Efter att jag spolade både webbläsarens cache på local och bad John att rensa servercachen på staging, eftersom jag trodde att det måste vara något slags permanent minnes- eller tillståndsproblem, visade det sig att det var en namnkollision som överskrev de invocations som definierats tidigare i roten. Jag ska göra en biljett för att lägga till källkodskartor så att vi kan spåra instantieringar lättare i stället för att leta i repo.” -Varje mening jag sa till min chef, som nickade gillande.

Inte bara börja från scratch, utan definiera vad scratch är

Ovanpå det finns det begrepp som du aldrig har behövt stöta på tidigare, än mindre kämpa med.

Ett exempel som jag gillar att använda med mina studenter är:
Säg att du vill programmera din dator så att den gör en kopp kaffe åt dig. Enkelt eller hur?

Du: Hej Dator: gör mig en kopp kaffe.

Dator: DU KAN INTE GÖRA DET. VAD ÄR KAFFE OCH VAD ÄR GÖRNING?

Föreställ dig alla sätt du kan göra kaffe på… föreställ dig sedan processen att få kaffebönan från trädet den växte på till en form som du kan använda i denna process… jösses.

Vi börjar ofta från noll, och till och med små, enkla saker för oss är faktiskt ofta förbluffande komplicerade att åstadkomma med kod.

Man behöver inte bara programmera saker, man måste definiera vad de är i första hand. Sedan måste man förstärka koden för att hantera alla möjliga sätt som det kan gå fel på. Enkla uppgifter blir till fantastiska katedraler som hedrar de explicita gudarna.

”Googla bara på det”

Det råd som gör mig mest förbannad från mina kollegor till nya utvecklare är kanske att ”googla på det”.

Alla som har stått med bröstet djupt ner i gyttjan vet hur ohjälpsamt detta är.

A. Du vet inte hur du ska diagnostisera vad som är fel, så du vet inte ens var du ska börja. (Om du visste det skulle du inte fråga).
B. Även om du gjorde det vet du inte vilka termer som är förknippade med problemet.
C. Och även om du gjorde det, är resultaten ofta så förbryllande att du inte skulle veta det även om det stirrade rakt på dig. (Eller som min farfar sa, du skulle inte kunna hälla vatten ur en känga om det fanns instruktioner på botten.)

Kodning är som ett främmande språk

Det finns slående paralleller mellan att lära sig koda och att lära sig ett främmande språk. Jag har upptäckt att elever som studerar språk, engelska eller annat, tenderar att snappa upp syntaxer snabbare.

Ja, det finns mönster och logik i systemen.

Ja, vissa saker är idiosynkratiska och kan inte kortfattat förmedlas i sin engelska motsvarighet.

Ja, det finns undantag till ovanstående 2 punkter som motsäger eller inte är vettiga, men så är det så det är så det är så det är, så du måste lära dig det utantill.

Half Pastor / Half Scientist

Den kanske mest galna motsägelse som en programmerare måste uppfylla är att du har till uppgift att både veta hur allting fungerar och att krita upp en hälsosam majoritet till tro.

För att kunna programmera måste du använda dig av logik, förnuft och slutledningar. Felsökning är en deduktiv process. Bra kod är välstrukturerad, medvetet logisk och välorganiserad.

Å andra sidan använder vi stenar som vi lurat till att tänka (datorer). Vi förlitar oss på ramverk, bibliotek och snippets som skrivits av andra människor och som vi antingen inte förstår på grund av tidsbrist eller tar enbart på tro. Det händer så mycket i varje kodrad att vi aldrig skulle kunna avsluta funktionen om vi var tvungna att stanna upp och tänka på vad allting gör.

För att bli programmerare måste du vara både delvis trosbaserad präst/prästinna och stenhård Spock-logiker.

Bild via Paramount Pictures.

Slutsats

Så som du kan se har vi fullt upp. Men precis som vi inte kom in i den här världen och visste hur man talar, skriver eller utför någon av de uppgifter som vi nu tycker är rutinartade men som vi en gång kämpade med: vi kan göra det.

Den djupa sanningen bakom kodning är att den är produkten, de bästa ansträngningarna – de goda avsikterna – den ärliga gåvan från några mycket smarta människor för att göra livet enklare. Någon smart person någonstans sa: ”Det här suger. Det måste finnas ett bättre sätt än så här.”

Och koden tog sitt första andetag.

I nästa avsnitt ska jag ge dig några strategier för att jämna ut denna process och få dig att närma dig dina mål. Kod är här för att stanna, den är här för att hjälpa dig, och om inget annat kan du kanske ha lite kul.

Lämna ett svar

Lämna ett svar

Din e-postadress kommer inte publiceras.