Ekki samþykkja að þróa eitthvað sem þú skilur ekki

Ekki samþykkja að þróa eitthvað sem þú skilur ekki

Frá ársbyrjun 2018 hef ég gegnt stöðu forystu/stjóra/aðalframleiðanda í teyminu - kalla það það sem þú vilt, en málið er að ég ber alfarið ábyrgð á einni af einingunum og fyrir alla þróunaraðilana sem starfa. á það. Þessi staða gefur mér nýja sýn á þróunarferlið þar sem ég tek þátt í fleiri verkefnum og virkari í ákvarðanatöku. Nýlega, þökk sé þessum tveimur hlutum, áttaði ég mig skyndilega á hversu mikil áhrif skilningsmælikvarði hefur á kóðann og forritið.

Aðalatriðið sem ég vil taka fram er að gæði kóðans (og lokaafurðarinnar) eru nátengd því hversu meðvitað fólkið sem er að hanna og skrifa kóðann er um hvað það er að gera.

Þú gætir verið að hugsa núna, "Takk, Cap. Auðvitað væri gaman að skilja hvað þú ert að skrifa almennt. Annars gætirðu allt eins ráðið hóp af öpum til að slá á handahófskennda lykla og sleppa því.“ Og það er alveg rétt hjá þér. Í samræmi við það tek ég sem sjálfsögðum hlut að þú gerir þér grein fyrir því að það er nauðsynlegt að hafa almenna hugmynd um hvað þú ert að gera. Þetta má kalla núllstig skilnings og við munum ekki greina það í smáatriðum. Við munum skoða nákvæmlega hvað þú þarft að skilja og hvernig það hefur áhrif á ákvarðanir sem þú tekur á hverjum degi. Ef ég hefði vitað þessa hluti fyrirfram hefði það sparað mér mikinn tíma og vafasaman kóða.

Þó að þú sérð ekki eina línu af kóða fyrir neðan, þá tel ég samt að allt sem sagt er hér skipti miklu máli til að skrifa hágæða, svipmikinn kóða.

Fyrsta stig skilnings: Af hverju virkar það ekki?

Hönnuðir ná yfirleitt þessu stigi mjög snemma á ferlinum, stundum jafnvel án hjálpar frá öðrum - að minnsta kosti samkvæmt minni reynslu. Ímyndaðu þér að þú hafir fengið villutilkynningu: einhver aðgerð í forritinu virkar ekki, það þarf að laga hana. Hvernig ætlar þú að halda áfram?

Staðlað kerfi lítur svona út:

  1. Finndu kóðann sem veldur vandanum (hvernig á að gera þetta er sérstakt efni, ég fjalla um það í bókinni minni um eldri kóða)
  2. Gerðu breytingar á þessu broti
  3. Gakktu úr skugga um að villan sé lagfærð og að engar aðhvarfsvillur hafi átt sér stað

Nú skulum við einbeita okkur að öðru atriðinu - að gera breytingar á kóðanum. Það eru tvær aðferðir við þetta ferli. Í fyrsta lagi er að kafa ofan í hvað nákvæmlega er að gerast í núverandi kóða, bera kennsl á villuna og laga hana. Í öðru lagi: hreyfðu eftir tilfinningu - bættu, segðu, +1 við skilyrta yfirlýsingu eða lykkju, athugaðu hvort aðgerðin virkar í æskilegri atburðarás, reyndu svo eitthvað annað, og svo framvegis í óendanlega miklu magni.

Fyrsta aðferðin er rétt. Eins og Steve McConnell útskýrir í bók sinni Code Complete (sem ég mæli eindregið með, við the vegur), í hvert skipti sem við breytum einhverju í kóðanum, ættum við að geta spáð fyrir um með vissu hvernig það mun hafa áhrif á forritið. Ég er að vitna í minnið, en ef villuleiðrétting virkar ekki eins og þú bjóst við ættirðu að vera mjög brugðið og þú ættir að efast um alla aðgerðaáætlunina þína.

Til að draga saman það sem hefur verið sagt, til þess að framkvæma góða villuleiðréttingu sem rýrir ekki gæði kóðans, þarftu að skilja bæði alla uppbyggingu kóðans og uppsprettu tiltekna vandamálsins.

Annað stig skilnings: Hvers vegna virkar það?

Þetta stig er skilið mun minna innsæi en það fyrra. Ég, meðan ég var enn nýliði verktaki, lærði það þökk sé yfirmanni mínum og útskýrði í kjölfarið ítrekað kjarna málsins fyrir nýliðum.

Í þetta skiptið skulum við ímynda okkur að þú hafir fengið tvær villutilkynningar í einu: sú fyrri er um atburðarás A, önnur um atburðarás B. Í báðum tilfellum gerist eitthvað rangt. Í samræmi við það tæklarðu fyrstu villuna fyrst. Með því að nota meginreglurnar sem við þróuðum fyrir skilning á stigi XNUMX, kafarðu djúpt í kóðann sem skiptir máli fyrir vandamálið, finnur út hvers vegna það veldur því að forritið hegðar sér eins og það gerir í atburðarás A og gerir eðlilegar breytingar sem skila niðurstöðunni sem þú vilt. . Allt gengur frábærlega.

Síðan ferðu yfir í atburðarás B. Þú endurtekur atburðarásina til að reyna að kalla fram villu, en — kemur á óvart! — Nú virkar allt eins og það á að gera. Til að staðfesta ágiskun þína afturkallarðu breytingarnar sem þú gerðir á meðan þú varst að vinna í villu A og villu B kemur aftur. Villuleiðréttingin þín leysti bæði vandamálin. Heppinn!

Þú reiknaðir alls ekki með þessu. Þú hefur fundið upp leið til að laga villuna í atburðarás A og hefur ekki hugmynd um hvers vegna það virkaði fyrir atburðarás B. Á þessu stigi er mjög freistandi að halda að báðum verkefnum hafi verið lokið. Þetta er alveg rökrétt: tilgangurinn var að útrýma villum, var það ekki? En verkinu er ekki lokið enn: þú verður enn að finna út hvers vegna aðgerðir þínar leiðréttu villuna í atburðarás B. Hvers vegna? Vegna þess að það gæti verið að vinna á röngum meginreglum, og þá þarftu að leita að annarri leið út. Hér eru nokkur dæmi um slík tilvik:

  • Þar sem lausnin var ekki sniðin að villu B, að teknu tilliti til allra þátta, gætir þú verið með óafvitandi bilaða aðgerð C.
  • Það er hugsanlegt að það sé líka þriðja villan í leyni einhvers staðar, tengd sömu aðgerðinni, og villuleiðréttingin þín veltur á því fyrir rétta virkni kerfisins í atburðarás B. Allt lítur vel út núna, en einn daginn verður tekið eftir þessari þriðju villu og hann lagaður. Síðan í atburðarás B mun villan koma upp aftur og það er gott ef það er bara til staðar.

Allt þetta bætir glundroða við kóðann og mun einhvern tíma falla á hausinn á þér - líklegast á óheppilegustu augnablikinu. Þú verður að safna viljastyrk þínum til að þvinga þig til að eyða tíma í að skilja hvers vegna allt virðist virka, en það er þess virði.

Þriðja stig skilnings: Hvers vegna virkar það?

Nýleg innsýn mín tengist einmitt þessu stigi, og það er líklega það sem hefði gefið mér mestan ávinning ef ég hefði komið að þessari hugmynd fyrr.

Til að gera það skýrara skulum við líta á dæmi: Einingin þín þarf að vera samhæf við aðgerð X. Þú ert ekki sérstaklega kunnugur aðgerð X, en þér var sagt að til að vera samhæft við hana þarftu að nota F ramma. einingar sem samþættast X vinna nákvæmlega með honum.

Kóðinn þinn hefur alls ekki verið í snertingu við F rammakerfið frá fyrsta degi lífsins, svo það verður ekki svo auðvelt að innleiða hann. Þetta mun hafa alvarlegar afleiðingar fyrir suma hluta einingarinnar. Hins vegar kastarðu þér út í þróun: þú eyðir vikum í að skrifa kóða, prófa, setja út tilraunaútgáfur, fá endurgjöf, laga aðhvarfsvillur, uppgötva ófyrirséða fylgikvilla, standast ekki upphaflega samþykkta frest, skrifa smá kóða í viðbót, prófa, fá endurgjöf, samskipti, leiðrétta aðhvarfsvillur - allt þetta til að innleiða F rammann.

Og á einhverjum tímapunkti áttarðu þig allt í einu - eða heyrir kannski frá einhverjum - að kannski mun ramma F alls ekki veita þér samhæfni við eiginleika X. Kannski var allur þessi tími og fyrirhöfn sett í algjörlega rangt til þess.

Eitthvað svipað gerðist einu sinni þegar ég var að vinna að verkefni sem ég bar ábyrgð á. Hvers vegna gerðist þetta? Vegna þess að ég hafði lítinn skilning á því hvaða hlutverk X væri og hvernig það tengdist ramma F. Hvað hefði ég átt að gera? Biðjið þann sem úthlutar þróunarverkefninu að útskýra skýrt hvernig fyrirhuguð aðgerð leiðir til tilætluðrar niðurstöðu, frekar en að endurtaka einfaldlega það sem gert var fyrir aðrar einingar eða taka orð þeirra fyrir það að þetta er það sem eiginleiki X þarf að gera.

Reynslan af þessu verkefni kenndi mér að neita að hefja þróunarferlið fyrr en við höfum skýran skilning á því hvers vegna við erum beðin um að gera ákveðna hluti. Neita alfarið. Þegar þú færð verkefni er fyrsta hvatinn að takast á við það strax til að eyða ekki tíma. En „frysta verkefnið þar til við komumst í öll smáatriði“ stefnan getur dregið úr tímasóun um stærðargráður.

Jafnvel þótt þeir reyni að þrýsta á þig, til að þvinga þig til að hefja störf, þó þú skiljir ekki rökin fyrir þessu, andspænis. Fyrst skaltu finna út hvers vegna þú ert að fá slíkt verkefni og ákveða hvort þetta sé rétta leiðin að markmiðinu. Ég þurfti að læra þetta allt á erfiðan hátt - ég vona að dæmið mitt muni auðvelda þeim sem lesa þetta lífið.

Fjórða stig skilnings: ???

Það er alltaf meira að læra í forritun og ég tel að ég hafi aðeins klórað yfirborðið af umræðuefninu. Hvaða önnur skilningsstig hefur þú uppgötvað í gegnum árin þegar þú hefur unnið með kóða? Hvaða ákvarðanir tókuð þið sem höfðu jákvæð áhrif á gæði kóðans og umsóknarinnar? Hvaða ákvarðanir reyndust rangar og kenndu þér dýrmæta lexíu? Deildu reynslu þinni í athugasemdunum.

Heimild: www.habr.com

Bæta við athugasemd