
Alates 2018. aastast olen olnud liider/esimene/silmapaistev arendaja meeskonnas â nimetage seda kuidas soovite, kuid pĂ”hjus on see, et vastutan tĂ€ielikult ĂŒhe mooduli ja kĂ”igi arendajate eest, kes sellega töötavad. See positsioon avab mulle uue vaate arendusprotsessile, kuna olen kaasatud suuremasse hulka projekte ja osalen aktiivsemalt otsuste tegemises. Hiljuti, nende kahe asjaolu tĂ”ttu, taipasin ootamatult, kui palju arusaam mĂ”jutab koodi ja rakendust.
MÔte, mida tahan edastada, on, et koodi (ja lÔppproduktide) kvaliteet on tihedalt seotud sellega, kuivÔrd inimesed, kes projekteerivad ja koodi kirjutavad, mÔistavad, mida nad tegelikult teevad.
VĂ”ib-olla mĂ”tlete nĂŒĂŒd: "AitĂ€h, kapten. Loomulikult on parem mĂ”ista, mida kirjutad. Muul juhul vĂ”iks sama hĂ€sti palgata rĂŒhma ahve, et nad hakkaksid suvalistele klahvidele vajutama ja sellega leppida." Ja teil on tĂ€iesti Ă”igus. Seega, ma aktsepteerin, et te mĂ”istate, et ĂŒldine arusaam sellest, mida teete, on vajalik. Seda vĂ”ib nimetada nullitaseme arusaamiseks ja seda me ei hakka pikalt lahkama. RÀÀgime kindlasti, mida tĂ€pselt on vaja mĂ”ista ja kuidas see mĂ”jutab igapĂ€evaseid otsuseid, mida teete. Kui oleksin need asjad varem teadnud, oleksin vĂ€ltinud tohutult raisatud aega ja kahtlast koodi.
Kuigi allpool te koodijuppe ei nÀe, pean siiski vajalikuks rÔhutada, et kÔik, mida siinkohal öeldakse, on ÀÀrmiselt oluline kvaliteetse ja vÀljendusrikka koodi kirjutamise jaoks.
Esmataseme arusaam: Miks see ei tööta?
Selle tasemeni jĂ”uavad arendajad tavaliselt oma karjÀÀri varases etapis, vahel isegi ilma teiste abita â vĂ€hemalt minu tĂ€helepanekute kohaselt. Kujutage ette, et olete saanud viga teatava funktsiooni kohta: mĂ”ni rakenduse funktsioon ei tööta, seda tuleb parandada. Kuidas te kĂ€itute?
Tavallinen skeem nÀeb vÀlja jÀrgnev:
- Leida koodijupp, mis pÔhjustab probleemi (kuidas seda teha, on eraldi teema, mida kÀsitlen oma raamatus vananenud koodist)
- Teha muudatused sellele koodijupile
- Veenduda, et viga on parandatud ja tagasivisioonivigu ei esine
NĂŒĂŒd keskendume teisele punktile - muudatuste tegemisele koodis. Selleks on kaks lĂ€henemist. Esimene: sĂŒveneda sellesse, mis praeguses koodis toimub, tuvastada viga ja see parandada. Teine: edasi liikuda pimesi - lisada nĂ€iteks +1 tingimuslikul operaatoril vĂ”i tsĂŒklis, vaadata, kas see funktsioon töötab soovitud stsenaariumis, siis proovida midagi veel ja nii edasi lĂ”putult.
Ăige lĂ€henemine on esimene. Kuidas selgitab oma raamatus Code Complete Steve McConnell (soovitan seda raamatut vĂ€ga), iga kord, kui me teeme koodis muudatusi, peaksime olema vĂ”imelised kindlalt ennustama, kuidas see mĂ”jutab rakendust. Tsiteerin mĂ€lu jĂ€rgi, kuid kui vigade parandus ei tööta nii nagu ootasite, peaks see teid tugevalt hoiatama, peaksite kahtlema kogu oma tegevuskavas.
KokkuvÔttes, et teostada kvaliteetset vigade parandust, mis ei halvendaks koodi kvaliteeti, on vajalik mÔista nii koodi struktuuri kui ka konkreetse probleemi allikat.
Teine mÔistmise tase: Miks see toimib?
See tasand saavutatakse oluliselt vÀhem intuitiivselt kui eelmine. Mina, olles veel algaja arendaja, omandasin selle oma juhilt, ja hiljem olen korduvalt sama asja algajatele selgitanud.
Seekord kujutame ette, et olete saanud kohe kaks veateadet: esimeses on juttu stsenaariumist A, teises - stsenaariumist B. MĂ”lemas stsenaariumis toimub midagi valesti. Vastavalt sellele hakkate kĂ”igepealt esimese vea kallale. JĂ€rgides esimesest arusaamist lĂ€htuvaid pĂ”himĂ”tteid, sĂŒvenete korralikult probleemiga seotud koodisse, uurite, miks see paneb rakenduse stsenaariumis A kĂ€ituma just nii, ja teete mĂ”istlikud parandused, mis toovad soovitud tulemuse. KĂ”ik lĂ€heb suurepĂ€raselt.
SeejĂ€rel liigute stsenaariumisse B. Kordate stsenaariumi, et pĂŒĂŒda viga provotseerida, kuid - ĂŒllatus! - nĂŒĂŒd kĂ”ik töötab nagu peab. Oma oletuse kinnitamiseks tĂŒhistate A veaga töötamise kĂ€igus tehtud muudatused ja B viga naaseb. Teie vigade parandamine lahendas mĂ”lemad probleemid. Vedas!
Te ei oodanud seda ĂŒldse. Olete vĂ€lja mĂ”elnud viisi, kuidas parandada A-stsenaariumi viga ja ei tea, miks see töötas ka B-stsenaariumi puhul. KĂ€es on aeg, kus on suur kiusatus otsustada, et mĂ”lemad ĂŒlesanded on edukalt tĂ€idetud. See on tĂ€iesti loogiline: eesmĂ€rk oli ju vigade kĂ”rvaldamine, eks? Kuid töö ei ole veel lĂ”ppenud: teil on veel oluline vĂ€lja selgitada, miks teie tegevus parandas B-stsenaariumi viga. Miks? Sest see vĂ”ib töötada vale pĂ”himĂ”tete alusel ja siis peate leidma teise vĂ€ljundi. Siin on paar sellist juhtumit:
- Kuna lahendust ei valitud hÀdavajalikult B vea jÀrgi kÔiki tegureid arvestades, vÔib olla, et olete ise teadmata rikkunud funktsiooni C.
- Pole vĂ€listatud, et kuskil peitub ka kolmas bug, mis on seotud sama funktsiooniga, ja teie bugifiks seob B stsenaariumi sĂŒsteemi Ă”ige toimimise sellele. Praegu nĂ€eb kĂ”ik hea vĂ€lja, kuid ĂŒhel pĂ€eval mĂ€rgatakse seda kolmandat bugi ja parandatakse. Siis tekib B stsenaariumis jĂ€lle viga, ja olgu see ainult seal.
KĂ”ik see lisab koodi kaootilisust ja kukub teile kunagi kaela â tĂ”enĂ€oliselt kĂ”ige sobimatumal hetkel. Peate kokku koguma endas jĂ”u, et sundida ennast kulutama aega selle vĂ€lja selgitamiseks, miks kĂ”ik vĂ€liselt töötab, kuid see on seda vÀÀrt.
Kolmas arusaamise tase: Miks see töötab?
Minu hiljutine arusaam on just selle tasemega seotud ja tÔenÀoliselt annaks see mulle kÔige rohkem eeliseid, kui oleksin selle mÔtte peale varem tulnud.
Et asi selgem oleks, vĂ”tame nĂ€iteks: teie moodul peab olema ĂŒhilduv funktsiooniga X. Te ei tunne funktsiooni X eriti hĂ€sti, kuid teile on öeldud, et selle ĂŒhilduvuse tagamiseks peate kasutama raamistikku F. Teised moodulid, mis integreeruvad X-iga, töötavad just selle raamistikuga.
Teie kood ei ole oma elu esimesest pĂ€evast alates kokku puutunud raamistiku F-ga, seega ei ole selle rakendamine sugugi lihtne. See toob kaasa tĂ”siseid tagajĂ€rgi mĂ”nede mooduli osade jaoks. Sellegipoolest sukeldute te arendusse: nĂ€dalate viisi kirjutate koodi, testite, vĂ€ljastate esialgseid versioone, saate tagasisidet, parandate regressioonivigu, avastate ettenĂ€gematuid probleeme, ei mahu algselt kokkulepitud tĂ€htaegadesse, kirjutate veel mĂ”ne koodi, testite, saate tagasisidet, parandate regressioonivigu â kĂ”ik selleks, et rakendada raamistiku F-d.
Ja mingil hetkel te Ă€kki taipate â vĂ”i vĂ”ib-olla kuulete kelleltki â et raamistiku F kasutamine ei pruugi teile anda ĂŒhildatavust funktsiooniga X. VĂ”ib-olla olid kĂ”ik need aeg ja jĂ”ud suunatud tĂ€iesti valele teele.
Midagi sarnast juhtus kunagi projekti kĂ€igus, mille eest ma vastutasin. Miks see juhtus? Sest ma ei mĂ”istnud hĂ€sti, mis on funktsiooni X olemus ja kuidas see on seotud raamistiku F-ga. Mida oleksin pidanud tegema? Paluma inimesel, kes ĂŒlesande sĂ”nastab, selgelt selgitada, kuidas kavandatud tegevusplaan viib soovitud tulemuseni, selle asemel, et lihtsalt korrata seda, mida on tehtud teiste moodulite jaoks, vĂ”i uskuda, et nii on vajalik funktsiooni X töötamiseks.
Selle projekti kogemus Ă”petas mind keelduma arendustegevuse alustamisest, kui meil ei ole selget arusaama, miks meilt palutakse teatud tegevusi teha. Keelduma otse. Kui saad ĂŒlesande, on esimene impulss â haarata selle kallale kohe, et mitte aega raisata. Kuid poliitika âprojekti peatamine, kuni saame kĂ”igest arusaamiseâ vĂ”ib hoida raisatud aega tĂŒhja kulumise eest.
Isegi kui teid pĂŒĂŒavad survestada, sundides teid tööle asumiseks, kuigi te ei mĂ”ista, miks see on vajalik â vastanduge. Esiteks uurige, millise eesmĂ€rgiga teile selline ĂŒlesanne antakse, ja otsustage, kas see on Ă”ige tee eesmĂ€rgi saavutamiseks. Ma pidin selle kĂ”ik valusalt Ă”ppima â loodetavasti aitab minu kogemus neid, kes seda loevad.
Neljas arusaamistasandi tase: ???
Programmeerimises on alati midagi uut Ôppida, ja ma arvan, et olen vaid teema pinnale tÔmmanud. Milliseid teisi arusaamade tasandeid olete aastate jooksul koodiga töötades avastanud? Milliseid otsuseid olete teinud, mis on hÀsti mÔjunud koodi ja rakenduse kvaliteedile? Millised otsused on osutunud valevalikuks ja Ôpetanud teile vÀÀrtuslikku Ôpetust? Jagage oma kogemusi kommentaarides.
Allikas: habr.com
