Gode ​​kodningsinstinkter vil til sidst sparke dig i tænderne

Jeg skrev mine første par kodelinjer for næsten 32 år siden, da jeg var 6 år gammel. Jeg udviklede meget stærke kodningsinstinkter. Jeg kunne se på ethvert problem og straks vide, hvordan jeg løser det, bare ved intuition.

Da jeg begyndte at kode internettet for at leve, følte jeg mig som en rockestjerne. Jeg fandt og fikserede fejl hurtigere end nogen af ​​mine kolleger. Mit team begyndte at tildele mig alle de mest udfordrende funktioner og de mest irriterende bugs. De begyndte endda at kalde mig en "troldmand".

Men at følge din intuition kan kun tage dig indtil videre. Jeg ramte et plateau. Og ingen mængde af kodningsinstinkt ville skubbe mig forbi det.

Problemet med at have tillid til din tarm

Desværre skalerer intuition som en teknik til læring og problemløsning ikke særlig godt. Når du er afhængig af instinkt og intuition alene, får du en kurve, der ser sådan ud:

Naturligvis kan du vælge at acceptere dine grænser og kun nogensinde håndtere problemer under linjen. Dette vil forkæle din "rockstjernekoder" -fantasi, men det vil hurtigt begynde at begrænse din vækst og din karriere. Plus, det er kedeligt.

Da jeg pressede mig længere og længere frem i min karriere - og begyndte virkelig at udfordre mine egne evner - begyndte jeg at bemærke en foruroligende tendens. Jeg var ikke længere den hurtigste dreng på blokken.

Jeg havde altid vidst, at jeg efterhånden skulle komme ind på mennesker, der er smartere og mere talentfulde end mig. (Mine vrangforestillinger om storhed var stadig grundlæggende i virkeligheden. Jeg er ikke et geni.)

Men da jeg kiggede rundt, indså jeg, at nogle af de mennesker, der slog mig, ikke brugte et overlegen intellekt eller en slags medfødt gave til kode. De havde bare et hemmeligt våben, som jeg hårdt manglede: disciplin.

Det viser sig, at en konsistent, gentagelig, metodisk tilgang til læring og problemløsning i sidste ende vil overgå alle naturlige gaver - eller instinkter - som du måtte have udviklet.

Dine instinkter giver ikke en chance

Lad os værktøjet op til disse problemløsningsevner

Uanset hvem du er, hvor meget lidenskab eller naturligt talent du har, vil du til sidst slå et hårdt loft. Jeg vil dele med dig et par teknikker, der dramatisk vil forbedre dine disciplinerede problemløsningsevner.

Jeg antager, at hvis du har en debugger, du allerede har kørt den, Googled output og ikke havde held.

Jeg antager også, at hvis problemet blev rapporteret af en anden, har du været i stand til at gengive problemet. Denne anden antagelse er en stor. Hvis du ikke kan gengive problemet, skal det være dit første skridt.

Du skal sammenligne den kontekst og det miljø, hvor problemet opstod, med den kontekst og det miljø, hvor du prøver at gengive det. Begynd at fjerne eventuelle forskelle, du kan, en efter en, indtil du kan reproducere.

Når du først kan gengive problemet, og efter at fejlsøgningen ikke har været til nogen nytte, kan du prøve følgende disciplinerede tilgange.

RTFM

Læs dokumentationen, du narre! (Det er ganske vist ikke det, RTFM står for nøjagtigt, men der kan være børn, der læser.)

Læs det faktisk - mere end én gang, hvis du har brug for det. Må ikke bare skumme den på udkig efter noget, du kan kopiere, indsætte og bede vil fungere.

Problemet er, at du vil have et svar hurtigt. Du vil have den spændende sejr. Men du er ikke villig til at sætte ind i arbejdet. Så langsomt. Tage et åndedrag. Tag en kop kaffe. Og læse den relevante dokumentation hele vejen igennem.

Hvis du ikke har nogen dokumentation, kan du overveje at oprette nogle, og derefter dele den med andre, efter at du har løst problemet.

Test dine antagelser

Hvis du forventer, at noget fungerer, og det ikke, skyldes det, at du har taget en dårlig antagelse et eller andet sted undervejs. Lav en oversigt over dine antagelser og prøv at bevise, at hver enkelt er sand.

Start med de mest basale antagelser, der hurtigt kan testes. Kører serveren faktisk? Er det forbundet til netværket? Er alt stavet korrekt? Er alle parenteser og semikoloner på det rigtige sted?

Hvis du ikke starter med de enkle ting, og det viser sig at være en af ​​disse ting, når du endelig finder ud af det, vil du hoppe ud af et vindue. Så spar dig hovedpinen.

Demonter og saml igen

Johnny 5 har måske været i live, men din kode er det ikke. Vær ikke bange for at adskille den.

Fjern komponenterne fra opløsningen, indtil den begynder at arbejde igen, og sæt derefter komponenterne tilbage en efter en for at finde det ødelagte stykke.

Dette føles trættende og skræmmende, men det er en af ​​de mest effektive, disciplinerede måder at finde årsagen til en fejl i din kode. Sørg for, at du dog har en sikkerhedskopi, inden du starter, hvis du ved en fejltagelse ender med Humpty Dumpty-kode (kode, som du ikke kan sætte sammen igen).

For øvrig, hvis du befinder dig i en situation, hvor du ikke ved, hvordan du samler koden tilbage til, hvordan den var, er dette en indikation af et potentielt større problem: du forstår ikke kodebasen, du arbejder med . Det er dårlige bananer, min ven.

Hvis du har en stram frist, skal du straks søge hjælp fra en, der forstår kodebasen bedre end dig. Hvis der ikke findes en sådan person, skal du grave dig ind i en lang nat og prioritere at lære at kende og forstå, hvordan denne kode fungerer, så du kan løse den.

Fjern variabler

Alt, der kan ændres fra en prøve til den næste, skal gøres for at være statisk, mens du fejlsøger. Du kan ikke ramme et bevægende mål. Det er her Test Driven Development (TDD) er praktisk. Hvis du bruger TDD, skal du have nogle spotte genstande til din rådighed.

Spotte objekter er simulerede objekter, der efterligner virkelige objekts opførsel på kontrollerede måder. En programmerer opretter typisk et uekte objekt til at teste adfærden hos et andet objekt, på meget den samme måde som en bildesigner bruger en kollisionstestdummy til at simulere en menneskes dynamiske opførsel i køretøjets påvirkninger. - Wikipedia

Hvis du ikke gjorde TDD, er du nødt til at håne alle bevægelige dele nu, så du kan finde fejlen under stabile forhold.

Her er et tip: Hvis du håner et objekt, og fejlen pludselig forsvinder, er bugten sandsynligvis i det objekt, du hånede.

Brug "Saff Squeeze"

Der er en teknik kaldet “Saff Squeeze” - navngivet og populariseret af Kent Beck - der er en slags krydsning mellem de to ideer ovenfor.

Han beskriver det på denne måde:

"For effektivt at isolere en defekt skal du starte med en test på systemniveau og gradvist inline og beskære, indtil du har den mindst mulige test, der demonstrerer defekten." - Kent Beck

Så i stedet for formelle hån eller adskillelse af kode, tilføjer du blot kroppen af ​​de funktioner, du tester i selve testen, og flytter derefter påstandene, indtil fejlen forsvinder.

Dette har den ekstra fordel ved at efterlade dig med mindre, mere specifikke test.

Edit: Tak til Jim Balter for at have påpeget dette link til et godt eksempel og forklaring på Saff Squeeze.

Når du har løst det, skal du bryde det og rette det igen

Efterlad aldrig en fejl, før du fuldt ud forstår, hvordan du fikseret den. Du skal være i stand til at gengive fejlen og rette den igen, når du vil.

Jeg kan ikke understrege dette nok. Hvis du løser en fejl, og du er ikke sikker på nøjagtigt, hvad der forårsagede den, eller hvordan du formåede at rette den, kommer bugten tilbage til at bide dig på det værst mulige tidspunkt.

Hvad med disse instinkter?

Nu hvor du har lært disse teknikker, betyder det, at du altid skal bruge dem først i stedet for at stole på dine instinkter? Nej. Absolut ikke.

Hvad jeg anbefaler er, at du giver dine instinkter en tidsboks til at lykkes. Hvis du har en stærk længe om, hvad problemet kan være - og du kan teste din længe hurtigt - gør det først. Hvis fejlen er under den grønne linje i diagrammet ovenfor, er chancerne for, at dine instinkter er den hurtigste vej til en løsning.

Når du hurtigt har prøvet din første eller anden fange og alligevel har taget forkert, skal du stoppe haglgeværet og begynde at gøre ting metodisk.

At have både instinkter og disciplin vil gøre dig til en af ​​de bedste kodere på ethvert hold.

Hvis du kunne lide dette stykke, skal du ❤ anbefale ❤ og dele det. Jeg vil gerne hjælpe så mange udviklere som jeg kan.

For at hjælpe dig endnu mere har jeg sammensat en gratis PDF-liste over mine fem foretrukne kodeforarbejdningsteknikker - der fører til færre fejl - få det ved
klik her.