Ärge nĂ”ustuge arendama seda, mida te ei mĂ”ista.

Ärge nĂ”ustuge arendama seda, mida te ei mĂ”ista.

Alates 2018. aasta algusest olen ma juhtinud arendusmeeskonda – kuidas iganes seda nimetada, aga oluline on see, et vastutan tĂ€ielikult ĂŒhe mooduli ning kĂ”igi arendajate eest, kes selle kallal töötavad. See positsioon avab mulle uue vaatenurga arendusprotsessile, kuna olen kaasatud rohkematesse projektidesse ja osalen aktiivsemalt otsuste tegemises. Hiljuti, tĂ€nu nendele kahele asjaolule, olen ma ootamatult mĂ”istnud, kui suurt mĂ”ju omab arusaam koodile ja rakendusele.

MÔte, mida soovin edastada, seisneb selles, et koodi (ja lÔpp-produkti) kvaliteet on tihedalt seotud sellega, kui teadlikud on inimesed, kes projekteerivad ja kirjutavad koodi, sellest, mida nad tegelikult teevad.

Te vĂ”ite justkui mĂ”elda: "AitĂ€h, kapten. Loomulikult oleks hea aru saada, mida ĂŒldse kirjutad. Vastasel juhul vĂ”iksime sama hĂ€sti palgata grupi ahve, et nad lihtsalt juhuslikult klahvidele toksiksid, ja sellega rahul olla." Ja te olete tĂ€iesti Ă”iged. Seega, ma oletan, et te mĂ”istate, et on vajalik ĂŒldine arusaam sellest, mida teete. Seda vĂ”iks nimetada arusaamise nulltasemeks, ja me ei hakka seda pĂ”hjalikult kĂ€sitlema. PĂ”hjalikult kĂ€sitleme, mida tĂ€pselt on vaja mĂ”ista ja kuidas see mĂ”jutab otsuseid, mida te iga pĂ€ev teete. Kui ma oleksin neid asju ette teadnud, oleks see mind vabastanud massilisest ajaraiskamisest ja kahtlasest koodist.

Kuigi allpool te ei nĂ€e ĂŒkski koodirida, pean siiski oluliseks, et kĂ”ik, mida siin öeldakse, on kvaliteetse ja vĂ€ljendusrikka koodi kirjutamise jaoks vĂ€ga oluline.

Esimene arusaamistase: Miks see ei tööta?

Selle taseme saavutavad arendajad tavaliselt oma karjÀÀri varases etapis, mĂ”nikord isegi ilma vĂ€lise abita — vĂ€hemalt minu tĂ€helepanekute kohaselt. Kujutage ette, et olete saanud veateate: mĂ”ni rakenduse funktsioon ei toimi, seda tuleb parandada. Kuidas te kĂ€itutate?

TavapÀrane skeem on jÀrgmine:

  1. Leida koodilÔik, mis pÔhjustab probleemi (kuidas see toimub, on eraldi teema; seda kÀsitlen oma raamatus vananenud koodi kohta)
  2. Teha selles lÔigus muudatused
  3. Veenduda, et viga on parandatud ja regressive vigu ei ole tekkinud

NĂŒĂŒd keskendume teisele punktile — muudatuste tegemisele koodis. On kaks lĂ€henemist: esiteks, sĂŒveneda praeguse koodi toimimisse, tuvastada viga ja see parandada. Teiseks: liikuda pimesi — lisada nĂ€iteks +1 tingimuslikku operaatorisse vĂ”i tsĂŒklisse, vaadata, kas funktsioon toimib nĂ”utud stsenaariumis, proovida siis veel midagi ja nii edasi lĂ”putult.

Õige lĂ€henemine on esimene. Kuidas selgitab oma raamatus Code Complete Steve McConnell (soovitan seda raamatut kindlasti), iga kord, kui me koodis midagi muudame, peame olema vĂ”imelised kindlalt ennustama, kuidas see rakendusele mĂ”jub. Tsiteerin mĂ€lust, kuid kui vea parandamine ei toimu nii, nagu sa ootasid, peaks see sind tĂ”siselt muretsema, peate kĂŒsimise alla seadma oma kogu tegevuskava.

KokkuvÔttes, et teostada korralikku vea parandamist, mis ei halvendaks koodi kvaliteeti, tuleb mÔista nii kogu koodi struktuuri kui ka konkreetse probleemi allikat.

Teine mÔistmise tase: Miks see töötab?

See tase on palju vÀhem intuitiivselt mÔistetav kui eelmine. Olles veel algaja arendaja, Ôppisin selle ometi oma juhilt, hiljem olen korduvalt seda sama asja selgitanud algajatele.

Seekord kujutame ette, et olete saanud kohe kaks vea aruannet: esimene puudutab stsenaariumi A, teine stsenaariumi B. MÔlemal juhul on midagi valesti. Seega hakkate esmalt tegelema esimese veaga. JÀrgides esimesel tasandil arusaamiseks vÀlja töötatud pÔhimÔtteid, uurite pÔhjalikult koodi, mis on seotud probleemiga, selgitades vÀlja, miks see paneb rakenduse kÀituma just nii stsenaariumis A, ning teete mÔistlikud muudatused, mis annavad soovitud tulemuse. KÔik lÀheb suurepÀraselt.

SeejĂ€rel liigute stsenaariumisse B. Korratakse stsenaariumi, et proovida viga esile kutsuda, kuid — ĂŒllatus! — nĂŒĂŒd töötab kĂ”ik nagu peab. Oma arvamuse kinnitamiseks tĂŒhistate muudatused, mis tehti vea A lahendamise kĂ€igus, ja viga B ilmub tagasi. Teie vea parandamine lahendas mĂ”lemad probleemid. Õnnestus!

Te ei oodanud seda ĂŒldse. Leidsid viisi, kuidas vea stsenaariumi A parandada, ja pole aimugi, miks see ka stsenaariumi B puhul töötas. Sel hetkel on suur kiusatus jĂ€reldada, et mĂ”lemad ĂŒlesanded on edukalt tĂ€idetud. See tundub loogiline: mĂ”te oli ju vigade kĂ”rvaldamises, eks? Kuid töö pole veel lĂ€bi: pead vĂ€lja selgitama, miks sinu tegevused parandasid vea stsenaariumis B. Miks? Sest see vĂ”ib töötada vale pĂ”himĂ”ttel, ja siis pead otsima uut lahendust. Siin on paar nĂ€idet sellistest olukordadest:

  • Kuna lahendus ei olnud konkreetselt suunatud vea B lahendamisele, arvestamata kĂ”iki tegureid, oled sa ehk tahtmatult purustanud funktsiooni C.
  • Pole vĂ€listatud, et kuskil peidab end veel kolmas bugin, mis on seotud sama funktsiooniga, ja su bugifiz maksab sĂŒsteemi korrektse töö stsenaariumis B sellele. Praegu nĂ€eb kĂ”ik hea vĂ€lja, kuid ĂŒhel kaunil pĂ€eval mĂ€rgatakse seda kolmandat bugin ja see parandatakse. Siis tekib stsenaariumis B taas viga, ja oleks hea, kui see oleks vaid seal.

See, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see, see.

Kolmas arusaamistasand: Miks see töötab?

Viimane arusaam, millega ma hiljuti kokku puutusin, on just see, ja ilmselt oleks mul selle mÔistmine andnud veelgi rohkem eeliseid, kui ma oleksin selleni varem jÔudnud.

Selguse huvides vĂ”tame nĂ€ite: teie moodul peab olema ĂŒhilduv funktsiooniga X. Teil ei ole funktsiooniga X eriti lĂ€hedast tutvust, kuid teile on öeldud, et selle ĂŒhilduvuse tagamiseks peate kasutama raamistikku F. Teised moodulid, mis integreeruvad X-iga, toimivad just selle raamistiku kaudu.

Teie kood ei ole oma elu esimesest pĂ€evast alates kunagi olnud seotud raamistikuga F, seetĂ”ttu on selle rakendamine tĂ”eliselt keeruline. See vĂ”ib pĂ”hjustada tĂ”siseid tagajĂ€rgi mĂ”ne mooduli komponendi jaoks. Sellegipoolest sukeldute sĂŒgavale arendusse: kirjutate nĂ€dalate kaupa koodi, testite, kĂ€ivitate pilootversioone, saad foorumitelt tagasisidet, parandate regressioonivigu, avastate ettenĂ€gematuid komplikatsioone, ei pea algselt kokkulepitud tĂ€htaegadest kinni, kirjutate veel natuke koodi, testite, saade tagasi ja parandate regressioonivigu — kĂ”ik selleks, et rakendada raamistikku F.

Ja mingil hetkel taipate jĂ€rsku — vĂ”i vĂ”ib-olla kuulete kedagi ĂŒtlevat — et raamistik F ei pruugi teile funktsiooni X ĂŒhilduvust pakkuda. VĂ”ib-olla on kĂ”ik see aeg ja vaev pandud tĂ€iesti valele asjale.

Kordagi projektiga töötades juhtus midagi sarnast. Miks see nii lĂ€ks? Sest ma ei mĂ”istnud hĂ€sti, mis on funktsiooni X olemus ja kuidas see seondub F raamistikuga. Kuidas oleksin pidanud toimima? Oli vaja kĂŒsida inimeselt, kes antud ĂŒlesande mÀÀrab, selgelt selgitada, kuidas kavandatud tegevuskava viib soovitud tulemuseni, selle asemel, et lihtsalt korrata seda, mis tehtud teiste moodulitega, vĂ”i uskuda, et see on vajalik funktsiooni X toimimiseks.

Selle projekti kogemus Ă”petas mind keelduma arendusprotsessi alustamisest, kuni meil on selge arusaam, miks meid palutakse teatud tegevusi teha. Otseselt keelduma. Kui saad ĂŒlesande, on esimene impuls - haarata sellest kohe kinni, et mitte aega raisata. Kuid poliitika „peatame projekti, kuni mĂ”istame kĂ”iki detaile“ vĂ”ib tuvastatud raisatud aja kĂ€rpida terve hulga vĂ”rra.

Isegi kui keegi ĂŒritab teid survet avaldada ja sundida teid tööle, kuigi te ei mĂ”ista, miks see vajalik on – vastanduge sellele. Esiteks selgitage vĂ€lja, millise eesmĂ€rgi nimel teile selline ĂŒlesanne antakse, ja otsustage, kas see on Ă”ige tee eesmĂ€rgi saavutamiseks. Ma pidin seda kĂ”ike valusa kogemuse kaudu Ă”ppima – loodan, et minu nĂ€ide vĂ”ib nende elu, kes seda loevad, kergemaks teha.

Neljas tasand arusaamisest: ???

Programmeerimises on alati midagi uut Ôppida ja usun, et olen puudutanud vaid teema arusaamise pindmisi kihte. Milliseid teisi arusaamiste tasandeid olete aastate jooksul koodiga töötades avastanud? Milliseid otsuseid olete teinud, mis on positiivselt mÔjutanud koodi ja rakenduse kvaliteeti? Millised otsused osutusid valeiks ja andsid teile vÀÀrtuslikke Ôppetunde? Jagage oma kogemusi kommentaarides.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster